본문 바로가기

JAVA/DAY 13 _ 23.09.04

Static

// 1. 매소드 오버로딩 --> 내가 사용할 일은 거의 없겠지...

// 생성자 오버로딩처럼 -> 메소드명을 똑같이 선언할 수 있다

// 파라메터를 어떻게 선언해주냐에 따라서 다르게 출력되겠지

new AAA().test1();		// 안녕0
new AAA().test1(98);	// 반가워980 
// ----> 이렇게 호출하면 v2는 아직 0이니까!!!!! 98+0 이렇게 나오는구나.		
System.out.println(AAA.v2);		// 0

 

 

// 2. static : 클래스 수준에서 공유되는 인스턴스 변수를 선언하는 것, 메소드 영역에 메모리가 생성된다 ★★★
// 클래스의 모든 인스턴스가 이 변수를 공유하므로 한 인스턴스에서 값을 변경하면

// 다른 모든 인스턴스에서도 해당 값을 공유함!!!!
// 인스턴스 변수와 메소드에 적용할 수 있다 (생성자는 X)
// 처음부터 1개 생성되고, 프로그램 종료시까지 소멸X
// 문법적으로 global하다...
// 인스턴스 생성과는 무관하다. new AAA를 생성하든 안하든 상관없이!!!

// 클래스 시작과 동시에 메서드 영역에 저장되어있다.
//  ---> 어떤 변수로 호출하든 다 마지막으로 업데이트 된 '같은 값'이 나온다는거임)

AAA a1 = new AAA();
AAA a2 = new AAA();

a1.v1 = 10;
a2.v1 = 20;

System.out.println(a1.v1);			// 10
System.out.println(a2.v1);			// 20


//	a1.v2 = 10;			// --> static 변수를 잘못된 방식으로 호출한거임. (쓰지마세요)
//	a2.v2 = 20;
//		
//	System.out.println(a1.v2);			// 20
//	System.out.println(a2.v2);			// 20

 

 

// 2-1. static변수를 선언하는 방법 : 처음부터 정의되어있는 변수니까, 인스턴스 생성코드가 없어도 (class명.static변수)로 선언하면 됨!
// AAA a1 = new AAA(); 이런거 필요없다는 거임!

AAA.v2 = 50;
AAA.v2 = 80;
System.out.println(AAA.v2);			// 80

 

// 2-2. static메서드를 호출하는 방법 : 똑같다

AAA.test1(50);			// 반가워5080	(static으로 선언된 메소드를 호출할때~!~!)
new AAA().test1(98);		// 반가워9880	(이렇게 하지는 않는다구)
// AAA.test1();		--> 이건 안되겠지!! 	(static으로 선언되지 않은 다른 메소드를 호출하려고 하는 상황임)

 

 

class AAA{
	
	int v1;				// 인스턴스 변수
	static int v2;			// static을 쓰면 변수가 기울어진다 (= 클래스 변수)
	int v3;
	

	void test1() {
		
		System.out.println("안녕" + v2);		// 여기에 v2를 사용하면 0으로 출력되는군!!! ★
	}
	

	static void test1(int a) {
		
		// this. ---> this는 인스턴수 변수에서 쓰는 아이. 클래스 변수에서 못쓰겠지?

		System.out.println("반가워" + a + v2);		// v2를 바로 사용할 수 있음 ★★★
	}
	
	
}

'JAVA > DAY 13 _ 23.09.04' 카테고리의 다른 글

Final  (0) 2023.09.11
Static2  (0) 2023.09.11
Star UML  (0) 2023.09.11
Class review  (0) 2023.09.11
싱글톤 패턴  (0) 2023.09.04