본문 바로가기

이펙티브자바6

이펙티브 자바 - 계승을 위한 설계, 문서화 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - 개요 이전의 '계승대신 구성하라'는 규칙에서는 계승을 고려한 설계나 문서화가 되지 않은 클래스에 대해 하위 클래스 생성시 문제점을 살펴보았다. 그렇다면 '계승을 고려한 설계나 문서화'의 의미란 무엇인가? - 재정의 가능 메서드 문서 작성 재정의 가능 메서드는 non-final 인 public 이나 protected 접근제어자를 가진 메서드나 생성자를 말한다. 이들에 대해 재정의 가능 메서드의 호출 순서나 호출 결과를 문서로 남겨야 한다. 관습적으로 주석 맨 마지막 부분에 작성하며 '이 구현은~'으로 시작한다. /** * {@inheritDoc} * * This implementation iterates over the collecti.. 2021. 11. 21.
이펙티브 자바 - clone 재정의 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - Cloneable 인터페이스 Cloneable 은 객체의 복제를 허용한다는 사실을 알려주는 믹스인(mixin) 인터페이스이다. 하지만 문제점이 한 가지 있는데 clone 메소드가 없고 Object 의 clone 메소드의 접근제어자가 protected 라는것이다. 이렇게 되면 clone 메서드가 구현되어있으리라는 보장이 없는데 그럼에도 불구하고 널리 사용되므로 알아둘 필요가 있다. Cloneable 은 protected 접근제어자를 갖는 Object 의 clone 메소드가 어떻게 동작할지를 정하는 역할을 한다. clone 메서드가 정의되어있지도 않은 Cloneable 인터페이스를 도대체 왜 신경써야하는지 의문이 들 수 있다. 그냥 Cl.. 2021. 10. 11.
이펙티브 자바 - toString 재정의 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - toString 의 default 구현 toString 을 별도로 재정의 하지 않고 그냥 사용하게 될 경우 기본형은 클래스명@16진수와 같은 형태를 띄게 된다. 프로그램에 특별히 해를 끼치는것은 아니지만 사람이 보기에 그다지 유용한 정보는 아니다. /** * Returns a string representation of the object. In general, the * {@code toString} method returns a string that * "textually represents" this object. The result should * be a concise but informative representation .. 2021. 10. 4.
이펙티브 자바 - equals 재정의 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - equals 재정의 equals 메소드는 IDE 에서 자동으로 완성해주기 때문에 쉽다고 생각할 수 있지만 사실은 생각해야할 게 많다. equals 메소드를 정의하지 않아도 되는 경우가 있는데 이때 모든 객체는 자기 자신과만 동일하다. - equals 메소드를 재정의 하지 않아도 되는 경우 각 객체가 고유한 경우: 주로 Value Object 가 아닌 활성 객체(Active Entity, ex - Thread) 와 같은 경우가 이에 해당한다. 클래스에 동치성 검사방법이 존재하지 않아도 상관 없을 때 상위 클래스의 equals 메소드를 하위 클래스에서 그대로 사용가능한 경우: 대부분의 Set, List, Map 클래스는 각각 Abstra.. 2021. 9. 23.
이펙티브 자바 - 종료자 사용을 피하라 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - 종료자 Java 의 종료자(finalize)는 예측 불가능하며 대체로 위험하고 일반적인 상황에서는 불필요 하다. C++ 소멸자의 경우 메모리 반환과 자원반환의 일반적인 수단이지만, Java 의 경우 GC가 메모리를 정리해주고 자원반환과 같은 경우에도 try-finally 구문을 사용하기 때문에 정말 특수한 상황이 아니면 종료자를 사용할 필요가 없다. - 종료자의 단점 종료자의 첫번째 단점은 예측이 되지 않는다는것이다. 즉시 실행이 보장되지 않는데 모든 참조가 사라지고 난 후 종료자가 실행되기까지에는 어느정도 간격이 존재한다. 그래서 특히 time-critical 한 작업에는 절대로 종료자는 사용하면 안된다. 만약 file close .. 2021. 9. 22.
이펙티브 자바 - 정적 팩토리 메소드 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - 정적 팩토리 메소드 객체를 생성하는 일반적인 방법은 public 생성자를 이용하는것이다. 하지만 정적 팩토리 메소드를 이용할 수도 있다. Boolean 의 valueOf 메소드는 기본 타입의 boolean 을 Boolean 객체 참조로 변환한다. public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 흔히 정적 팩토리 메소드를 디자인 패턴의 팩토리 메소드와 혼동한다. 디자인 패턴의 팩토리 메소드는 하나의 환경변수나 다른 변수를 (팩토리)만 변경하면 제품군들도 일괄적으로 변경되어 생성되도록 하는 패턴이다. 예를 들어 객체 RadioA1과 .. 2021. 9. 5.