개발계발
인스턴스 멤버와 정적 멤버 본문
필드와 메소드는 선언 방법에 따라 인스턴스 멤버와 정적 멤버로 분류된다.
인스턴스 멤버는 객체 생성 후 사용할 수 있고(객체에 소속)
정적 멤버는 객체 생성 없이도 사용할 수 있다.(클래스에 고정)
인스턴스 멤버
객체지향 프로그래밍 포스팅에서 사용한 예시가 모두 인스턴스 메소드이다.
아래 코드를 보면 된다.
public class Car {
// 인스턴스 필드
int speed;
//인스턴스 메소드
void setSpeed(int speed) {
this.speed = speed
}
}
위 코드처럼 인스턴스 필드와 메소드를 작성하면 다른 클래스에서 해당 필드 혹은 메소드에 접근하려면 우선 객체를 생성하고 객체.필드 혹은 객체.메소드의 형식으로 사용해야한다.
정적 멤버
바로 코드를 보자
public class Calculator {
// 인스턴스 필드
String color;
// 정적 필드
static double pi = 3.14159;
}
- static이라는 키워드를 사용한 것을 볼 수 있다.
어떤 계산기를 사용하더라도 계산기에서 pi값은 변하지 않는다.
즉, 객체마다 파이를 따로 가지고 있을 필요가 없다.
그럼 이제 다른 클래스에서 아래와 같이 접근이 가능하다.
public class CalculatorExample {
public static void main(String[] args) {
double result1 = 10 * 10 * Calculator.pi;
}
}
위 코드를 보면 객체를 생성하지 않고 바로 클래스.필드의 형식으로 사용한 걸 볼 수 있다.
메소드도 마찬가지다.
예를 들어, 계산기에서 더하기는 모든 계산기가 동일하게 동작하기 때문에 아래와 같이 정적 메소드로 작성한다.
public class Calculator {
// 정적 필드
static double pi = 3.14159;
// 정적 메소드
static int plus(int x, int y) {
int result = x + y
return result
}
}
주의 사항
정적 멤버는 객체가 없어도 실행되기 때문에, 클래스 내부의 인스턴스 멤버를 사용할 수 없다.(객체 자신의 참조인 this 키워드도 사용불가)