Home
Dohyun's Blog
Cancel

Item18 (상속보다는 컴포지션을 사용하라)

상속보다는 컴포지션을 사용하라 상속은 코드를 재사용함에 있어 강력한 수단이 된다. 그러나 항상 최선이지 않다. 잘못 사용하면 오류를 내기 쉬운 소프트웨어를 만들 뿐이다. 상속의 문제점 상속은 캡슐화를 깨뜨리고 상위 클래스에 의존적이게 되어 결합도가 높아진다. 상위 클래스의 구현이 하위 클래스의 동작에 영향을 끼칠 수 있고, 상위 클래스의 구현을...

Item17 (변경 가능성을 최소화하라)

변경 가능성을 최소화하라 불변 클래스란 그 인스턴스의 내부 값을 수정할 수 없는 클래스이다. 불변 인스턴스에 간직된 정보는 고정되어 객체가 파괴되는 순간까지 절대 달라지지 않는다. 자바 플랫폼 라이브러리에는 String, 기본 타입 박싱클래스, BigInteger 등이 불변으로 설계되어 있다. 객체를 불변으로 만드는 방법 객체의 상태를 ...

Item16 (public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라)

public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 인스턴스 필드들을 모아놓는 일 외에는 아무 목적도 없는 퇴보한 클래스를 작성하는 경우를 보자. class Point { public double y; public double x; } 이런 클래스는 코딩테스트 풀 때나 허용된다. 이 클래스의 문제점을 보자. publ...

Item15 (클래스와 멤버의 접근 권한을 최소화하라)

자바에는 클래스와 인터페이스 설계에 사용하는 강력한 요소가 많이 있다. 이번 아이템부터는 클래스와 인터페이스에 대해 다룬다. 자바의 강력한 요소들을 적절히 활용해 클래스와 인터페이스를 쓰기 편하고 견고하며 유연하게 만드는 방법들을 소개한다. 이번 장의 아이템들을 읽어본 후 개인적인 생각으로는 이번 아이템들이 나같이 자바에 미숙한 사람들에게 비교적...

Item14 (Comparable을 구현할 지 고려하라)

Comparable을 구현할 지 고려하라 Comparable 인터페이스의 compareTo는 단순 동치성 비교에 더해 순서까지 비교할 수 있고 제네릭하다. Comparable을 구현했다는 것은 그 클래스의 인스턴스들에는 자연적인 순서가 존재함을 뜻한다. class Point implements Comparable<Point> { ...

Item13 (clone 재정의는 주의해서 진행하라)

clone 재정의는 주의해서 진행하라 public interface Cloneable { } Cloneable은 복제해도 되는 클래스임을 명시하는 용도의 믹스인 인터페이스(mixin interface) 이다. 그런데 Cloneable 인터페이스에는 메서드조차 하나 없다. clone() 메서드는 Obejct 클래스에 protected로 구현되...

Item12 (toString을 항상 재정의하라)

toString을 항상 재정의하라 Object의 기본 toString 메서드는 우리가 작성한 클래스에 적합한 문자열을 반환하는 경우가 거의 없다. 많이 겪어봤겠지만 해당 메서드는 보통 아래와 같은 결과를 나타내게 된다. Test$Point@4d 클래스이름@16진수로 표시한 해시코드를 반환한다. toString의 규약 ...

Item11 (equals를 재정의하려거든 hashCode도 재정의하라)

equals를 재정의하려거든 hashCode도 재정의하라 equals를 재정의한 클래스에서 hashCode를 재정의하지 않으면 hashCode 일반 규약을 어기게 되어 해당 클래스의 인스턴스를 HashMap이나 HashSet같은 컬렉션의 원소로 사용할 때 문제를 일으키게 된다. equals가 두 객체를 같다고 판단했다면, 두 객체의 hashC...

Item10 (equals는 일반 규약을 지켜서 재정의하라)

Object Object는 객체를 만들 수 있는 구체 클래스이다. 그러나 기본적으로는 상속해서 사용하도록 설계되어 있다. Object에서 final이 아닌 메서드는 아래와 같다. equals hashCode toString clone finalize 위 메서드들은 모두 재정의를 염두에 두고 설계된 것이기 때문에 재정의 시 ...

Item9 (try-finally 보다 try-with-resources를 사용하라)

try-finally 보다 try-with-resources를 사용하라 자바 라이브러리에는 close() 메서드를 호출해 직접 닫아주어야 하는 자원이 많다. InputStream OutputStream java.sql.Connection 위와 같은 자원들이 좋은 예시이다. 이러한 자원 닫기는 클라이언트가 놓치기 쉬워 예측할 수 없...