클래스를 만들 때 모든 메서드가 인스턴스화되어야 할까요? 🤔
때때로 우리는 클래스의 인스턴스가 만들어지는 것을 막아야 할 필요가 있어요. 예를 들어, 유틸리티 클래스를 만들거나, 특정 메서드나 상수를 집합적으로 관리하고 싶을 때, 불필요한 인스턴스를 방지하는 것이 중요할 수 있습니다. 그럼 어떻게 해야 할까요?
자바에서는 인스턴스화를 막는 가장 쉬운 방법 중 하나는 private 생성자를 사용하는 것입니다. 이것은 클래스의 인스턴스가 외부에서 생성되지 않도록 보장을 하기 때문이죠. 쉽게 생각하면, 비밀번호로 잠긴 문이 있다고 가정하면, 비밀번호를 모르면 문을 열 수 없듯이, private 생성자를 사용하면 외부에서 인스턴스를 생성할 수 없게 됩니다.
자주 사용하는 유틸리티 메서드를 모아둔 클래스를 만들 때, 이 클래스의 인스턴스를 생성할 필요가 없습니다. 예를 들어 수학 계산 관련 메서드들을 담은 MathUtils 클래스가 있다면, 이 클래스는 인스턴스화되지 않아야 해요.
public class MathUtils {
private MathUtils() {
// 인스턴스화 방지
}
public static int add(int a, int b) {
return a + b;
}
public static int subtract(int a, int b) {
return a - b;
}
}
여기서 private 생성자는 클래스 외부에서 이 클래스의 인스턴스를 만들 수 없게 만들어요. 이 클래스는 오직 정적 메서드만 제공되며, 인스턴스가 필요 없기 때문에 생성자를 private으로 선언해 줍니다.
public class Constants {
public static final int MAX_USERS = 100;
public static final String APP_NAME = "MyApplication";
private Constants() {
// 인스턴스화 방지
}
}
또한 상수를 정의하는 클래스가 있다고 가정하면, 이것 또한 인스턴스화가 필요 없겠죠. 그렇기에 생성자를 private으로 설정해 인스턴스화되는 것을 방지해 줍니다.
그렇다면 왜 private 생성자가 효과적인 걸까요?
네. 클래스가 인스턴화되지 않도록 보장하여, 메모리 사용을 줄이고 성능을 최적화시켜 줍니다. 또한 클래스가 오로지 정적 메서드나 상수만을 포함하고 있음을 명확히 하여 코드의 의도를 명확히 할 수 있죠. 또한 클래스의 잘못된 사용을 방지할 수 있어서, 잘못 사용하려는 시도를 미리 예방할 수 있게 됩니다. 👍
유틸리티 클래스나 상수 클래스를 작성할 때 생성자를 private으로 설정하는 것을 간과했던 적이 많았어요. 이제부터는 이러한 클래스를 작성하거나 사용할 때, 생성자를 private으로 설정하여 인스턴스화를 방지하는 것이 좋겠다고 생각합니다. 이렇게 하면 의도하지 않은 인스턴스 생성을 막을 수 있고, 코드의 안전성과 일관성을 높일 수 있을 것입니다. 🤔
'Language > JAVA' 카테고리의 다른 글
[이팩티브 자바][아이템 6] 불필요한 객체 생성을 피하라 - 컴도리돌이 (4) | 2024.08.31 |
---|---|
[이펙티브 자바][아이템 5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 - 컴도리돌이 (0) | 2024.08.26 |
[이펙티브 자바][아이템 3] private 생성자나 열거타입으로 싱글턴임을 보증하라 - 컴도리돌이 (8) | 2024.08.24 |
[이펙티브 자바][아이템 2] 생성자에 매개변수가 많을 때는 빌더를 고려하라 - 컴도리돌이 (0) | 2024.08.22 |
[이펙티브 자바][아이템 1] 생성자 대신 정적 팩토리를 고려해라 - 컴도리돌이 (0) | 2024.08.16 |