목록Book/이팩티브 자바 (4)
leelee.log
Effective Java 3e 아이템 86을 요약한 내용입니다. 어떤 클래스의 인스턴스를 직렬화할 수 있게 하려면 클래스 선언에 implements Serializable만 덧붙이면 된다. 직렬화를 지원하기란 짧게 보면 손쉬워 보이지만, 길게 보면 아주 값비싼 일이다. Serializable을 구현하면 릴리스한 뒤에는 수정하기 어렵다 클래스가 Serializable을 구현하면 직렬화된 바이트 스트림 인코딩(직렬화 형태)도 하나의 공개 API가 된다. 그래서 이 클래스가 널리 퍼진다면 그 직렬화 혙태도 영원히 지원해야 한다. 커스텀 직렬화 형태를 설계하지 않고 자바의 기본 방식을 사용하면 직렬화 형태는 최소 적용 당시 클래스의 내부 구현 방식에 영원히 묶여버린다. 기본 직렬화 형태에서는 클래스의 priv..
Effective Java 3e item 74 메서드가 던지는 모든 예외를 문서화하라를 요약한 내용입니다. 메서드가 던지는 예외는 그 메서드를 올바로 사용하는 데 아주 중요한 정보다. 따라서 예외 하나하나를 문서화를 하는데 충분한 시간을 쏟아야 한다. 검사 예외는 항상 따로따로 선언하고, 각 예외가 발생하는 상황을 자바독의 @throws 태그를 사용하여 정확히 문서화 하자. 공통 상위 클래스 하나로 뭉뚱그려 선언하는 일은 삼가자. 극단적인 예로 메서드가 최상위 예외인 Exception과 Throwable을 던진다고 해서는 안된다. main 메서드는 JVM만이 호출하기 때문에 예외이다. 비검사 예외도 검사 예외처럼 정성껏 문서화 해두면 좋다. 비검사 예외는 일반적으로 프로그래밍 오류를 뜻하는데, 자신이 일..
Effective Java 3e 아이템 65를 요약한 내용입니다. 리플랙션(java.lang.reflect)를 이용하면 컴파일 타임에 알 수 없는 임의의 클래스까지 접근을 할 수 있다. 생성자와 메서드를 가져올 수 있으며 맴버 이름, 필드 타입도 가져올 수 있다. 가져오는 것 뿐만 아니라 생성자, 메서드, 필드를 실제로 이용할 수 있다. 예를 들어 Method.invoke()를 이용해서 블러들인 메소드를 사용할 수 있다. //ex1 TestClass testClass = new TestClass(); // TestClass 안에 testClassMethod가 있다고 가정 Class reClass = testClass.getClass(); Method[] m = reClass.getDeclaredMetho..
Effective Java 3e 아이템 64f를 요약한 내용 입니다. 적합한 인터페이스만 있다면 매개변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라. 객체의 실제 클래스를 사용해야 할 상황은 '오직' 생성자로 생성할 때뿐이다. // 인터페이스 타입을 사용 Set sonSet = new LinkedHashSet(); // 클래스 타입을 사용 LinkedHashSet sonSet = new LinkedHashSet(); 인터페이스를 타입으로 사용하는 습관을 길러두면 프로그램이 훨씬 유연해진다. // 인터페이스 타입 사용 해서 변경 // IBank myBank = ShinhanBank.newInstance("이승민"); // myBank.openAccount(); IBan..