devnoong.log
728x90

 

1. Public Static 생성자 란?

 

Public Static 생성자는 클래스가 로드 될때 자동으로 실행되며, 클래스에 대한 초기 작업을 수행하는데 사용합니다.

이는 static 멤버 변수를 초기화하거나, 다른 static 메소드를 호출하여 클래스의 기능을 준비하는 작업을 수행합니다.

 

따라서, Public Static 생성자는 인스턴스 생성과는 무관하며, new 연산자를 통해 인스턴스를 생성하지 않습니다.

 

대신에 인스턴스를 생성하지 않고도 호출 할 수 있는  static 멤버 변수 또는 static 메소드를 사용 생성합니다.

 

 

2. Public Static 생성자 문제점

하지만 일반적으로  아래의 이유로  Public Static 생성자를 사용하지 않고 있습니다.

 

① 인스턴스를 생성 할 수 없음

 

Public Static 생성자는 인스턴스를 생성하는데 사용 할 수 없습니다.

따라서, 이 생성자를 이용해 객체 인스턴스를 초기화 할 수 없습니다.

 

 

② 사용한도가 제한 적

 

Public Static 클래스는 클래스를 초기화하는 용도로만 사용 할 수 있습니다.

이는 다른 메소드나 변수와 마찬가지로 클래스 내부에서만 사용 될 수 있다는 것을 의미합니다.

 

 

③ 코드 복잡도 증가

 

Public  Static 생성자는 해당 클래스를 사용하는 모든 코드에서 이 생성자를 호출 할 수 있기 때문에 생성자 내부에서 수행되는 작업들이 매우 중요해집니다.

또한 생성자 호출에 따른 생성되는 객체의 수가 많아 질 수 도 있습니다.

 

이는 코드 복잡도를 증가시키고,  클래스 로드가 수행 될때마다 실행되는 생성자 코드를 작성해야 되기때문에 유지보수를 어렵게 만듭니다.

 

 

대체 방안 존재

 

Public Static 생성자와 유사한 역할을 하는 static 블록을 사용 할 수 있습니다.

이는 클래스가 로드 될때마다 자동으로 실행되는 코드 블록으로, 클래스 변수 초기화나 다른 클래스 초기화 작업을 수행하는데 사용됩니다.

 

static블록은 Public Static 생성자와 같이 클래스를 초기화하는 용도로만 사용될 수 있지만 ,

클래스가 로드 될때 단 한번만 수행되므로 복잡한 초기화 작업을 수행할때 유용합니다.

 

 

따라서 일반적으로 Public Static 생성자를 이용해 클래스를 초기화 하는 것보다 Static 블록을 이용해 초기화 하는 것이 코드 복잡도를 줄일 수 있으며, 객체 생성과는 별도로 초기화 작업을 수행 할 수 있습니다.

 

 

 

3. Static 블럭 사용하기

 

아래는 static 블럭을 이용해 클래스를 초기화 하는 작업을 수행하고 있습니다.

 

public class MyClass {
    private static int count;

    static {
        // 클래스 변수 초기화
        count = 0;

        // 다른 클래스나 라이브러리 로드 및 초기화 작업
        try {
            Class.forName("com.example.MyClass");
            // ...
        } catch (ClassNotFoundException e) {
            // ...
        }
    }

    public MyClass() {
        // ...
    }

    // ...
}

 

이와 같이 static 블록을 이용하면 클래스 변수,메소드를 초기화하고, 다른 클래스나 라이브러리를 로드 및 초기화 하는 작업을 수행 할 수 있습니다.

 

 

728x90