728x90 Gayoung162 item 41. 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라 마커 인터페이스란? - 아무 메서드도 담고 있지 않으며, 자신을 구현하는 클래스가 특정 속성을 가지는 것을 표시해주는 인터페이스 - 예시로는 Serializable, Cloneable interface 등이 있다. //Serializable Interface를 봐보자! package java.io; public interface Serializable { } 마커 애너테이션이란? - 해당 요소가 특정 속성을 가지는 것을 나타내는 애너테이션 - 마커 어노테이션은 멤버를 포함하지 않으며 데이터로 구성되지 않는다. - 마커 어노테이션의 목적은 단지 어노테이션 선언을 표시하는 것이다. - 예시로는 @Override 등이 있다. //@Override Annotation package java.lang; impor.. 2022. 6. 14. item 40. @Override 애너테이션을 일관되게 사용하라 @Override 애너테이션을 알고 있을 것이다. 메서드 선언부에 다는 상위 타입의 메서드를 재정의할 때 사용하는 애너테이션이다. 구체 클래스에서 상위 클래스의 추상 메서드를 재정의할 때를 제외하고는, 상위 클래스의 메서드를 재정의하려는 모든 메서드에 @Override 애너테이션을 달자. 추상 메서드는 구체 클래스인데 아직 구현하지 않은 메서드가 남아있다면 컴파일러가 알려주기 때문에 굳이 애너테이션을 달지 않아도 된다. IDE를 사용하면 조금 더 편하게 애너테이션을 달 수 있다. 메서드에 애너테이션이 달려있지 않다면 경고를 주기도 하고... 그렇다. @Override 애너테이션은 클래스 뿐만 아니라 인터페이스의 메서드를 재정의할 때도 사용할 수 있다. 이 때도 애너테이션은 꼭 다는 습관을 갖도록 하자! .. 2022. 6. 12. item39. 명명 패턴보다 애너테이션을 사용하라 명명 패턴이 뭘까요? 메서드나 타입의 이름을 특정 규칙으로 짓고, 이 규칙을 지켜 만든 메소드나 타입 등에 추가적인 처리를 제공하는 것 ex) JUnit은 test method의 이름을 test로 시작하게끔 하는 것.... 명명 패턴은 효과적이지만, 단점도 많다. 명명 패턴의 단점 오타 메서드나 타입을 이름으로 구분하기 때문에, 오타가 나면 자칫 이 메서드는 무시된 채로 넘어갈 수 있다. JUnit의 test method의 경우 이름 실수가 났을 경우 테스트의 성공/실패 자체를 알 수 없기 때문에, 성공된줄 알고 지나칠 수도 있다. 올바른 프로그램 요소에서만 사용될 것이라는 보증이 없음 Junit에서는 테스트 메서드 이름을 test로 시작해야 할뿐, 클래스 이름은 이를 따를 필요가 없지만, 사용자가 클래.. 2022. 6. 3. item 38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라 책에 의하면, 열거 타입은 거의 모든 상황에서 타입 안전 열거 패턴보다 우수하다. 그러나 예외 상황이 하나 있다. 확장 가능해야 하는 상황 이다. 확장 가능한 상황에서는 타입 안전 열거 패턴이 더 우수하다. 타입 안전 열거 패턴은 열거 타입과 달리 열거한 값들을 그대로 가져온 다음, 값을 더 추가하여 다른 목적으로 쓸 수 있다. 열거 타입이 확장하기 힘들게 설계된 이유는 무엇일까? - 기반 타입과 확장된 타입들의 원소를 모두 순회할 방법이 마땅치 않기 때문이다. - 확장성을 높이려면 고려할 요소가 늘어나 설계나 구현이 더 복잡해진다. ! 확장된 열거 타입이 필요한 경우 ! - 연산 코드 (opCode) - 연산 코드의 각 원소는 특정 기계가 수행하는 연산을 뜻한다. API가 제공하는 기본 연산 외에 사용.. 2022. 6. 3. item 37. ordinal 인덱싱 대신 EnumMap을 사용하라 Ordinal 메소드를 기억하고 있나요 : 열거 타입 내에서 열거형 인스턴스의 순서를 반환하는 메소드 인 것을 기억 할 것이다. 어떤 상수의 위치를 반환한다고 생각하면 된다. 정원에 심은 식물들을 생애 주기별로 관리하는 예제를 확인해보자. public static class Plant { // 식물의 생애 주기를 관리하는 열거 타입 enum LifeCycle { ANNUAL, PERENNIAL, BIENNIAL } final String name; final LifeCycle lifeCycle; Plant(String name, LifeCycle lifeCycle) { this.name = name; this.lifeCycle = lifeCycle; } @Override public String toSt.. 2022. 6. 3. item 36. 비트 필드 대신 EnumSet을 사용하라 과거 .. 열거 값들이 집합으로 사용되는 경우 비트 마스킹을 활용한 정수 열거 패턴을 사용하곤 했다. public class Text { public static final int STYLE_BOLD = 1 2022. 5. 31. 이전 1 ··· 4 5 6 7 8 9 10 ··· 27 다음 728x90