Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 필드 주입
- 생성자 주입
- select_type
- redis
- 테스트 코드
- java
- 조합
- DDL
- MSA
- stream
- cache
- docker
- Spring
- equals
- KEVISS
- jwt
- AOP
- StringBuilder
- 인덱스
- lambda
- jpa
- hashcode
- 재정의
- VUE
- DI
- SQL
- Test
- 바이너리 카운팅
- 열 속성
- static
Archives
- Today
- Total
백엔드 개발자 블로그
[Effective Java] Item4. 인스턴스화를 막으려거든 private 생성자를 사용하라 본문
상황
정적 메서드와 정적 필드만을 담은 유틸리티 클래스를 생성하고 싶을 때가 존재합니다.
- java.lang.Math, java.util.Arrays와 같이 기본 타입 값이나 배열 관련 메서드를 모아둔 것
- java.util.Collectios와 같이 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아둔 것
- final 클래스를 상속하여 하위 클래스에 메서드를 넣는 것이 불가능하기에 final 클래스와 관련된 메서드를 모아둘 때
이런 유틸리티 클래스는 인스턴스로 만드려고 설계한게 아니라서, 클래스의 인스턴스화를 막아줘야합니다.
해결책
private접근 제어자를 가진 기본 생성자를 만들어 클래스의 인스턴스화를 막아주면 됩니다.
- 해당 클래스가 인스턴스화 될 일이 발생하지 않습니다.
- 상속을 불가능하게 하는 효과도 낼 수 있습니다.
private생성자는 직관적이지 않으니 아래의 코드와 같이 적절한 주석을 달아주면 좋습니다.
public class Test {
// 기본 생성자가 만들어지는 것을 막는다(인스턴스화 방지용)
private Test() { }
}
핵심정리
정적 메서드와 정적 필드만을 담은 유틸리티 클래스를 생성할 때는 private접근 제어자를 가진 기본 생성자를 만들어줘야합니다. 이를 만들어줌으로써 해당 클래스가 인스턴스화 될 일을 방지하고, 상속을 불가능하게 할 수 있습니다.
'Java' 카테고리의 다른 글
[Effective Java] Item6. 불필요한 객체 생성을 피하라 (0) | 2024.03.22 |
---|---|
[Effective Java] Item5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2024.03.21 |
[Effective Java] Item3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2024.03.20 |
[Effective Java] Item2. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2024.03.19 |
[Effective Java] Item1. 생성자 대신 팩토리 메서드를 고려하라 (0) | 2024.03.19 |