자바 Instance 변수와 Static 변수의 차이점
자바에서 Instance 변수와 Static 변수는 클래스 내에서 정의되지만, 그들의 특성과 사용 방식에는 중요한 차이가 있습니다. 이 글에서는 두 변수의 차이점과 각각의 특징을 자세히 설명하고, 이를 통해 자바의 객체 지향 프로그래밍에서 변수들이 어떻게 동작하는지 이해할 수 있도록 도와드리겠습니다.
1. Instance 변수란?
Instance 변수는 객체 인스턴스(인스턴스화된 클래스)마다 별도로 생성되는 변수입니다. 즉, 클래스의 각 객체가 독립적으로 가지고 있는 변수입니다. 인스턴스 변수는 객체를 생성할 때마다 메모리에 할당되며, 각 객체는 자신만의 인스턴스 변수를 가질 수 있습니다.
특징
- 객체가 생성될 때마다 메모리에 할당된다.
- 클래스의 각 인스턴스마다 별도의 값을 가질 수 있다.
- 객체의 상태를 저장하는 데 사용된다.
- 인스턴스 메소드에서 접근 가능하다.
예시 코드
class Car {
// Instance 변수
String color;
int speed;
// 생성자
public Car(String color, int speed) {
this.color = color;
this.speed = speed;
}
public void displayInfo() {
System.out.println("Color: " + color + ", Speed: " + speed);
}
}
public class Main {
public static void main(String[] args) {
Car car1 = new Car("Red", 100);
Car car2 = new Car("Blue", 120);
car1.displayInfo(); // Color: Red, Speed: 100
car2.displayInfo(); // Color: Blue, Speed: 120
}
}
[위 예시에서 color
와 speed
는 인스턴스 변수입니다. car1
과 car2
는 각기 다른 값을 가지고 있죠.]
2. Static 변수란?
Static 변수는 클래스의 모든 객체가 공유하는 변수입니다. 즉, 클래스의 단 하나의 메모리 공간만 할당되고, 그 메모리 공간을 모든 객체가 공용으로 사용합니다. Static 변수는 클래스가 메모리에 로드될 때 초기화되며, 클래스의 객체가 여러 개 생성되더라도 값이 하나만 존재합니다.
특징
- 클래스가 로드될 때 메모리에 할당된다.
- 모든 객체가 동일한 값을 공유한다.
- 클래스 이름을 통해서도 접근할 수 있다.
- 주로 클래스 변수, 전역적 상태 정보를 저장하는 데 사용된다.
예시 코드
class Car {
// Static 변수
static int carCount = 0;
// 생성자
public Car() {
carCount++;
}
public void displayInfo() {
System.out.println("Total cars created: " + carCount);
}
}
public class Main {
public static void main(String[] args) {
Car car1 = new Car();
car1.displayInfo(); // Total cars created: 1
Car car2 = new Car();
car2.displayInfo(); // Total cars created: 2
Car car3 = new Car();
car3.displayInfo(); // Total cars created: 3
}
}
[위 예시에서 carCount
는 static 변수입니다. 모든 객체는 동일한 carCount
값을 공유하며, 새로운 객체가 생성될 때마다 이 값이 증가합니다.]
3. Instance 변수와 Static 변수의 차이점
구분 | Instance 변수 | Static 변수 |
---|---|---|
생성 시점 | 객체가 생성될 때마다 생성된다. | 클래스가 메모리에 로드될 때 한 번만 생성된다. |
메모리 할당 | 각 객체마다 별도로 메모리 공간이 할당된다. | 클래스 단 하나의 메모리 공간만 할당된다. |
공유 여부 | 각 객체마다 고유한 값이 있다. | 모든 객체가 동일한 값을 공유한다. |
접근 방법 | 객체를 통해서만 접근 가능하다. | 클래스명 또는 객체를 통해 접근할 수 있다. |
사용 목적 | 객체의 상태를 나타내는 데 사용된다. | 클래스 수준에서 공유할 데이터나 공통 정보를 저장하는 데 사용된다. |
4. 언제 Static 변수를 사용할까?
Static 변수는 클래스의 모든 객체가 공통으로 사용할 필요가 있을 때 사용합니다. 예를 들어, 애플리케이션에서 전체적으로 공유되는 설정 값이나 객체의 생성 횟수를 추적할 때 유용합니다. Static 변수를 사용하는 주요 예시로는 싱글톤 패턴, 상수 등이 있습니다.
5. 결론
Instance 변수는 각 객체마다 고유한 상태 정보를 저장하는 데 사용되며, 객체의 특성에 맞는 데이터가 필요할 때 사용합니다.
Static 변수는 클래스의 모든 객체가 공유해야 하는 데이터를 저장하는 데 유용하며, 클래스 수준에서 공통 데이터를 관리할 때 사용됩니다.
각 변수의 특성과 차이를 이해하고 적절하게 활용하는 것이 자바 객체 지향 프로그래밍에서 중요한 요소입니다. 상황에 맞게 인스턴스 변수와 static 변수를 선택하여 효율적인 코드를 작성해 보세요!
'Software > Java' 카테고리의 다른 글
[Java] 접근지정자(Access Modifier) 의 종류와 예제 (1) | 2025.01.31 |
---|---|
[Java] Setter 와 Getter 에 대한 이해 (1) | 2025.01.24 |
[Java] 폴리모피즘(Polymorphism) 이해하기 (1) | 2025.01.23 |
[Java] 메소드의 타입 4가지 (고정값, 고정일, 가변값, 가변일) (0) | 2025.01.23 |
[Java] Escape Character 개념 정리 ( 줄 바꿈, 탭 등 역슬래시 사용 ) (1) | 2025.01.22 |