본문 바로가기

java(자바)

[java(자바)] non-static 멤버와 static 멤버의 차이점 _디버깅의 눈물

자바에서는 클래스 내부에 선언된 멤버를 인스턴스 멤버(non-static member)와 클래스 멤버(static member)로 구분합니다. 이 둘의 차이점은 다음과 같습니다.

 

1.인스턴스 멤버

  • 객체 생성 후 인스턴스 멤버에 접근할 수 있습니다.
  • 인스턴스 멤버는 객체마다 독립적으로 존재하며, 객체가 생성될 때마다 새로운 인스턴스 멤버가 생성됩니다.
  • 인스턴스 변수, 인스턴스 메서드, 인스턴스 초기화 블록 등이 인스턴스 멤버에 해당됩니다.

예시:

 

public class Person {
    private String name;  // 인스턴스 변수
    public void setName(String name) {  // 인스턴스 메서드
        this.name = name;
    }
}
Person person1 = new Person();
person1.setName("Alice");  // 인스턴스 멤버에 접근하여 값 설정
Person person2 = new Person();
person2.setName("Bob");  // 다른 인스턴스 멤버에 값 설정

 

 

2.클래스 멤버

  • 클래스 이름으로 바로 접근할 수 있습니다. 즉, 객체 생성 없이 클래스 이름만으로 접근 가능합니다.
  • 클래스 멤버는 클래스가 메모리에 로드될 때 생성되며, 모든 객체에서 공유합니다.
  • 클래스 변수, 클래스 메서드, 정적 초기화 블록 등이 클래스 멤버에 해당됩니다.

예시:

 

public class Calculator {
    public static final double PI = 3.14;  // 클래스 변수
    public static int add(int a, int b) {  // 클래스 메서드
        return a + b;
    }
}
double piValue = Calculator.PI;  // 클래스 변수에 접근하여 값 가져오기
int result = Calculator.add(3, 4);  // 클래스 메서드에 접근하여 연산 수행

 

즉, 인스턴스 멤버는 객체마다 독립적으로 존재하며, 객체가 생성될 때마다 새로운 인스턴스 멤버가 생성되지만, 클래스 멤버는 클래스가 메모리에 로드될 때 생성되며, 모든 객체에서 공유됩니다. 이러한 차이점으로 인해, 인스턴스 멤버는 객체의 특정한 상태나 행위를 표현할 때 사용하고, 클래스 멤버는 객체와 무관한 공통적인 상태나 행위를 표현할 때 사용합니다.

 

*멤버(member)란 클래스 내부에 선언된 변수와 메서드를 의미합니다.