본문 바로가기
Dev/Effective Java

4. 아이템[4] - 인스턴스화를 막으려거든 private 생성자를 사용하라

by VIPeveloper 2021. 1. 12.
반응형

1. 서론

지난 시간에는 private한 생성자를 만들어 인스턴스를 생성하는 것을 방지하고, public 한 정팩매를 만들어 같은 인스턴스를 보장해주는 방법에 대해 포스팅했습니다. 덧붙여 enum 타입을 이용하여 싱글 ENUM을 생성, 처리하는 방법도 배웠습니다.

 

이번 포스팅에서는 인스턴스화를 막기 위한 구체적인 방법론을 제시해줍니다.

포스팅에 대한 코드는 여기에서 보실 수 있습니다.

2. 본론

Q. 인스턴스화를 막아야 하는 상황이 있을까? 초보 개발자라 잘 모르겠어.

A. 구글링해보았는데, 싱글톤 패턴을 쓰는 이유와 비슷한 것 같습니다. 메모리 낭비 방지 및 객체 로딩시간이 절대적으로 중요한 경우, 인스턴스화를 막아놓는 것이 유리할 수 있습니다. 아니면 자신의 생각대로 코드가 움직이기를 바랄 때 쓰이기도 합니다. 이번 포스팅에서는 인스턴스화를 방지하는 방법에 대해 알아보겠습니다.

 

1. private 한 생성자 생성하기

package com.study;

class InitProject{
    private static final String testing = "Hello";
    public InitProject(){
        System.out.println("InitProject 호출됨");
    }
    public static String sayHello(){
        return InitProject.testing;
    }
}

class SubProject extends InitProject{
    private static final String testing2 = "world!";
    public SubProject(){
        System.out.println("SubProject 호출됨");
    }
    public static String sayWorld(){
        return SubProject.testing2;
    }
}

 

여기 두가지 클래스가 있습니다. subProject는 InitProject를 상속받아 활용합니다.

    @Test
    @DisplayName("첫 프로젝트 생성 테스트")
    public void InitProjectTest1(){
        assertEquals("Hello world!",SubProject.sayHello() + " " + SubProject.sayWorld());
    }

상속이 잘 받아와지는 것을 볼 수 있습니다. 인스턴스는 새로 생성되게 되는데, 이를 생성하지 못하게 하려면, 기본 생성자를 private 하게 리팩토링하면됩니다.

[그림01] 생성자 오류가 납니다.

이를 이용해서 인스턴스화를 방지할 수 있습니다.

 

3. 결론

아이템4는 아이템 3과 유사한 기능을 설명하고 있는 것 같네요. 짧게 끝났습니다.

반응형