Private 생성자 :
객체 생성에 관여하는 생성자 메서드가 private 접근 제어를 가지면 객체를 생성할 수 없다.
객체를 생성하지 않고도 사용 가능해야 한다. (모든 클래스의 멤버가 static 멤버가 되어야 함)
non-static 멤버인 경우(인스턴스 메서드) : 객체 생성 후! 접근 가능
//왜냐하면 static이 안붙으면 메모리에 로딩이 되지 않기때문에 new를 붙여서 생성해야함.
Inflearn inf = new Inflearn(): //객체 생성
inf.tpc(); // 접근
static 멤버인 경우 ( 클래스 메서드) : 객체 생성 없이 접근 ( 클래스 이름으로 접근)
// 클래스를 사용하는 시점에서 static 멤버는 먼저 고정된 위치에 자동으로 메모리에 로딩이 된다. 그 이후에 호출이 된다.
// 모든 멤버가 static 멤버이면 인위적으로 private 생성자로 만들어서 객체 생성을 막을 수 있다.
//어떤 객체에 생성자 메서드가 private(객체 생성 불가능) 이면 ,
모든 멤버는 static(객체 생성없이 클래스로 접근 가능)이 붙은 멤버가 되어야한다.
//static 메소드 애들끼리만 서로 호출 가능, non-static 호출하려면 new 연산자로 메모리에 로딩을 시킨다.
//static 메소드는 옆으로 좀 기울여져서 나온다.
public class TPC09 {
public static void main(String[] args) {
int a = 56;
int b = 40;
TPC09 tpc = new TPC09(); // non-static 메소드 호출하려고 생성자 만들어 줌. 메모리(Heap Area)에 로딩시켰다는 의미
int v =tpc.sum(a, b);
System.out.println(v);
}
public int sum(int a, int b) {
int v= a+b;
return v;
}
}
static 멤버이면 아래 예제처럼 객체 생성 불가..왜?? private이니까!!!!! public 이면 가능
*private은 객체 생성 불가능을 잊지맙시다*
클래스 파일에서 private으로 선언되어있는데 이렇게 작성하면 error
Inflearn inf = new Inflearn(); //X
클래스 메서드의 정의는 여기서 확인!
package kr.tpc;
public class Inflearn {
private Inflearn() {
}
// 인스턴스메서드
public static void tpc() {
System.out.println("TPC강의 너무 재미있다.");
}
// 클래스 메서드
public static void java() {
System.out.println("Java강의 너무 재미있다.");
}
}
** private으로 선언되어있어서 메서드에 다 static이 붙은 것! **
번외로 Java API 에 있는 생성자 100% static.
새로운 객체 생성하는 것보다 바로 사용하는것이 더 효율적이니께
그래서
System.out.println 이런식으로 접근한다.System이 Java API에 있는 생성자니까!!!!
**인프런 강의 'Java TPC(생각하고, 표현하고, 코딩하고 / 박매일 강사님)'를 듣고 작성 및 발췌 했습니다.
'Java' 카테고리의 다른 글
[JAVA/자바]초기화와 중복정의(Overloading) (0) | 2022.12.14 |
---|---|
[JAVA/자바]Getter,Setter메소드 그리고 접근제어자 public, private (0) | 2022.12.14 |
[JAVA/자바]변수와 메서드 (0) | 2022.12.11 |
[JAVA/자바]Variable, DataType, Assign (0) | 2022.12.11 |
[JAVA/자바]다형성/Polymorphism (0) | 2022.12.10 |