제어접근자 static 알기
변수나 클래스 앞에 static 이라는 제어접근자가 붙는 걸 자바 코드에서 본 적이 있을 것이다.
해당 접근자가 무엇을 의미하는지 코드를 통해 알아보자.
케첩이라는 클래스를 선언해주었고 필드에 HEINZE라는 이름의 변수 앞에 제어접근자 private과
static을 선언해 주었다.
클래스에 함수로는 private 변수에 접근하기 위한 함수 getHeinze(String ketchup)와 해당
변수에 값을 확인하는 함수인 print()함수를 선언해주었다. 그랬을 때 새로이 객체를 생성해서
HEINZE라는 변수의 값을 변경해 주고 난 뒤에 새로이 객체를 생성한 후 해당 변수의 값을 확인
해봄으로써 제어접근자 static을 이해해보고자 한다.
class Ketchup {
private static String HEINZE = "heinze";
public void getHeinze(String ketchup) {
this.HEINZE = ketchup;
}
public String print() {
return "HEINZE:" + HEINZE;
}
}
아래 코드를 보면 k라는 Ketchup 객체를 선언후 getHeinze("ottogi")함수를 통해 HEINZE 변
수에 접근해 값을 변경해주었다. 그리고 값을 확인하면 HEINZE:ottogi가 출력된다.
그리고 나서 새로이 객체 k2를 만들어주고 HEINZE 변수를 확인하면 똑같이 HEINZE:ottogi가 출
력되는 것을 알 수 있다.
public class Main {
public static void main(String[] args) {
Ketchup k = new Ketchup();
Ketchup k2 = new Ketchup();
k.getHeinze("ottogi");
System.out.println(k.print());
System.out.println(k2.print());
}
}
만약에 HEINZE 변수 앞에 static을 붙여주지 않고 다음과 같이 변수를 선언한 후 똑같이 실행시킨
private String HEINZE = "heinze";
다면 그 값은 위와 같은 값이 아니라 아래와 같은 값으로 출력된다. 즉 static을 붙이면 새로운 객
체 생성시 HEINZE 변수에 접근시 같은 주소 값을 참조하게 된다. 이것이 static 접근제어자가 갖는
단편적인 의미이다.
public class Main {
public static void main(String[] args) {
Ketchup k = new Ketchup();
Ketchup k2 = new Ketchup();
k.getHeinze("ottogi");
System.out.println(k.print());
System.out.println(k2.print());
}
}
결론
접근제어자 static 선언시 static 메모리에 올라가기 때문에 초기화 과정이 필요없다.
따라서 static이 선언된 변수, 메서드에 주소로 다이렉트로 접근가능하기에 위와 같은 값 변경이 발생한다.