정처기 프로그래밍 문제를 풀다가 정리해 두면 좋을 것 같아서 자바의 static 변수에 대해 간단하게 정리하려고 한다.
static 변수
C언어에서 함수 내에서 선언된 static 변수는 함수가 종료되어도 사라지지 않고, 함수가 다시 호출되었을 때 이전 값을 유지한다.
전역 범위에서 선언된 static 변수는 해당 파일 내에서만 접근이 가능하고, 프로그램 종료 시까지 메모리에 유지된다.
Java에서 static 변수는 클래스 수준에서 선언되는 변수로, 해당 클래스의 모든 인스턴스에 걸쳐 공유된다.
하나의 인스턴스에서 static 변수의 값을 변경하면, 변경사항이 모든 인스턴스에 반영된다.
인스턴스 변수와 달리 클래스가 로드될 때 초기화되며, 프로그램이 종료될 때 해제된다.
참고로 인스턴스를 생성하지 않고 클래스명으로 접근할 수 있다.
static int person_count = 0; //클래스 변수
public int age = 0; //인스턴스 변수
public String name; //인스턴스 변수
Person(String param_name){
this.name = param_name;
person_count++;
age++;
}
public void print_info(){
System.out.println("인구" + person_count);
System.out.println(name + ":" + age);
}
Person p1 = new Person("홍길동");
p1.print_info();
// 인구1
// 홍길동:1
p1.person_count = 10;
Person p2 = new Person("김길동");
p2.print_info();
// 인구11
// 김길동:1
(+)static 메서드
static 메서드는 클래스 수준에서 정의된 메서드로, 인스턴스를 생성하지 않고 클래스 이름을 통해 직접 호출할 수 있다.
- 인스턴스 변수에 접근할 수 없다.
- static 데이터 멤버나 다른 static 메서드만 호출할 수 있다.
- 객체를 생성하지 않고 클래스 이름을 통해 직접 호출할 수 있다.
✨👩💻 ✨
결국 static 변수는 C언어나 Java에서 똑같이 프로그램이 끝날 때까지 메모리에 유지되며 값이 지속된다.
다만, C언어는 지역 변수는 함수 내에서, 전역 변수는 파일 내에서만 접근 가능하고, Java는 클래스의 모든 인스턴스가 공유하며, 클래스 이름으로 접근 가능하다.
출처
'Study > Java' 카테고리의 다른 글
[Java] 제네릭(Generic) (0) | 2024.08.02 |
---|---|
[Java] 객체 비교 - equals(), == 차이 (0) | 2024.07.16 |
[Java] 중첩 선언과 익명 객체 (0) | 2024.06.10 |
[Java] 인터페이스 타입 변환과 다형성 (0) | 2024.06.01 |
[Java] 다중 인터페이스와 인터페이스의 상속 (0) | 2024.05.30 |