본문 바로가기
Programming/JAVA

[Effective Java] 인스턴스 생성을 막기 위해 private 생성자를 이용하자

by 코딩의성지 2023. 1. 28.

코드를 작성하다 보면 특정한 기능을 손쉽게 사용하기 위해 특정한 헬퍼 클래스나 유틸리티 클래스를 만드는 경우가 있다.

(객체지향적인 관점에서 봤을때 권장하는 방법은 아니나 굉장히 많은 회사에서 이렇게 사용한다.)

 

예시로 특정한 정보를 체크하기 위한 기능을 모아놓은 CheckManager 클래스가 있다고 가정하자.

public class CheckManager {
    
    public static boolean isAdult(int age) {
        // 나이 체크
    }

    public static boolean isPossibleAmount(int amount) {
        // 사용 가능 금액 체크
    }
    
    public static boolean isAvailableUser(User user) {
 		// 유저 정책 체크   
    }
    
}

위의 코드를 보면 private 생성자가 있는데, 이 클래스를 만든 사람은 절대로 해당 클래스의 객체를 만들생각조차 하지 않겠지만, 함께 협업하여 코드를 작성하는 사람은 다르다. 누군가는 절대 쓰여지지 않을 이 객체를 생성해버리면서 쓸데 없는 자원낭비를 하게될 수도 있다.

 

이러한 문제를 해결하기 위해 우리는 private 생성자를 둠으로써 이러한 실수를 방지할 수가 있게 된다.

public class CheckManager {

    private CheckManager() {
        throw new AssertionError();
    }

    public static boolean isAdult(int age) {
        return true;
    }

    public static boolean isPossibleAmount(int amount) {
        return true;
    }

    public static boolean isAvailableUser(User user) {
        // 유저 정책 체크   
    }

}

 

굉장히 유용한 코드 컨벤션이 될수 있으니, 팀내에서 이러한 규칙이 적용 안 되어 있다면 과감하게 건의해보도록 하자!

 

Ref.

조슈아 블로크, 『이펙티브 자바』, 프로그래밍인사이트(2020), p28-p30

반응형

댓글