본문 바로가기
Java

[JAVA/자바]private 생성자와 static, non-static

by hans-j 2022. 12. 11.

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

 


클래스 메서드의 정의는 여기서 확인! 

https://hans-j.tistory.com/45

 

[JAVA/자바]Variable, DataType, Assign

V - Variable 변수/메서드 D - DataType PDT, UDDT, array, class A - Assign 대입, 할당 ex ) int a = 10; int : data type (데이터 타입) a : variable(변수) 10; : data (데이터) int a : declaration (선언) DTO : Data Transfer Object VO : Value

hans-j.tistory.com

 


 

 

 

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(생각하고, 표현하고, 코딩하고 / 박매일 강사님)'를 듣고 작성 및 발췌 했습니다.