오늘은 알바도 안가고 약간 여유가 있어서.. 헤드퍼스트자바 책을 읽기로 했다.
선배가 이 책을 한 번 훑어보더니 13장까지만 읽으면 충분하다고했는데 아직 한참 남았다. 14장 이후로는 GUI 개념이었던가 그럼
용어정리
증/감 연산자 ++ / --
int x = 0;
System.out.println(x++); //1
파이썬에서의 =+ 연산자와 동일한 기능을 한다, +가 -로 바뀌면 그냥 빼기기능
int x = 0;
int z = ++x;
연산자를 변수 앞에 넣으면 x를 1 증가시키고 x의 새로운 값을 사용하라 라는 뜻이다.
다만, ++x의 경우에는 x의 값을 더하는 것을 먼저시행하고 대입하지만, x++ 의 경우에는 대입을 먼저 시행한다.
즉, int z = x++; 을 실행할 경우에는 x가 1이지만 z는 0
캐스트
long y = 328;
int x = y;
원래 이 코드는 실행할 수 없다. short - int - long 등의 관계에서 더 높은 길이의 값을 가지는 객체는 더 낮은 길이의 값을 가지는 객체에 넣을 수 없다. (이걸 길이라고했었나..)
하지만 이를 가능하게 하는게 바로 캐스팅
long y = 328;
int x = (int) y;
이렇게 캐스팅을 y를 x에 대입할 수 있다. 다만 이때는 y에서 int 크기 밑의 비트는 반영하지 않는다. 다만 long 타입이 int 타입이 최대/최소값보다 큰 값을 가질 경우 오버플로우가 일어난다.
float f = 3.28f
int x = (int) f
float - int 관계에서도 가능. 다만 이때는 소수의 정수부분만 반환한다.
boolean은 캐스팅 할 수 없다.
내용정리
4장까지는 인스턴스변수, 레퍼런스 등에 대해서 배웠다. 뭐 레퍼런스는 객체 자체를 저장하는게 아니라 객체의 주소를 저장한다 뭐 이런뜻... 동치 관계는 ==, 클래스 내 요소들이 같은가는 .equals 를 쓰면 된다고한다.
개강 전에는 헷갈리고 어려운 내용들이었는데 컴공개랑 실전 프로젝트랑 몇 개 해보니까 이해가 좀 되는 것 같기도하고.. 역시 직접 해봐야 실력이 는다.
5/6장에서는 메서드와 클래스에 대해 좀 더 심도있게 다룰 것 같다.
클래스 개발
클래스에 어떤 일을 줄 지, 이를 위해 인스턴스 변수와 메서드는 어떤 것이 필요한지 파악하는게 우선이다.
클래스 개발을 위해서는 클래스별로 세 가지 코드를 만들어야한다는데,
준비코드
실제로 쓴다기보다는 어떤 흐름으로 구성되는지, 자연어와 프로그래밍언어의 중간 느낌으로 구현한 코드

뭐 이러 느낌의 모델이 있다고치자.
그럼 준비코드는 세 부분으로 나뉘는데, 저 위의 모델이 두 번째 사각형, 즉 변수 선언 부분이 맨 위에 들어가고, 그 다음에 메서드에 대한 대략적인 기능 설명이 두 번째 부분, 메서드의 상세로직을 설명하는 부분이 세 번째로 들어간다. 이 때 로직 부분에 대해서는 실제 코드진행과 비슷하게끔 순서도 맞추며 들여쓰기까지 진행한다.
(07.24 0:48 수정)
클래스의 준비 코드는 변수 선언 - 메서드 선언 - 메서드 구현의 세 가지 요소로 이루어진다.
자세하게 어떻게 준비코드를 짜야할지는 6장 186페이지부터 상세하게 예시를 든다.
이 방식은 TDD(Test-Driven Development)의 기초적인 방식이라고 한다.

홍대 맛집 아카이빙 프로젝트 백엔드 개발 #6.1에서..
저기서의 TDD가 이 TDD라고 한다.
아무튼 이렇게 준비코드를 짜면 된다. 약간 클래스 명세서 같은 느낌? 이 코드를 보고 어떤 방향으로 프로그래밍을 할 지 정한다고 생각하면 될 듯하다.
메서드 public static void main(String[] args)
사용자가 추측한 정보를 저장할 numOfGuesses라는 int 변수를 선언합니다.
스타트업이 위치할 연속된 숫자 리스트인 location 이라는 int[] 변수를 선언합니다.
스타트업이 위치할 제일 왼쪽의 좌표인 locationFirst라는 int 변수를 선언합니다.
SimpleStartup 객체를 저장할 dot이라는 SimpleStartup 변수를 선언합니다.
SimpleStartup 객체의 checkYourSelf의 return 값을 저장할 result 라는 String 변수를 선언합니다.
추측한 횟수를 저장할 count 라는 int 변수를 선언합니다.
셀 위치의 시작점으로 쓸 0이상 4 이하의 난수를 계산합니다.
셀 위치의 시작점으로하여 +1, +2 위치를 location에 저장합니다.
dot 객체에 setLocationCells 메서드를 호출하여 location을 인자로 전달합니다.
스타트업이 살아 있는 동안 (while문) 명령을 통해 사용자로부터 위치를 받습니다.
dot 객체의 checkYourSelf 메서드를 호출하여 numOfGuessess 변수를 인자로 넘기고, 이를 result 변수에 저장합니다.
만약 result가 kill 이라면 "You took " + count + " guesses"를 호출하고 반복문을 종료합니다.
그렇지 않다면 count 에 1을 더합니다.
149페이지를 토대로 만든 준비 코드
몇 가지 수정사항이 있는데
위의 방식에서 main 메서드나 DDD 방식에서의 서비스는 도메인 (기능클래스) 들을 연결시켜주는 역할을 할 뿐 미리 변수를 선언할 필요까지는 없다. 인스턴스 변수로는 더더욱. 그냥 만들어두거나 미리 선언할 필요 없이 응답 등을 그때그때 받아서 처리해도 된다. 그게 서비스나 main 메서드의 특성이기 때문으로 보인다. 도메인에서는 객체의 정보를 담고 있어야하기 때문에 필요한거고.
추가로 준비 코드에서 while 문에 들어갈 조건을 써둬야한다. 책에서의 정답은 boolean isAlive 를 넣어두고 true일 때만 반복하도록 설정, 게임이 끝나면 false로 바꾸도록 설정했다. 그러면 break문도 필요없
테스트코드
테스트 대상을 만들기 전에 테스트 코드를 먼저 만드는 것은 위에 말한 TDD의 규칙이라고 한다. 더 쉽고 빠르게 코드를 만들 수 있다고한다.
책 추천 -> 테스트 주도 개발 (켄트 백 저) / 여기서는 TDD를 간략하게 소개하는데 테스트 코드를 단순하게 만들고 / 꾸준히 기회가 되면 무조건 리팩토링을 하고 / 테스트 통과 전까지는 출시하지 않고 / 스펙에 없는 것은 아무것도 넣지 않기 (지금 내가 종종 하는'나중에 써먹을지도 모르니까 넣어봐야지' 절대 금물) / 벼락치기 금물
테스트코드의 핵심은 테스트를 하는 것이 아니다라는 것이다. 단지 그냥 뼈대만이라도 세워두라는 것이다. 준비코드에서 요구하는 로직을 바탕으로 그 로직이 잘 수행되는지에 대한 테스트를 수행하라는 것이다. 즉, 내가 코드개발을 끝내고 테스트를 돌릴 때 지금 받을 수 없는 인자 (뭐 프론트엔드 요청이라던지..) 등에 대해서는 정해진 값을 대입시켜서 잘 나오는지 테스트하는 편이다. 이를 개발 전에 하라는 것. TDD의 기초가 된다고 한다.
또 이런 방식은 메서드의 기능, 역할 등을 좀 더 잘 이해할 수 있다고한다. 간단한 테스트 코드를 만들고 이를 위한 부분부터 개발하는 것이 이상적인 방식이라고 한다.
단순한 로직이나 메서드가 한 개 있을 경우에는 굳이 테스트를 진행하지 않아도 된다고한다.
실제코드
여긴 그냥 실제 코드 짜는데라 딱히 알 내용이 없음 어.. 예쁘게 짭시다?
소감
이 책은 인스턴스 변수를 주로 활용하는 편이다. 즉 기존에 내가 사용하던 방식과는 약간 다른 방식인, DDD에 좀 더 어울리는 방식인 듯하다. DDD로 나아가면서 DDD 입문자가 가장 알아야할 것은 '객체마다 가지고 있는 인스턴스 변수가 다르다'인 것 같다. 종종 아무생각없이 읽다보면 메서드가 인스턴스 변수에 접근해 값을 수정하면 '갑자기 이 값을 왜 수정하지? 다른 객체들은 영향을 받지 않나?' 내지는 '이 변수가 어디있는 변수지?' 생각을 할 때가 있다. 객체마다 인스턴스 변수의 값은 다르다라는 것을 인지하는게 좋을 것 같다. 아니 애초에 자바, 아니 그냥 객체지향언어를 처음부터 배울 때 그렇게 했으면 좋겠다. 고등학교에서 가르치는 파이썬을 좀 더 객체지향적으로 배운다던가.. 너무 과한걸 바라나 | 인스턴스 변수를 미리 설정해두고, 인자로 받는 것이 필요할 경우 인자로 받아서 대입하기. |
암튼 TDD, DDD 등에 대해서 많은 기초를 쌓을 수 있을거라고 기대된다. 물론 지금 홍대 맛집 아카이빙 프로젝트는 지금 어느정도 진척된 것이 있으므로 뭐 가을 때 내 개인 프로젝트부터 적용시켜보고자 한다. 아주 TDD, DDD, DB, JPA 등의 연습용으로 아주 간단한 프로그램 하나 만들어보기
'언어공부 > Java | Kotlin' 카테고리의 다른 글
| [2025백엔드] 헤드퍼스트자바 독서 #6 - 10장. 숫자는 정말 중요합니다 (5) | 2025.08.03 |
|---|---|
| [2025백엔드] 헤드퍼스트자바 독서 #5 - 9장. 객체의 삶과 죽음 (3) | 2025.07.27 |
| [2025백엔드] 헤드퍼스트자바 독서 #4 - 8장. 심각한 다형성 (2) | 2025.07.26 |
| [2025백엔드] 헤드퍼스트자바 독서 #3. - 7장. 객체 마을에서의 더 나은 삶 (1) | 2025.07.26 |
| [2025백엔드] 헤드퍼스트자바 독서 #2 - 6장. 자바 라이브러리 사용하기 (3) | 2025.07.24 |