[Java] private 생성자와 static의 관계
💡 1. private 생성자 메서드(Constructor)
객체 생성에 관여하는 매서드가 private 접근제어를 가지면 객체를 생성할 수 없다는 뜻이 된다.
그래서 private의 접근제어가 걸린 경우 객체를 생성하지 않고 사용해야한다.
➡ static 을 이용하면 된다.
이렇게 객체를 생성하는 생성 메서드에 private 가 걸린 경우
new 를 통해 객체를 생성하고 접근하는 과정이 아예 불가능해진다.(다른 클래스의 경우)
따라서 내부의 tpc() 메서드 역시 이용이 불가능한 것이다.
이를 이용하려면 어떻게 해야할까?
바로 static 에 해당 메소드를 올려놓고 사용하면 된다.
💡 2. static 으로 객체 생성 하지 않고 바로 이용하기.
어떤 메서드를 선언할 때 static 키워드를 포함한 메서드는 static zone 에 아닌 메서드는 non-static zone에 위치한다.
static이 붙는 경우 본인이 속한 클래스 명의 이름표를 달고 들어가는데
전체 코드를 실행하면 클래스 내부에 있는 static 키워드가 붙어있는 메서드들을 Method Area(static zone)에 로딩한다.
해당 클래스 내부에 외부의 클래스를 임포트 했다면 그 클래스 내부의 static 역시 있는지 체크하고 포함시킨다.
즉 inflean 클래스 내부의 static이 붙어있는 java() 메서드 역시 inflean 이라는 이름표를 달고 static-zone에 들어간다.
그래서 Inflean.java(); 라는 코드를 통해 해당 java 메서드를 가져와서 쓸 수 있다.
만약 위 코드처럼 생성자 메서드에 private 가 걸려 있고
tpc()메서드에는 static 이 걸려있지 않는 경우에는 객체 생성이 아예 불가능하므로
tpc()메서드는 사용이 불가능하고 오로지 내부의 static 이 붙은 java() 메서드만 사용이 가능하다.
💡 3. 코드로 배워보기
🔍 생성자 메서드에 private 안걸려 있는 경우
하나의 클래스에 static이 붙은 java()와 안붙은 tpc() 메서드가 있다. (생성자에 private가 안붙어있음)
이 경우 객체를 생성해서 tpc()를 쓸 수도 있고 바로 Inflean클래스의 java() 메서드를 가져다 쓸 수 있다.
(static에 올라간 메서드의 경우 화면에 살짝 기울여서 표시된다)
🔍 생성자 메서드에 private 걸려 있는 경우
이렇게 생성자 메서드에 private 가 걸려있으면 다른 클래스에서 해당 객체를 생성하려고 할때
다음과 같은 오류가 뜨면서 객체 생성이 불가능하다.
이때 Inflean() 에서 객체 생성이 불가능 하므로 만약 tpc() 메서드에 static 이 없었으면
tpc()메서드는 다른 클래스에서 절대 이용이 불가능 했을 것이다.
따라서 만약 생성자 클래스에 private 를 붙여주는 경우에 다른 클래스에서 이용하고자 하는 메서드가 있으면 반드시 static 을 붙여줘야 한다.
Java 관련 개념을 알려주실 때 그 내부 동작이 어떻게 구현되는지 자세하게 알수 있는 강의입니다.
출처: Java TPC (생각하고, 표현하고, 코딩하고) 대시보드 - 인프런 | 강의 (inflearn.com)