[공부] 독서/이펙티브 자바 3판(4)
-
[2019.03.17] 이팩티브 자바 3판 (5장 : 제네릭 사용시 - )
제네릭에 지정된 타입은 실체화 불가한 타입이라는 것을 명심하자. + 알아서 형변환 코드를 추가할 수 있다. - 코드가 지저분해진다. Raw 타입과 제네릭 제네릭 클래스를 사용할 때 raw type 제네릭은 절대 쓰지마라 public class MyGeneric{ // ... } 이 있을 때 MyGeneric myGeneric = MyGeneric(); 과 같이 제네릭 매개변수를 안넣어주는 경우 raw type이라고 한다. MyGeneric와 같은 와일드 카드 타입을 사용하라. raw type 을 사용하면 제네릭이 안겨주는 안전성과 표현력을 잃는다. 그러므로 절대 쓰지말자 IDE 가 알려주는 제니릭의 경고 제네릭을 사용하면서 생기는 모든 경고는 가능하면 없애라. 경고를 제거할 수 없지만 안전하다고 확신이 ..
2019.03.17 -
[2019.03.10] 이펙티브 자바 3판 (4장 : 클래스, 인터페이스 설계)
접근 제한자 모든 클래스의 멤버 접근성을 최대한 줄여라 public 클래스의 모든 멤버 변수는 private 이여야한다. 유일하게 허용되는 public 멤버 변수 : public staitc final 일 때 (단 멤버 변수가 배열이면 보안상의 문제가 존재하므로 허용하지 않는다.) 유일하게 허용되는 제한자 확장 : private 멤버를 package-private으로 풀어주는 경우 불변 클래스 불변 클래스를 만드는 방법 setter를 제공하지 않는다. 상속을 못하게 막는다. (= final class로 선언한다.) 모든 변수를 private final로 선언한다. 가변 컴포넌트를 가지고 있다면 자신 외에 접근 못하게 막는다. 불변 객체의 장점 스레드의 공유자원으로서 안전하다. 불변 객체끼리는 내부 데이터..
2019.03.10 -
[2019.03.09] 이펙티브 자바 3판 (3장 : 공통 메소드)
공통 메소드 equals hashCode toString finalize 특정 메소드의 호출이 금지 되게 하고 싶으면 오버라이딩하고 throw new AssertionError(); 를 넣어놔라 꼭 필요한게 아니면 재정의 하지말라 공통메소드를 재정의 할 때는 다음 규약을 지켜야한다. equals equals은 논리적 동일성을 판단하는 메소드다. 상위 클래스에서 재정의한 equals 는 하위 클래스의 equals에도 상속된다. equals를 재정의하면 hashcode도 재정의 해야한다. equals 메소드는 동치 관계여야한다. 반사성 : x.equals(x) = true 대칭성 : x.equals(y) = true => y.equals(x) = true 연쇄성 : x.equals(y) y.equals(z)..
2019.03.10 -
[2019.03.09] 이팩티브 자바 3판 (1,2장 : 객체 생성 파괴)
1장 코드는 복사되는게 아니라 재사용 되야한다. 책의 목표 : 명료성, 단순성 객체를 생성하는법 생성자 정적 팩토리 메소드 정적 팩토리 메소드의 의미 : (메소드) 인데 클래스 밖에서 new 없이 메소드를 호출하기 위해선 static(정적)이여야 한다. 그리고 객체를 만들어주는 메소드이니까 (팩토리) 이다. GoF 패턴에는 존재하지 않는 기법이다. 팩토리 메소드 패턴과는 다르다. 가능하면 생성자보다 이 방법을 사용하라. 참고 템플릿 메소드 패턴 : 메소드들이 템플릿화 되어 실행순서가 알고리즘 화 되도록 하는 것 onPrepare() -> onRun()-> onPost() 팩토리 메소드 패턴 : 팩토리 메소드 패턴은 잘못 붙여진 이름이라고 함 템플릿 팩토리 클래스 패턴이라고 생각하는게 좋을 듯 싶다. 팩토..
2019.03.06