본문 바로가기

JAVA/DAY 13 _ 23.09.04

method 오버로딩 & 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를 바로 사용할 수 있음 ★★★
}


}

 

# Main영역

 

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으로 선언되지 않은 다른 메소드를 호출하려고 하는 상황임)

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

싱글톤 패턴  (0) 2023.09.04
final  (0) 2023.09.04
static 2  (0) 2023.09.04
Star UML  (0) 2023.09.04
Class Review  (0) 2023.09.04