=> 보통 프로그램 전반에 걸친 전역변수나 공용으로 사용해야 할 변수를 필요로 할 때 사용됨
static 변수, 메서드 특징
- 클래스가 메모리에 로드될 때, 스태틱(static) 메모리 영역에 생성
- 인스턴스를 생성하지 않고도 사용할 수 있음.
- 클래스당 하나만 생성되며, 클래스 멤버라고도 부름. (static 메서드가 해당 클래스로부터 생성된 여러 인스턴스들 간에 공유되며, 클래스 자체에 속하는 멤버라는 의미)
- static 메소드 안에서는 static 멤버들만 사용할수 있고, 인스턴스 멤버는 사용할 수 없음.
*인스턴스
"인스턴스"는 객체지향 프로그래밍(OOP)에서 클래스의 구조를 기반으로 실제로 메모리에 할당된 것을 가리킵니다. 클래스는 객체를 만들기 위한 템플릿 또는 설계도로 볼 수 있고, 이 클래스를 기반으로 실제 데이터를 담고 있는 메모리 공간이 할당되면 그것을 "인스턴스"라고 합니다.
클래스는 설계도이고, 그 설계도를 기반으로 만들어진 실체가 인스턴스입니다.
객체지향 프로그래밍에서는 이러한 클래스와 인스턴스를 사용하여 코드를 구조화하고, 관련된 데이터와 동작을 논리적으로 그룹화합니다.
// 클래스 정의
public class Car {
// 인스턴스 변수
String model;
int year;
// 인스턴스 메서드
void drive() {
System.out.println("Driving the car");
}
}
// 인스턴스 생성
Car myCar = new Car();
// 인스턴스 변수 설정
myCar.model = "Toyota";
myCar.year = 2022;
// 인스턴스 메서드 호출
myCar.drive();
동일 클래스의 모든 인스턴스에서 공유 사용
public class MyClass {
// static 변수
public static int sharedVariable = 0;
// static 메서드
public static void updateSharedVariable() {
sharedVariable++;
}
}
public class Main {
public static void main(String[] args) {
// 인스턴스 생성
MyClass instance1 = new MyClass();
MyClass instance2 = new MyClass();
// static 변수는 모든 인스턴스에서 공유됨
System.out.println(instance1.sharedVariable); // 출력: 0
System.out.println(instance2.sharedVariable); // 출력: 0
// static 메서드 호출
MyClass.updateSharedVariable();
// 모든 인스턴스가 같은 static 변수를 공유하므로 값이 변함
System.out.println(instance1.sharedVariable); // 출력: 1
System.out.println(instance2.sharedVariable); // 출력: 1
}
}
static 메소드 안에서는 static 멤버들만 사용할 수 있고, 인스턴스 멤버는 사용할 수 없다.
public class MyClass {
// 인스턴스 멤버
public int instanceVariable;
// static 멤버
public static int staticVariable;
// 인스턴스 메소드
public void instanceMethod() {
instanceVariable = 1; // 인스턴스 메소드에서는 인스턴스 멤버 사용 가능
staticVariable = 2; // 인스턴스 메소드에서는 static 멤버 사용 가능
}
// static 메소드
public static void staticMethod() {
// 인스턴스 멤버에 직접 접근할 수 없음 - 아래 라인은 오류 발생
// instanceVariable = 3;
// static 멤버는 사용 가능
staticVariable = 4;
}
}
public class Main {
public static void main(String[] args) {
// 인스턴스 생성
MyClass myInstance = new MyClass();
// 인스턴스 메소드 호출
myInstance.instanceMethod();
// static 메소드는 클래스 이름으로 직접 호출
MyClass.staticMethod();
}
}
'CS' 카테고리의 다른 글
알고리즘 - 최소 신장 트리, 최단 거리 알고리즘 (0) | 2023.12.25 |
---|---|
알고리즘 - 정렬 알고리즘 (1) | 2023.12.24 |
[면접] 오류와 예외 (1) | 2023.12.22 |
[면접] Java Collection - List, Set, Map (1) | 2023.12.22 |
4. 자료 구조 요약 정리 (0) | 2023.12.18 |