일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- cicd
- 한국대학생it경영학회
- 영속성
- delayed message plugin
- Spring
- 최범균
- JPA
- 큐시즘
- 밋업프로젝트
- GitHub Actions
- Domain Driven Design
- RESTClient
- 자바 ORM 표준 JPA 프로그래밍
- reactive operaton
- 30기
- scheduling messages with rabbitmq
- JPQL
- springboot
- 자동처리
- Spring Batch
- 객체지향 쿼리 언어
- 교육기획팀원
- 이펙티브자바
- ddd
- java
- 교육기획팀
- rabbitmq-delayed-message-exchange
- 도메인 주도 개발 시작하기
- kusitms
- jdbc
Archives
- Today
- Total
코딩은 마라톤
[이펙티브자바] 아이템 25 요약 정리 본문
오늘은(6월 6일) 나라를 위해 희생한 이들을 기리는 국가추념일입니다.
목숨을 바친 모든 선열들에 의해 저희가 자유롭게 살 수 있습니다.
항상 감사합니다.
아이템 25. 톱레벨 클래스는 한 파일에 하나만 담으라
소스파일 하나에 톱레벨 클래스를 여러개 선언하더라도 자바 컴파일러는 문제를 일으키지 않는다.
여러개 선언하는 일은 이득이 없고 심각한 위험이 생길 수 있다.
public class Main {
public static void main(String[] args) {
System.out.println(BREAD.NAME + DRINK.NAME);
}
}
Bread.java
class Bread {
static final String NAME = "소금빵";
}
class Drink {
static final String NAME = "아메리카노";
}
Drink.java
class Bread {
static final String NAME = "바게트";
}
class Drink {
static final String NAME = "바닐라라떼";
}
- 만약 Bread.java 클래스만 있었다면 "소금빵 아메리카노" 를 출력한다.
- Drink.java 클래스가 추가되면?
- javac Main.java Drink.java 컴파일
- 컴파일 오류로 Bread와 Drink 클래스가 중복 정의했음을 알려준다.
- 컴파일러는 가장 먼저 Main.java를 컴파일하고 Bread 참조에서 Bread와 Drink를 찾아낸다.
- 이후 Drink.java를 처리할 때 같은 클래스의 정의가 있음을 알게된닫.
- javac Main.java || javac Main.java Bread.java 컴파일
- Drink.java 파일 작성 전처럼 "소금빵 아메리카노"를 출력한다.
- 즉, 컴파일러에 어느 소스 파일은 먼저 건네느냐에 따라 동작이 달라진다.
- javac Main.java Drink.java 컴파일
해결책
- 톱레벨 클래스들(Bread, Drink)을 서로 다른 소스 파일로 분리하면 된다.
- Bread.java -> Bread 클래스, Drink.java -> Drink 클래스
- 만약 여러 톱레벨 클래스를 한 파일에 담고 싶으면 정적 멤버 클래스를 사용할 수도 있다.
public class Main {
public static void main(String[] args) {
System.out.println(BREAD.NAME + DRINK.NAME);
}
private static class Bread {
static final String NAME = "소금빵";
}
private static class Drink {
static final String NAME = "아메리카노";
}
}
결론
소스 파일 하나에 반드시 톱레벨 클래스(인터페이스)는 하나만 담자
5장 제네릭 직전이라 이번은 아이템 25만 진행하였습니다!
'Language > Java' 카테고리의 다른 글
[이펙티브자바] 아이템 29, 30, 31 요약 정리 (1) | 2024.06.09 |
---|---|
[이펙티브자바] 아이템 26, 27, 28 요약 정리 (0) | 2024.06.07 |
[이펙티브자바] 아이템 22, 23, 24 요약 정리 (1) | 2024.06.06 |
[이펙티브자바] 아이템 19, 20, 21 요약 정리 (2) | 2024.06.05 |
[이펙티브자바] 아이템 16, 17, 18 요약 정리 (0) | 2024.06.03 |