개발새발

private 생성자를 선언하는 목적이 뭘까? 본문

java

private 생성자를 선언하는 목적이 뭘까?

무비인 2022. 2. 20. 18:49

사용하는 메서드 내부 동작을 살펴보다가 private로 선언된 생성자를 발견했다.

private로 선언하면 인스턴스 생성을 못하지 않나?? 왜 그렇게 했을까 궁금해졌다.

생성자(Constructor)

객체를 생성할 때 항상 실행되는 것으로, 객체를 초기화해주기 위해 맨 처음 실행되는 메소드이다.

 

private

private는 동일 package, 다른 package 모두 접근이 불가능하고 같은 Class 내에서만 접근을 허용하는 제한자이다.

 

private 생성자가 있는 클래스의 모든 메서드는 static이다?

다시 돌아오자 객체는 생성하지 않는데, 모든 메서드는 전역에서 접근이 가능하다.. 쓰읍 뭔가 싱글톤에 냄새가 난다.

맨처음 빌드가 되면 모든 클래스가 메모리할당이 되고, 그 상태에서 클래스 내에 메서드를 공유하게 된다면

필요할 때마다 객체를 생성하는게 아니라, 이미 메모리에 할당되어있는 기존 인스턴스 사용이 가능하다.!! (훨씬 효율적이네?)

그래서 명시적으로 이는 해당 클래스의 인스턴스 생성이 무의미함 을 나타내기 위해 private 생성자 를 사용한거였구나..

 

특징

인스턴스가 없기 때문에 Getter/Setter 사용이 불가능하다.

 

느낀점

코드로 의도를 표현한다는게 이런거구나 느낄 수 있었고, 당장 미션을 구현하면서 상수들을 모아놓은 클래스를 만들었는데,
여기에 적용하면 좋겠다. 아는만큼 보이는구나.. 다시 리팩토링!

참조