클래스 멤버와 인스턴스 멤버

현정재·2024년 6월 25일
0

클래스와 인스턴스의 멤버 변수에 대한 이해

멤버는 한국어로 '구성원'이라는 뜻입니다. 클래스는 상태(변수)와 행위(메서드)를 가지며, 인스턴스도 상태(변수)와 행위(메서드) 구성원을 가집니다. 인스턴스가 클래스(설계도)를 이용해 구체화한 객체 중 하나인데, 인스턴스가 여러 개 만들어졌을 경우 인스턴스마다 각각의 변수와 메서드를 가지게 됩니다.

이러한 인스턴스들이 같은 값을 가지게 된다면 그 값은 중복이 됩니다. 좋은 코드는 중복을 제거한 코드이기에 모든 인스턴스들이 같은 값을 가지는 그 값을 클래스의 멤버로 static 키워드를 이용해 변수로 선언합니다. static 키워드가 없다면 그 변수는 클래스에서 선언했지만 인스턴스의 변수입니다.
정리해서 적으면

멤버

  • 한국어로 '구성원'이라는 뜻입니다.

클래스

  • 상태(변수)와 행위(메서드)를 가집니다.

인스턴스

  • 클래스(설계도)를 이용해 구체화한 객체 중 하나입니다.
  • 인스턴스마다 각각의 변수와 메서드를 가집니다.

인스턴스가 여러 개 만들어졌을 경우

  • 각 인스턴스는 고유한 변수와 메서드를 가집니다.

인스턴스들이 같은 값을 가지게 된다면

  • 그 값은 중복이 됩니다.
  • 좋은 코드는 중복을 제거한 코드입니다.

모든 인스턴스들이 같은 값을 가지는 경우

  • 그 값을 클래스의 멤버로 선언합니다.
  • static 키워드를 이용해 변수를 선언합니다.

static 키워드

  • 클래스 변수로 선언합니다.
  • 클래스 변수는 모든 인스턴스가 공유합니다.
  • static 키워드가 없을 경우, 변수는 클래스에서 선언했지만 인스턴스의 변수로 작동합니다.

클래스 변수와 인스턴스 변수의 차이

  • 클래스 변수 (static 변수): 모든 인스턴스가 같은 값을 공유합니다.
  • 인스턴스 변수: 각 인스턴스마다 고유한 값을 가집니다.

중복 제거의 중요성

  • 중복을 제거하면 코드의 유지보수성과 가독성이 향상됩니다.
  • 모든 인스턴스가 동일한 데이터를 가질 필요가 있을 때, 클래스 변수를 사용하면 효율적입니다.
class Calculator {
    // 클래스 멤버의 변수
    static final int a = 10;

    // 인스턴스 멤버의 변수
    int b;
    int c;

    // 생성자
    public Calculator(int b, int c) {
        // this는 나 자신을 뜻하는 키워드, this.b : 나의(class Calculator)변수 b를 뜻한다
        // this.b = b; 에서 오른쪽 b : public Calculator(int b, int c)에서 int b, 즉 입력값인 매개변수의 b를 뜻한다
        this.b = b;
        this.c = c;
    }

    public void sum() {
        System.out.println(this.b + this.c);
    }

    public void sub() {
        System.out.println(this.b - this.c - a);
    }
}

// 설명하기 위한 코드, 실제로는 new 키워드를 사용해서 인스턴스를 생성할 때 
// 생성자 매개변수 모양대로 public Calculator(int b, int c) 전달할 값 b와 c의 값을 넣어야 한다.
// Calculator cal1 = new Calculator(10, 20);

class CalculatorMain {
    public static void main(String[] args) {
        // 여러 개의 인스턴스
        Calculator cal1 = new Calculator();
        Calculator cal2 = new Calculator();

        cal1.sum(10,20); // 결과 30   인스턴스(cal1)의 b = 10, c = 20
        cal2.sum(20,40); // 결과 60   인스턴스(cal2)의 b = 20, c = 40
        // Calculator 클래스에서 int b와 int c는 클래스 멤버가 아니라 인스턴스의 멤버이다. 인스턴스마다 값을 다르게 갖기 때문이다.

        cal1.sub(20,10); // 결과 0   인스턴스(cal1)의 멤버(변수) b = 20, c = 10   클래스 멤버 a = 10
        cal2.sub(40,20); // 결과 10  인스턴스(cal2)의 멤버(변수) b = 40, c = 20   클래스 멤버 a = 10
        // 클래스 멤버의 변수는 각각의 인스턴스들이 같은 값을 사용하게 된다.
    }
}
코드를 입력하세요

위 코드를 통해 클래스 멤버와 인스턴스 멤버의 차이점을 명확히 이해할 수 있습니다. static 키워드를 사용하여 중복된 값을 클래스 레벨에서 관리하면 코드의 중복을 줄이고 관리하기 쉬워집니다.

profile
wonttock

0개의 댓글