클래스에 선언된 필드와 메소드가 모두 객체 내부에 포함되는 것은 아니다.
객체가 있어야 사용가능한 멤버가 있고, 객체가 없어도 사용가능한 멤버가 있다.
인스턴스 멤버
객체 마다 가지고 있는 멤버
- 인스턴스 필드: 힙 영역에 객체마다 가지고 있는 멤버, 객체마다 다른 데이터를 저장
- 인스턴스 메소드: 객체가 있어야 호출가능한 메소드 클래스 코드(메소드 영역)에 위치하지만, 이해하기 쉽도록 객체 마다 가지고 있는 메소드라고 생각해도 된다.
정적 멤버
객체와 상관없는 멤버, 클래스 코드(메소드 영역)에 위치
- 정적 필드 및 상수: 객체 없이 클래스만으로도 사용 가능한 필드
- 정적 메소드: 객체가 없이 클래스만으로도 호출 가능한 메소드
클래스 내부의 다른 메소드에서 호출할 경우에는 단순히 메소드 이름으로 호출이 가능하다.
클래스 외부의 메소드를 호출하는 경우 클래스로부터 객체를 생성한 뒤 참조 변수를 이용해서 메소드를 호출해야 한다.
인스턴스(instance) 멤버
객체를 생성한 후 사용할 수 있는 필드와 메소드 이다.
인스턴스 필드와 메소드는 객체에 소속된 멤버이기 때문에 객체 없이는 사용할 수 없다.
인스턴스 멤버 선언
Car 클래스에 인스턴스 필드 gas와 인스턴스 메소드 setSpeed()를 선언
public class Car {
//필드
int gas;
//메소드
void setSpeed(int speed){ ... }
}
gas필드와 setSpeed()메소드는 인스턴스 멤버이기 때문에 외부 클래스에서 사용하기 위해서는 Car객체(인스턴스)를 생성하고 참조 변수 MyCar로 접근한다.
Car myCar() = new Car();
myCar.gas = 10;
MyCar.setSpeed(50);
this
객체 내에서 인스턴스 멤버에 접근하기 위해 사용한다.
생성자와 메소드의 매개 변수 이름이 필드와 동일할 경우, 필드 임을 지정하기 위해 주로 사용한다.
Car(String model){
this.model = model;
}
void setModel(String model){
this.model = model;
}
예시1) 인스턴스 멤버 & this
public class Car {
// 필드
String model;
int speed;
// 생성자
Car(String model) {
this.model = model;
}
// 메소드
void setSpeed(int speed) {
this.speed = speed;
}
void run() {
for (int i = 50; i <= 100; i += 20) {
this.setSpeed(i);
System.out.println(this.model + "가 달립니다.(시속: " + this.speed + "km/h)");
}
}
}
public class CarEx {
public static void main(String[] args) {
Car myCar = new Car("포르쉐");
Car yourCar = new Car("마세라티");
myCar.run();
yourCar.run();
}
}
※용어 정리
-
인스턴스 멤버: 인스턴스멤버란 객체(인스턴스)를 생성한 후 사용할 수 있는 필드와 메소드를 말하는데, 이들은 각각 인스턴스 필드, 인스턴스 메소드라 부른다.
-
this: 객체 내부에서도 인스턴스 멤버에 접근하기 위해 this를 사용.
-
ex) this.model은 자신이 가지고 있는 model필드라는 뜻이다.
-
this는 주로 생성자와 메소드의 매개 변수 이름이 필드와 동일한 경우, 인스턴스 멤버인 필드임을 명시하고자 할때 사용 된다.
-
본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.
'Work & Study > JAVA (& 혼공자Java)' 카테고리의 다른 글
자바(Java) - 인스턴스 멤버와 정적 멤버3 (싱글톤 & final필드, 상수) (0) | 2020.10.16 |
---|---|
자바(Java) - 인스턴스 멤버와 정적 멤버2 (정적 멤버 & static) (0) | 2020.10.15 |
자바(Java) - 메소드4 (메소드호출) (0) | 2020.10.14 |
자바(Java) - 메소드3 (리턴문) (0) | 2020.10.12 |
자바(Java) - 메소드2 (매개 변수 선언) (0) | 2020.10.07 |