Agile Java Lesson 2, 3

기본

여전히 흥미로운 챕터 구성입니다. 이제서야 int(이것 만;)가 나오는 반면에 갑작스런 ArrayList의 등장. 두둥. 하지만 이 구성이 오히려 괜찮아 보이는건 예제 프로그램에서 기능을 구현함에 있어 당장 필요한 것이기 때문입니다.

작년 C++ 공부할 때 Accelerated C++ 책을 좀 봤었는데, 이 책도 하나의 예제를 점점 완성해 나가면서 필요한 것을 배우는 구성이었습니다. 참 재미있게 봤었는데 보다가 한 번 놓치니까 붕 떠버리더라구요. 장/단점이 있는 것 같습니다.

레슨 2에서 데이터 저장 클래스만 다루는 것은 쓸모없는 시스템이며, 객체 지향 시스템은 특정 동작을 모델링 하는 것이라고 합니다. 대학 수업 때 클래스 만드는 첫 번째 방법으로 동사와 명사를 구분하는 작업을 하던게 기억나는데, 역시 객체 지향은 어떠한 동작이나 행동이 주가 되고 이런 동작을 하기 위해 필요한 데이터를 찾는 식이 더 좋은 접근 방법인 것 같습니다.

책에서 테스트 메소드를 작성하는 이유에 대해 저자가 이렇게 말합니다.

테스트 메소드를 작성하는 것은 부분적으로 개발자가 해당 클래스를 사용하기 위한 공용 인터페이스(public interface)를 디자인하는 과정이다.

그리고 클래스 디자인의 목표는 클래스를 사용하고자 하는 개발자가 가장 단순하게 사용할 수 있도록 하는 것이라고 하는군요. 이 책 여기저기에서 툭툭 던지는 말이 굉장히 뼈있는 말이 많습니다. 참.. 어려운 거죠. 그래도 리팩토링으로 꾸준히 바꿔나가다 보면 언젠간 좋은 설계에 다다를 것이라고 믿어야죠.

이번에 클래스가 대폭 추가됨에 따라 테스트 스위트(suites)를 사용합니다. 책과 다르게 JUnit 4를 사용하니 어노테이션이 길어지고 클래스는 비어있는 이상한 형태가 되어버리는군요.

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({StudentTest.class, CourseSessionTest.class})
public class AllTests {
}

ArrayList 다루면서 Generic도 살짝 나오네요. 만약 자바를 이 책으로 처음 시작한다면 아무래도 개념적인 이해를 돕기 위해 헤드 퍼스트를 같이 보는게 좋을 것 같습니다.

책에서 메소드 리팩토링의 기준을 말하는데 메소드는 한 줄에서 여섯 줄이어야 한다고 합니다. 그 이유는 메소드를 빠르게 이해하고 관리하기 위해서 라고 하구요. 더 길어지면 좀 더 작은 메소드로 분할하라는군요. 음.. 그러고 보면 봄싹 메소드들도 대략 4~5줄 정도 였던 것 같습니다.

그리고 주석은 잘못되거나 오해를 만들기 쉽기 때문에 코드 자체를 의미가 명확하게 짜라고 하는군요. 저자는 JavaDoc에도 이미 메소드나 필드 이름 자체가 나타내는 정도 말고 정말 모를만한 걸 적으라고 하는데 아마 애자일 사용하면 문서 작성이 줄어든다는게 이런 걸 염두해 두고 하는 말 같습니다. 그런데 비영어권에선 힘들지 않을런지..;

레슨 2 끝에 JavaDoc 생성하는 부분이 나오는데, 여기서 한글 깨짐 현상이 발생하더군요. 여기를 참고했는데 앞에 locale을 붙이면 에러나서 빼고 해봤는데 한글 깨짐 현상은 없어 졌습니다.

-encoding UTF-8 -charset UTF-8 -docencoding UTF-8

레슨 3에서 루프가 처음 등장하는데 바로 for-each입니다 ㄷㄷ 이 책은 Java 5를 추가한게 아니라 녹여넣었다는 느낌이 듭니다. 패키지가 복잡해 짐에 따라 패키지 별로 하나의 AllTests 클래스를 만들라고 합니다. 이렇게 만들다 보면 가장 최상위 패키지에 있는 AllTests 하나만 실행해 주면 모든 테스트를 한 번에 실행할 수 있습니다. 음.. 그런데 이런 경우 Maven에서 mvn test 할 경우 테스트가 중복되더군요. 테스트 할 때 특정 클래스를 지정할 수도 있지만 그냥 AllTests 클래스를 굳이 만들지 않아도 될 것 같습니다.

오늘 기선이형 블로그에 메이븐 포스트를 보다가 토비님 포스트도 보게 됐습니다. 그래서 책에 있는 Ant 버리고 Maven을 다시 써보려고 했죠. 이제 Phase, Goal이 뭔지 알 것 같습니다. 박재성님의 자바 프로젝트 필수 유틸리티 책도 큰 도움이 됐네요. (yes24는 배송의 끝인듯)

레슨 3 연습문제 화면 출력하는 부분에서 고민 좀 했습니다. 결국 List<List<Pawn>> 식으로 처리했는데 왠지 저자 의도는 이게 아닌거 같은데 말이죠;;

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중