목록이펙티브 자바 (3)
공부하는 스누피
이펙티브 자바는 개발자 필독서로 자주 소개되는 책으로, 자바 언어를 어떻게 활용해야 하는지 가이드라인을 제시해 준다. 나는 이 책을 두 번 도전하여 한 번은 완독에 실패했는데, 가장 큰 이유는 이펙티브 자바를 읽기에는 내가 자바 언어를 하나도 모르고 있었기 때문이었다. 물론 학부 과정에서 자바 프로그래밍을 배웠지만 이 책의 첫 Item부터 나오는 여러 디자인 패턴과 자바 개념들을 이해하고 넘어가기 부족했다. 그렇게 Item 4를 마지막으로 첫 도전을 포기했고, 당시 5기로 활동중이었던 SSAFY에서 자바를 다 배우고 난 뒤에 다시 한번 도전하기로 했다. 자바의 전체적인 내용을 복습한 뒤, 이펙티브 자바를 읽기 시작했다. 이전과 다른 점은 함께 책을 읽고 이야기할 사람들이 있었다는 점이다. 2월 말에 책읽..
와일드 카드 와일드 카드는 제네릭 코드에서 물음표(?)로 표기되어 있는 것을 말하며, 아직 알려지지 않은 타입을 나타냅니다. 1) Bounded Wildcards (한정적 와일드카드) Upper Bounded Wildcards (extends를 사용한 한정적 와일드카드) : 타입의 제한을 풀어줄 때 사용합니다. 제네릭 타입들을 상위 제네릭 타입으로 묶어주는 것이라고 할 수 있습니다. public static void process(List)에서는 List이나 List 등 모든 타입이 List의 하위 타입이기 때문에 어떤 타입의 List라도 타입을 보존한 채 출력할 수 있습니다. 단, Object에는 Object의 하위 타입을 넣을 수 있지만 List에는 null만 넣을 수 있습니다. List에 어떤 타입..
equals 메서드는 Object 클래스에 정의되었지만, 객체 인스턴스 간 논리적 동치를 확인하기 위해 종종 재정의된다. 이 메서드를 재정의한다면 반드시 hashCode 메서드도 재정의해야 한다. hash를 사용하지 않는 클래스라도 Hash 기반의 자료구조의 요소일 경우 hashCode를 사용하게 되기 때문이다. Object 클래스에서는 equals 메서드를 단순 주소값 비교로만 사용한다. ==와 같은 역할을 한다고 보면 된다. Object를 상속받은 String같은 클래스의 경우 부모 클래스의 equals 메서드를 그대로 쓸 수는 없다. "hi"와 "hi"가 논리적으로는 같은 문자열인데 다른 String 인스턴스 변수에 들어 있으면 주소값을 비교해 다른 객체라는 결과가 나와버린다. 그래서 String뿐..