멤버는 한국어로 '구성원'이라는 뜻입니다. 클래스는 상태(변수)와 행위(메서드)를 가지며, 인스턴스도 상태(변수)와 행위(메서드) 구성원을 가집니다. 인스턴스가 클래스(설계도)를 이용해 구체화한 객체 중 하나인데, 인스턴스가 여러 개 만들어졌을 경우 인스턴스마다 각각의 변수와 메서드를 가지게 됩니다.
이러한 인스턴스들이 같은 값을 가지게 된다면 그 값은 중복이 됩니다. 좋은 코드는 중복을 제거한 코드이기에 모든 인스턴스들이 같은 값을 가지는 그 값을 클래스의 멤버로 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 키워드를 사용하여 중복된 값을 클래스 레벨에서 관리하면 코드의 중복을 줄이고 관리하기 쉬워집니다.