본문 바로가기

Effective Java 2nd

[Effective Java] 23. 새로 작성하는 코드에서는 원천(raw) 타입을 사용하지 말자. [Effective Java] 23. 새로 작성하는 코드에서는 원천(raw) 타입을 사용하지 말자.   제네릭을 사용하면 각 컬렉션에 어떤 타입의 객체를 허용할 것인지 컴파일러에게 알려주게 되며, 캐스트 코드를 컴파일러가 자동으로 만들어준다. 또한 잘못된 타입의 객체를 추가하려고 하면 컴파일 시에 알려준다.   하나 이상의 타입 매개변수(type parameter)를 선언하고 있는 클래스나 인터페이스를 제네릭 클래스, 또..
[Effective Java] 15. 가변성을 최소화하자. [Effective Java] 15. 가변성을 최소화하자. 불변(immutable) 클래스는 자신의 인스턴스가 갖는 값을 변경할 수 없는 클래스이다. 각 인스턴스가 갖는 모든 정보는 그것이 생성될 때 제공되며 객체로 살아있는동안 변경되지 않는다. 자바의 불변 클래스는 String, 박스화 기본형(boxed primitive) 클래스, BigInteger, BigDecimal 등등이 있다. 불변 클래스는 가변 클래스에 비해 설계와 구현 및 사용..
[Effective Java] 11. clone 메소드는 신중하게 오버라이드 하자. [Effective Java] 11. clone 메소드는 신중하게 오버라이드 하자. Cloneable 인터페이스는 복제를 허용하는 객체라는 것을 알리는 목적으로 사용하는 믹스인 인터페이스(mixin interface) 아무런 method도 없는 Cloneable 인터페이스는 어디에 쓰이는 것일까? 이 인터페이스는 Object 클래스의 protected 메소드인 clone의 행동 방식을 규정한다. 만약, clone 메소드가 호..
[Effective Java] 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자. 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자.  Java API Object.hashCode 메소드 spec에 명시 - 애플리케이션 실행 중에 같은 객체에 대해 한 번 이상 호출되더라도 hashCode 메소드는 같은 정수를 일관성있게 반환해야 한다. - equals(Object) 메소드 호출 결과 두 객체가 동일하다면, 두 객체 각각에 대해 hashCode 메소드..
[Effective Java] 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. equals메소드를 오버라이드 하지 않고 써야할때 - 클래스의 각 인스턴스가 본래부터 유일한 경우 - 두 인스턴스가 논리적으로 같은지 검사하지 않아도 되는 클래스의 경우 - 수퍼 클래스에서 equals를 이미 오버라이딩 했고, 그 메소드를 그대로 사용해도 좋은 경우 - private나 패키지 전용 클래스라서 이 클래스의 equals 메소드가 절대 호출되..
[Effective Java] 5. 불필요한 객체 생성을 피하자 5. 불필요한 객체 생성을 피하자 불변(immutable) 객체는 항상 재사용가능하다. String s = new String("buri");  이렇게 쓰지 말고 String s = "buri";  이렇게 쓰자는거 실행될 때마다 새로운 인스턴스를 생성하지 않고 하나의 String 인스턴스를 사용하며 같은 JVM에서 실행되는 어떤 코드에서도 동일한 문자열 리터럴(literal)을 갖..
[Effective Java] 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자 static 메소드나 static 필드만을 모아 놓은 클래스를 만들필요가 있는 유틸리티성 클래스는 인스턴스 생성이 무의미하다.  그러나 그런 클래스라도 명시적으로 지정한 생성자가 없을때 컴파일러가 디폴트 생성자 (public 이며 매개변수가 없는)를 만들어주기 때문에 javadoc 프로그램으로 생성하는 API 문서에도 나타나기 때문에 인스턴스 생성이 가능한 클래..
[Effective Java] 3. private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자. 3. private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자. 싱글톤(singleton)은 정확히 하나의 인스턴스만 생성되는 클래스. 싱글톤은 본질적으로 유일한 시스템 컴포넌트를 나타낸다. 예를 들면, 윈도우 매니저나 파일 시스템 등 자바 1.5 이후 싱글톤 구현하는 가장 좋은 방법 //열거형( Enum) 싱글톤 public enum Elvis {       INSTA..
[Effective Java] 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자. Static 팩토리 메소드와 생성자의 공통적인 제약은 선택 가능한 매개변수가 많아질 경우 신축성 있게 처리하지 못한다는 것인데, 흔히 나도 그러한데 텔리스코핑 생성자(telescoping constructor)패턴을 사용한다.  필수 매개변수들만 갖는 생성자, 필수 매개변수들과 선택 매개변수 하나를 갖는 생성자, 선택 매개변수 두개를 갖는 생성자 등등의 형태로 오버로딩을 통해 여러개의 생성자를 겹겹이 만드는 것이다. public..