dev_dbdb1114

[JAVA] static이 뭐지 본문

프로그래밍/JAVA

[JAVA] static이 뭐지

dbdb1114 2022. 11. 28. 22:00

간단히 말하면, static이 붙어있으면, 해당 클래스로 만드는 모든 객체가 공유한다는 것이다. 

 

static이 붙은 필드는 클래스가 만들어지면서 바로 생성되는 것이다.

static이 붙지 않은 필드는 객체가 생성될때 만들어진다.

 

한 클래스에서 만들어진 여러 객체가 접근하는 static필드는 같은 것일까 다른것일까? 

한 번 생각해보자, 앞에서 했던 말과 같은 말이다.

더보기

같은 것이다. 

 

그렇다면 static이 붙지 않은 필드들은? 다른 것일까?

 

응 다른 것이다. 

 

이 얘기들을 이해하려면 객체의 개념을 잘 이해해야하는데 

흔히들 말하는 클래스는 붕어빵틀이고, 객체는 붕어빵이라고 한다.

붕어빵들이 비슷하게 생겼지만, 어떤 것들은 팥이 꼬리쪽에 있고, 어떤 것들은 몸뚱아리에 팥이 들은 것처럼 

완전히 똑같지 않다. 이런 꼬리쪽에 팥이 있다는 사실 혹은 몸뚱아리에 팥이 있다는 사실

이러한 것들이 static이 붙지 않은 필드요소인 것이다. 

 

굳이 코드로 표현하자면

class FishBread {
	static name = "fishBread";
    String WhereIsPot;
}

class Bread {
	FishBread FB1 = new FishBread();
    FishBread FB2 = new FishBread();
    
    FB1.WhereIsPot = "atTail";
    FB2.WhereIsPot = "atHead";
   	FB1.name = "BungaBBang";
    
    
    System.out.println( FB1.WhereIsPot );
    System.out.println( FB2.WhereIsPot );
    System.out.println( FB1.name );  //BungaBBang출력
    System.out.println( FB2.name);  //BungaBBang출력
}

 

 

즉, 객체를 생성할 때 비로소 클래스에 담긴 것들이 의미가 있어진다. 그 전까지는 틀에 불과하다. 

클래스에 담긴 모든 것들이 관련되어있는 서로 연결되어 있는 것들에 static을 붙이는 것이다. 

static이 붙지 않은 비정적인(이 단어가 어려우면 생략해도 된다.) 필드나 메소드는 객체를 생성할 때 비로소 존재한다고 할 수 있는 것이다.

 

아래 코드를 마지막으로 확인해보자. 

class Car {
	static int num = 0;
	int nonStaticNum;
}

class CarCenter {
	Car pride = new Car();
    Car avante = new Car();
    
    pride.num = 3; //static 변수 다른 수로 초기화
    pride.nonStaticNum = 3;
    
    
    if(pride.num == avante.num) {	// true
    	printlm("이봐 static 필드는 공유된다니깐")
    }
    
    if(pride.nonStaticNum == avante.nonStaticNum ){// false
    	println("이게 찍힐 수가 없지~")
    } 
}

'프로그래밍 > JAVA' 카테고리의 다른 글

[JAVA] 가비지컬렉터 - Heap 영역  (0) 2022.12.08
[JAVA] inner클래스 (정적 / 비정적)  (0) 2022.12.02
[JAVA] 생성자에 관한 이야기1  (0) 2022.11.28
[JAVA] 액세스 지정자  (0) 2022.11.28
[JAVA] 오버로딩  (0) 2022.11.28
Comments