본문 바로가기

Dev Books/Effective Java32

[item 40] 애너테이션을 일관하게 사용하라. 1. @Override를 사용했을 때 장점@Override는 메서드 선언에만 달 수 있으며, 이 애너테이션이 달렸다는 것은 상위 타입의 메서드를 재정의했음을 뜻한다. 버그 예방오타나 잘못된 시그니처로 인한 오버라이딩 실패를 컴파일 오류로 잡아준다.상위 클래스의 메서드를 재정의할 때@Override는 상위 클래스(또는 인터페이스)의 메서드를 정확히 오버라이딩하고 있는지를 컴파일러가 검증하게 만든다.2. @Override를 작성하지 않아도 되는 예외 경우1. 구체 클래스에서 상위 클래스의 추상 메서드를 재정의할 때는 굳이 @Override를 달지 않아도 된다.abstract class Animal { abstract void sound();}class Dog extends Animal { // @.. 2025. 6. 26.
[item 39] 명명 패턴보다 애너테이션을 사용하라 명명 패턴명명 패턴(Naming Pattern)이란, 코드나 시스템 내에서 이름을 정할 때 따르는 일관된 규칙을 말한다. 대상 예시 설명 변수명 userName, isDeleted camelCase 사용 클래스명 UserService, ItemController PascalCase 사용 상수명 MAX_COUNT, DEFAULT_TIMEOUT 전부 대문자 + 스네이크_CASE 함수명 getUserById(), createOrder() 동사 + 목적어 구조 DB 테이블 .. 2025. 6. 26.
[item 38] 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라. 열거타입 확장은 하지 말자.열거타입은 타입 안전 열거 패턴(typesafe enum pattern)보다 우수하다. 하지만, 타입 안전 열거 패턴은 확장할 수 있으나 열거 타입은 그럴 수 없다.typesafe enum pattern vs enum"타입 안전 열거 패턴은 열거한 값들을 더 확장해서 사용할 수 있는 장점이 있지만, Java 같은 언어에서 제공하는 열거 타입(enum) 은 확장할 수 없다는 단점이 있다."를 쉽게 풀어보자. 타입 안전 열거 패턴(typesafe enum pattern)클래스를 써서 열거값을 직접 정의하는 방식이에요. 예시 코드는 아래와 같다. class Operation { static final Operation PLUS = new Operation(); stati.. 2025. 6. 19.
[item 37] ordinal 인덱싱 대신 EnumMap을 사용하라. 1. ordinal()을 배열 인덱스로 사용하지 말자.배열이나 리스트에서 원소를 꺼낼 때 ordinal 메서드로 인덱스를 얻는 코드가 있다. 하지만 문제가 한가득이다.예시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 toString() { return name.. 2025. 2. 26.