BE/Java

· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 42. 익명 클래스보다는 람다를 사용하라 익명 클래스 ex 1) 익명 클래스의 인스턴스를 함수 객체로 사용(예전 기법) Collection.sort(words, new Comparator() { public int compare(String s1, String s2){ return Integer.compare(s1.length(), s2.length()); } }); 전략 패턴처럼 함수 객체를 사용하는 과거 객체 지향 디자인 패턴에는 익명 클래스면 충분했다. 이 코드에서 Comparator 인터페이스가 정렬을 담당하는 추상 전략을 뜻하며, 문자열을 정렬하는 구체적인 전략을 익명 클래스로 구현한 것이다. 익..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 41. 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라 마커 인터페이스 아무 메서드도 담고 있지 않고, 단지 자신을 구현하는 클래스가 특정 속성을 가졌다는 것을 표시해주는 인터페이스를 마커 인터페이스라고 한다. 예로 Serializable 인터페이스 를 들면, Serializable은 자신을 구현한 클래스의 인스턴스는 ObjectOutputStream을 통해 사용(직렬화)할 수 있다고 알려준다. 마커 인터페이스가 마커 애너테이션보다 좋은 이유 마커 인터페이스는 이를 구현한 클래스의 인스턴스들을 구분하는 타입으로 쓸 수 있으나, 마커 애너테이션은 그렇지 않다. 마커 애너테이션을 사용했다면 런타임에 발견..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 40. @Override 애너테이션을 일관되게 사용하라 @Override 메서드 선언에만 달 수 있으며, 상위 타입의 메서드를 재정의할 때 사용하는 애너테이션이다. 이 애너테이션을 잘 사용해야 안정적인 프로그래밍이 가능하다. ex 1) Bigram 프로그램(영어 알파벳 2개로 구성된 문자열) public class Bigram { private final char first; private final char second; public Bigram(char first, char second) { this.first = first; this.second = second; } public boolean equ..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 39. 명명 패턴보다 애너테이션을 사용하라 명명 패턴 전통적으로 도구나 프레임워크가 특별히 다뤄야할 프로그램 요소에는 딱 구분되는 명명 패턴을 적용해왔다. 예로 테스트 프레임워크인 JUnit은 버전 3까지 테스트 메서드의 이름을 test로 시작하게끔 했다. 효과적이지만 단점도 있다. 오타가 발생하면 안된다. 올바른 프로그램 요소에서만 사용되리라 보증할 방법이 없다는 것 ex) 메서드가 아닌 클래스 이름을 TestSaftyMechanisms로 지어 Junit에 던져줬다고 하면, 개발자는 이 클래스에 정의된 테스트 메서드들을 수행해주길 기대하겠지만 JUnit은 클래스 이름에는 신경쓰지 않는다. 프로그램 요소를..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라 타입 안전 열거 패턴 열거 타입은 거의 모든 상황에서 타입 안전 열거 패턴보다 우수하다. 단, 하나의 예외는 타입 안전 열거 패턴은 확장할 수 있다는 것이다. 타입 안전 열거 패턴은 열거한 값들을 그대로 가져온 다음 값을 더 추가하여 다른 목적으로 쓸 수 있는 반면, 열거 타입은 그렇게할 수 없다는 것이다. 사실, 대부분 상황에서 열거 타입을 확장하는 것은 좋지 않다. 확장한 타입의 원소는 기반 타입의 원소로 취급받지만 그 반대는 성립하지 않기 때문이다. 확장성을 높이려면 고려할 요소가 늘어나 설계와 구현이 복잡해진다. 확장할 수 있는 열거..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 37. ordinal 인덱싱 대신 EnumMap을 사용하라 ordinal 메서드 ex 1) Plant 클래스 public class Plant { enum LifeCycle { ANNUAL, PERNNIAL, BIENNIAL} final String name; final LifeCycle lifeCycle; Plant(String name, LifeCycle lifeCycle) { this.name = name; this.lifeCycle = lifeCycle; } @Override public String toString() { return name; } } 정원에 심은 식물들을 배열 하나로 관리하고 이..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 36. 비트 필드 대신 EnumSet을 사용하라 비트 필드 열거 상수 열거한 값들이 주로 (단독이 아닌) 집합으로 사용될 경우, 예전에는 각 상수에 서로 다른 2의 거듭제곱 값을 할당한 정수 열거 패턴을 사용해왔다. ex1) 비트 필드 열거 상수 (예전 기법) public class Text { public static final int STYLE_BOLD = 1
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 35. ordinal 메서드 대신 인스턴스 필드를 사용하라 ordinal 메서드 대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응된다. 모든 열거 타입은 해당 상수가 그 열거 타입에서 몇 번째인지 위치를 반환하는 ordinal 메서드를 제공한다. 위의 이유로 열거 타입 상수와 연결된 정숫값이 필요하면 ordinal 메서드를 이용할 수 있는데 결론적으로 이는 위험하다. ex1) ordinal을 잘못 사용한 코드 public enum Ensemble { SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET; public in..
멍목
'BE/Java' 카테고리의 글 목록 (10 Page)