2022. 9. 20. 17:48ㆍ독서
인스턴스 생성을 막는다니 무슨말인가?
인스턴스가 필요 없다니!
그런 클래스가 필요해?라는 의문이 든다면
자바 기본 패키지를 한 번도 까보지 않은 것임이 틀림 없다.
책에서 소개하는 Collections나 Arrays처럼 인스턴스 생성을 막아놓은 클래스가 존재하기 때문이다.
🧐 인스턴스 생성을 막는 방법
인스턴스 생성은 어떻게 하면 막을 수 있을까?
먼저 인스턴스가 어떻게 생성되는지를 알면 쉽다.
인스턴스를 생성하려면 '생성자'가 필요하다.
다른 클래스에서 생성자 호출이 가능하려면(최소 같은 패키지)
생성자가 private이면 안 된다.
그럼 간단하다.
생성자를 private으로 만들어버리면 된다.
아래 코드를 보자.
public class Calculator {
private Calculator() {}
public static int sum(int ...param) {
int total = 0;
for(int i = 0; i < param.length; i++) {
total += param[i];
}
return total;
}
}
만약 sum이라는 메서드가 여러 패키지에서 사용되고 있고,
Calculator에 sum을 포함한 여러 개의 메서드가 있다면
인스턴스 생성 비용이 클 것이기 때문에
이렇게 static 메서드로 사용하면서 private 생성자를 통해서 인스턴스 생성을 명시적으로 막는 것이 더욱 효율적이다.
🧐 추상 클래스는?
당연하게도 추상 클래스로 만드는 것은 인스턴스 생성에 아무런 영향을 주지 못한다.
(물론 그 클래스에 대한 인스턴스 생성은 못하겠지만)
왜냐하면 상속하면 끝이다.
상위 클래스는 하위 클래스의 인스턴스로 초기화 할 수 있다.
List<String> a = new ArrayList<>();
이게 가능하다.
그렇기 때문에 추상 클래스로 만드는 것은 인스턴스화를 완전히 막지 못한다.
'독서' 카테고리의 다른 글
(Effective Java) equals는 일반 규약을 지켜 재정의하라 (0) | 2022.09.27 |
---|---|
(Effective Java) 의존 객체 주입(DI), 의존 객체 주입 패턴 (0) | 2022.09.20 |
(Effective Java) 싱글턴 패턴을 만드는 방법 + 싱글턴 패턴 (0) | 2022.09.20 |
(Effective Java) 빌더 패턴(Builder) + Lombok Builder (1) | 2022.09.20 |
(Effective Java) 생성자 대신 정적 팩터리 메서드를 고려하라 (2) | 2022.09.19 |