생성자 메서드
생성자가 non-static 인 경우 (인스턴스 메서드)
생성자가 static 인 경우 (클래스 메서드)
요약
=> 객체생성에 관여하는 생성자 메서드가 private 접근제어를 가지면 객체 생성을 할 수 없다.
=> 객체를 생성하지 않고도 사용가능 하려면 모든 클래스의 멤버가 static 멤버가 되어야한다.
예시 1
public class Exx {
// 인스턴스 메서드
public void hi() {
System.out.println("저는 hi입니다.");
}
// 클래스 메서드 / static 메서드
public static void bye() {
System.out.println("저는 bye입니다.");
}
}
public class MyExMain {
public static void main(String[] args) {
Exx ex = new Exx();
ex.hi();
// 1 번
// Exx.bye();
// 2 번
// ex.bye();
// 2번 코드에는 노랑색 밑줄이 뜨는니까 1번 처럼 사용하는게 맞겠지
// 이미 static-zone에 bye()가 올라가 있는데
// 굳이 ~~~~~ 2번 처럼..?
// 1번에 대해서 다시 또 얘기하자면,
// Exx. => 클래스를 사용하는 시점에서 static 멤버는 먼저 자동으로 메모리에 로딩이 되고 호출이 됨.
// method-area에 Exx라는 라벨을 붙인 bye메서드가 자동으로 로딩이 된다는 말임.
}
}
QQQQQ
근데 2번 처럼 하면 non-static-zone에 hi와 같이 또 올라갈 수 있는지 아직 모르겠음.
누군 올라간다하고 누군 안올라간다고 하는데
static 메서드 bye와 인스턴스 메서드 bye를 동시에 못 만드는 걸 보면
static-zone, none-static-zone에 bye가 동시에 못 올라간다는 뜻으로 봐야하는건가.
예시 2
public class Exx2 {
// private 생성자
private Exx2() {
}
// 인스턴스 메서드
public void hi() {
}
// 클래스 메서드 / static 메서드
public static void bye() {
}
}
public class MyExMain2 {
public static void main(String[] args) {
Exx2 ex2 = new Exx2();
// new Exx2, 객체생성 부분에 빨간 줄이 뜨는 이유는 뭘까?
// ex2.hi()
// 호출하려면 Exx2 객체가 생성되어있어야 하는데
// 객체생성은 생성자가 합니다.
// 그런데 생성자가 private 이여서 접근 할 수가 없어서 객체 생성을 못한 상태임
// 호출가능하게 하려면? => hi메서드도 static으로 만들면 된다.
Exx2.bye();
// 얘는 static이니 static-zone에 이미 잘 올라가 있어서 호출 가능~
// Java API 중에서도 생성자가 private인 클래스도 많이 있다.
// System, Math .....
// System sys = new System(); => 이거 아님. 안 됨 XXXXXX
System.out.println();
// 클래스이름 쩜 으로 접근함 ( className.methodName )
}
}
+ 21.11.25
자바의 정석에서 객체생성을 생성자가 한다는 것은 잘못되었다고 함
위처럼 생성자가 private이라 생성자가 객체생성을 못해서 오류다 라고 이해하지말고
객체생성을 할 때에 생성자가 호출이 되는데 생성자가 private이라서 오류다 라고 일단 이해해야겠다.
'백엔드개발자 > JAVA: JAVA TPC 강의' 카테고리의 다른 글
잘 설계된 클래스 (0) | 2021.10.09 |
---|---|
Class, Object, Instance 상호관계 (0) | 2021.10.09 |
생성자 메서드, this와 this() (0) | 2021.10.07 |
기본 자료형(PDT)과 사용자 정의 자료형(UDDT) (0) | 2021.10.04 |
JVM의 메모리 모델 (0) | 2021.10.01 |