Effective Java - 자바 유창하게 말하기

|



Effective Java Programming Language Guide
조슈아 블로치 지음, 이해일 옮김/대웅미디어

 VC++ 위주의 프로그래밍을 하다가 자바를 시작한지는 몇년 되지 않았기 때문에..
기본적인 문법을 다루고, 시스템을 구축하기는 어렵지 않았지만
자바 언어 자체에 대한 이해는 부족했던 것이 사실입니다.

Effective Java란 책을 읽어 보면서 자바 언어에 대해 좀 더 이해하게 됐다는 느낌이 들었습니다.
솔직히 equals나 hashCode의 재정의 같은 부분은 클래스를 수없이 만들면서도 한번도 생각하지 못한 것이었거든요 -.-

다만, 아쉬웠던 점은 번역서들이 대부분 그렇듯이.. 난해한 번역투의 문장이 많은 것이죠 ^^
아마도 원서의 내용은 매우 좋았을 것 같은데~~ 영어가 부족하니.. 감안하고 보는 수 밖에요.

그럼 책 내용을 간략하게 정리해보도록 하겠습니다.

1. 객체를 생성하고 파괴하기

Static Factory MethodSingleton과 같은 것은 디자인 패턴에 대한 책을 잠시 볼 때도 나왔었기에 이해하기가 쉬웠고요..

쓸데없는 객체를 중복 생성하지 않는 문제.. 다음과 같이 하지 말라는 거죠~
String s = new String("바보");
경우에 따라 간과하기 쉬운 것 같았슴다~~

그리고 finalize()를 사용하지 말라는 것..
가비지 컬렉터가 객체를 파괴하기 전에 호출하지만, 문제는 언제 객체를 파괴할 지 모르기 때문에 호출되는 시점을 알 수 없다는 것이죠..
음... C++에서는 소멸자를 매우 유용하게 썼었는데.. 자바에서는 실제로 거의 못봤던 것이죠..

2. 모든 객체의 공통 메소드 구현하기

여기에서 equals()와 hasCode()의 재정의에 대해서 봤습니다.
toString()의 재정의는 실제로 많이 사용하기는 했지만,

equals()나 hasCode()를 직접 재정의해 본 적은 없었네요..
표준 구현계약을 지켜서 재정의 하면 된다고 나와 있구요~~

clone() 메소드는 신중하게 재정의하라고 되어 있네요..
재정의 자체보다는 각 공통 메소드가 하는 일들을 다시 한번 정리한 점이 괜찮았던 것 같네요~~

3. 클래스와 인터페이스

OOP를 하면 나오는 것이고.. 자바 프로그래밍을 하려면 필수적인 것이라.. 색다른 내용은 없구요.
다만, final을 이용한 불변 클래스 (immutable class)를 많이 쓰라고 하는 점이 기억에 남네요..

4. C 구문 바꾸기

C언어에서 사용하는 구조체, union, enum 구문을 자바로 어떻게 변경해야 하는지 나타내고 있습니다.

구조체는 클래스로..
union은 클래스인데.. 계층구조로 즉, 추상클래스와 extends를 이용해서 바꾸라고 되어 있네요..
열거형(enum)은 클래스로 바꾸는데.. 타입안전 열거(typesafe enum) 패턴을 사용하라고 하네요..

타입안전 열거 패턴은 처음 들어봤는데요.. 나름 유용한 것 같네요. 왜 필요한지는 설명이 잘 되어 있슴다.

5. 메소드

코딩 규칙.. 즉, 메소드의 시그니처나 문서화를 위한 주석 (javadoc 같은 거겠죠..)을 하라는 이야기가 있구요.

중요한 부분으로는 방어복사(defensive copy)라는 것이 나오는데요..
메소드 내에서 인자(argument)를 처리할 때..
1. 메소드 내 인자 확인
2. 메소드 내 인자를 가지고 처리 후 결과 리턴

위 과정 사이에.. 즉 1.5 정도에 사용자가 인자의 내용을 바꾸면.. 원하는 결과가 나오지 않을 수 있다는 것이죠~
매우 간발의 차로 이루어지는 경우겠지만, 프로그래밍에서는 고려해야 하는 부분이겠죠..
그러므로 1번을 하기 전에 인자를 내부적으로 복사하라는 것이 바로 방어복사라고 합니다.

또하나.. 메소드에서 배열을 결과로 리턴할 때, 값이 없을 경우 null을 리턴하는 경우가 있는데..
null보다는 길이가 0인 배열을 리턴하는 것이 호출한 곳에서 받아서 처리할 때 좋다고 되어 있네요.
(음.. 이부분은 이렇게 사용해 왔던 것 같은데.. 다시 염두해 두어야 겠네요)

6. 프로그래밍 일반

일반적으로 고려해야 하는 사항들이 잘 정리되어 있습니다.
라이브러리를 잘 활용해야 한다는 이야기도 있구요..
정확한 계산에 float이나 double을 사용하면 안된다는 이야기
객체에 대한 참조는 인터페이스로 해야 확장성이 좋다는 점도..
신중하게 최적화하라는 이야기도 있네요.. (요건 프로젝트 관리 부분에서 한번 다루려고 합니다. ㅋㅋ)

7. 예외처리, 쓰레드, 직렬화

예외를 어떻게 처리해야 하는지.. 잘 설명되어 있구요..
쓰레드에 대해서는 조심해야 하는 부분들에 대해 간단히 설명되어 있습니다.
마지막으로 자바에서 많이 사용하는 직렬화(serialize)에서 주의사항들도 정리되어 있네요..

휴.. 내용을 간단히 정리해 봤습니다.
다음에 책 내용이 뭐더라~~ 하지 않으려고 한번 써보네요.. ㅋㅋ

그럼.. 좋은 하루 되세요!!





Trackback 0 And Comment 0