전체 글 55

week5: 자바 SOLID원칙

SOLID 원칙이란?유지보수성, 유연한 확장성, 재사용성 같은 좋은 코드를 만들 수 있는 원칙이다. 코드는 한번 만들고 끝나는게 아니라 유지, 보수, 확장을 거쳐야하기 때문에 처음에 설계할 때 이에 유용한 코드를 만드는 것이 좋다. 목적: 결합도는 낮추고, 응집도는 높이자! 결합도: 모듈과 모듈간의 의존 정도 == 클래스간 관계가 느슨 -> 변경이 자유롭다.응집도: 한 모듈 내 구성요소의 연관정도 == 클래스의 내부 목적이 뚜렷 -> 코드가 명확 예) battle과제에서 player가 무기를 생성하고 관리하는 형태는 여러 책임이 혼합되어 응집도가 낮다. 그럼 player가 외부에서 무기를 공급받고, 공격만 하는 주체라면? => 결합도가 낮아진다. interface Weapon{ void use();}c..

자바 2025.10.03

week4: 자바 Thread -2

멀티 쓰레드의 사용을 생각해보자테트리스 프로그램을 구상해보면최소 3개의 쓰레드가 필요하다. (오디오 재생, 블록 아래 움직이는 코드, 키 입력을 받아 블록의 방향을 바꾸는 코드)JVM은 3개의 쓰레드 중 하나를 선택하여 실행시킨다.JVM이 쓰레드 A를 실행하는 중 B를 실행시키려면 A를 일시 중단하고, B를 호출해야한다. 실행 상황1. Thread 클래스를 이용하여 새로운 Thread객체가 생성된다.2. start()를 통해 생성된 Thread를 실행한다.=> 실행 가능 상태 돌입3. Thread가 스케쥴링 큐에 넣어지고 스케줄러에 의해 우선위에 따라 실행된다.실행 중 일시 중단wait(), sleep(), 입출력 작업을 위해 대기하는 경우 안전한 멀티 프로세싱을 위해서는 정교한 상태 제어가 필요하다. ..

자바 2025.10.01

위드플래닛 프로젝트: 기획 재구성 (코더가 기획의 벽에 부딪혔을 때)

멘토링 이후 문제점 인식:우리 팀은 '아이템을 수집하고 가치를 파악하는' 독창적인 게임을 만들고 있었다. 초기 컨셉에 대한 애정과 팀원들의 열정으로 순조롭게 개발이 진행되는 듯했다. 하지만 마음 한구석의 불안감은 사라지지 않았다. 이걸 유저들이 재밋어 할까? 게임으로서의 목표, 재미가 뭘까? 멘토링을 다녀오고 우리 게임이 게임같지 않다는 문제점을 크게 느끼게 되었다. 멘토님께서 하신 이야기는 유저가 뭘 할지 정보가 너무 부족하다는 것이었다. 우리 게임에서 첫번째로 가져간 컨셉이 자유도 였지만, 맵을 축소하고, 시스템을 수정하다보니 오히려 이 자유성이 유저에게 혼란스러움을 가져왔다. 다른 팀들의 게임은 익숙한 형식 속에서 명확한 목표와 재미를 제공하고 있었다. 하지만 우리 게임은 '전에 없던 형식'과 ..

프로젝트 2025.09.28

week4: 자바 Thread

멀티 쓰레드 : 하나의 프로그램 내에서 여러 작업들을 동시에 수행할 수 있다.=> 이제 하나가 끝날 때 까지 기다리는 것이 아니라 여러 작업을 수행할 수 있게된다.단위: 쓰레드 - 프로세스 내에서 메모리를 공유한다. (이 때문에 문제가 발생하기도 한다. 후에 설명)=> 쓰레드 간에 데이터를 쉽게 주고 받는다.메모리를 공유하며 독립적으로 동작하기 때문에 빠른 응답을 하고, 이를 동시에 접근하기 때문에 동기화 문제가 발생할 수 있다.예시) 워드 프로세서에서 사용자의 입력을 받는 쓰레드와 맞춤법 검사를 하는 쓰레드가 동시에 작동하는 현상예시) 여러 쓰레드가 동시에 동일한 데이터에 접근을 하여 수정하려고할 때 데이터의 일관성이 깨진다. 자바의 멀티 쓰레드특징:실행 중인 쓰레드가 하나라도 있으면 프로그램이 종료되..

자바 2025.09.27

프로젝트- cctv벽 개발 (하나의 기능을 완성하기 위한 3번의 피봇)

이번 프로젝트에서 나는 'CCTV 벽'이라는 하나의 기능을 개발하는 임무를 맡았다. 처음에는 맵의 분위기를 살리는 장식적 요소라고 가볍게 생각했지만, 이 기능 하나를 완성하기까지 무려 세 번의 방향 전환(Pivot)을 겪으며 개발자로서 가장 큰 성장을 경험했다.1: "플레이어를 추적하라!" - 잘못된 이해와 기술적 도전처음 기획서를 봤을 때, 나는 '플레이어가 감지되면 CCTV들이 플레이어를 따라다니는' 인터랙티브한 장식물이라고 이해했다. 명확한 설계가 없었기에, 내 상상력을 발휘하여 개발을 시작했다. 단순히 2D 스프라이트를 플레이어 방향으로 뒤집고(flip), 따라가게만 하면 될 줄 알았다. 하지만 현실은 달랐다. 쿼터뷰 시점의 3D 공간에서 2D 스프라이트를 자연스럽게 특정 대상을 바라보게 만드는..

카테고리 없음 2025.09.23

week3. 자바 Collections (set,list,map )

ListList는 배열과 같이 순서가 있고, 배열처럼 index로 요소에 접근한다. 먼저 배열이 뭔지 알아보자!배열의 단점: 배열은 데이터의 추가와 삭제에 매우 비효율적.배열은 데이터들이 메모리에 연속적으로 나열된 구조입.중간에 있는 데이터를 삭제하면 그 뒤의 모든 데이터를 한 칸씩 앞으로 당겨야 하고, 중간에 데이터를 추가하려면 그 뒤의 모든 데이터를 한 칸씩 뒤로 밀어야 합니다. 데이터가 많을수록 이 작업은 매우 느려짐! 크기가 고정되어 있다. (생성 시 크기 지정 필수) 기본 타입을 다룬다. ( int, double, char ) 배열은 new()와 같은 생성자를 사용하지 않는다. 객체처럼 괄호()를 쓰는 방식이 아니라 대괄호[] 를 사용해 크기를 지정한다.배열은 크기가 고정되어 있기 때문에 크기가..

자바 2025.09.23

week2: 자바 프로그래밍 (static, final, 싱글톤)

접근지정자 개념: private default protected public static / final / 싱글톤 static: new로 생성하지 않는 객체나 공유 변수에 사용final : 변경금지메소드는 오버로딩/오버라이딩 불가변수는 상수화, 클래스는 상속 금지final 클래스: 상속 불가final로 선언된 클래스를 상속하려고 시도하면 컴파일 에러가 발생한다.final class Animal { // final 키워드로 상속 금지 선언 void eat() { System.out.println("먹이를 먹습니다."); }}// final로 선언된 Animal 클래스를 상속하려고 하면 에러 발생!class Dog extends Animal { // 컴파일 에러: Cannot inh..

자바 2025.09.19

새 시작& 자바 개념 복습

방학동안 프로젝트도 하면서 코드 짜는 실력을 키웠지만아직 부족한 점이 많다 자프실2 로 새로 시작하면서 내가 많이 까먹었고, 내 실력이 부족했었다는것을 알게되었다. 이번 자프실2는 정말 제대로 내 코딩 근육을 키우는 시간으로 만들어보려고한다. 프로젝트를 하면서 느낀 것은 내 코딩 습관의 문제다.하나를 처리하지 못하고 여러가지에 정신이 팔려 정작 문제를 해결하지 못하는 문제,디버깅 방법을 모르는 문제.. (중단점과 스택을 이용해 효과적인 디버깅을 수행해야한다. )자프실2를 통해 내 코딩 근육을 키우고, 코테 스터디를 통해 진짜 내 실력을 키우려고한다. ---------------------------------------------------------------------------------------..

자바 2025.09.07

6. Inheritance and Polymorphism

자바에서는 상속관계가 중요하다이 과정은 부모 클래스의 멤버를 자식 클래스가 물려받는것!다중상속X: 자바에서는 클래스마다 파일 하나씩 사용하는 게 원칙이다..여러 파일이어도 서로 클래스 간 접근이 가능하다. (접근이가능하다면) 상속받을때는 extends 를 이용한다class Shape { // Shape class members}class Triangle extends Shape { // additional Triangle class members}이렇게하면 Trianlge 은 shpae을 상속한다. 자식클래스는 부모클래스의 'is-a' 관계를 가진다. 그럼 자식클래스와 부모클래스의 관계를 생성자 관계에서 살펴보자!부모의 멤버는 상속되지만, 생성자는 상속되지 않는다.대신 super() 를 사용하여 부모..

자바 2025.05.27