CS/공부노트
[정처기] Static 변수와 Static 함수
구운오니
2024. 10. 7. 15:34
728x90
프로세스의 메모리 세그먼트 부분에서 배웠듯이 Static변수는 프로그램이 시작될 때 data 부분에 메모리가 할당이 되고 프로그램이 종료될 때까지 그 값을 유지한다. 지역 변수와 달리 함수나 메서드가 종료되어도 값이 사라지지않고 유지된다.
C/C++에서의 static 변수와 함수
- 전역 변수: 파일의 전역에서 static 키워드를 사용하면 해당 파일 내에서만 접근할 수 있는 전역 변수 및 함수가 되고, 다른 파일에서 그 변수를 참조할 수 없다.
- 지역 변수: 함수 내에서 static 변수를 선언하면 함수 내에서만 접근할 수 있지만, 함수가 여러 번 호출되더라도 값이 초기화되지 않고 이전 값이 유지된다.
JAVA에서의 Static 변수
클래스 변수라고도 하며, 객체에 속하지 않고 클래스에 속하는 변수이다.
즉, 모든 객체가 해당 변수를 공유한다. 인스턴스가 여러 개 만들어져도 static 변수는 하나만 존재하며, 클래스가 메모리에 로드될 때 할당되고 프로그램이 종료될 때까지 유지된다.
class Example {
static int staticVariable = 0;
void increment() {
staticVariable++;
}
}
public class Main {
public static void main(String[] args) {
Example obj1 = new Example();
Example obj2 = new Example();
obj1.increment();
System.out.println(Example.staticVariable); // 1
obj2.increment();
System.out.println(Example.staticVariable); // 2
}
}
Example클래스의 객체가 2개 만들어졌지만 static 변수인 staticVariable은 각각 객체마다 생성되는 것이 아니고 오로지 한 개만 존재한다. 이 값을 두 객체가 공유하는 것이다.
🔊 Java에서는 함수 내에 static 변수를 선언할 수 없다.
JAVA에서의 Static 함수
Java에서 static 메서드는 클래스에 속한 메서드로 객체 인스턴스를 생성하지 않고도 해당 메서드를 호출할 수 있다.
static 변수와 마찬가지로, static 메서드는 클래스 레벨에서 공유되며, 모든 인스턴스가 동일한 메서드를 사용한다.
class Example {
static void staticMethod() {
System.out.println("This is a static method");
}
}
public class Main {
public static void main(String[] args) {
// 객체 생성 없이 클래스명으로 호출 가능
Example.staticMethod();
}
}
728x90