본문 바로가기

Java 기본 문법 - 참조 서적 [이것이 자바다 - 한빛미디어]/4. 객체지향 프로그래밍

6. Java 자바 - 인스턴스 멤버와 this

인스턴스 (instance) 멤버

 

객체(인스턴스) 를 생성한 후 사용할 수 있는 필드와 메소드를 의미한다.

(인스턴스 필드, 인스턴스 메소드라고 불린다.)

 

이전에 작성한 모든 필드와 메소드는 인스턴스 멤버이다.

 

인스턴스 필드와 메소드는 객체에 소속된 멤버이기 때문에 객체 없이는 사용할 수 없다.

 

ex) Car 클래스에 gas 필드와 setSpeed( ) 메소드가 아래와 같이 선언

 

public class Car {
    //필드
    int gas;
    
    //메소드
    void setSpeed(int speed) { . . . }
}

 

gas 필드와 setSpeed( ) 메소드는 인스턴스 맴버이기 때문에 외부 클래스에서 사용하기 위해서는

 

먼저 Car 객체(인스턴스)를 생성하고 참조 변수 myCar, yourCar 로 접근해야 한다.

 

Car myCar = new Car();

myCar.gas = 10;
myCar.setSpeed(60);

Car yourCar = new Car();

yourCar.gas = 20;
yourCar.setSpeed(60);

 

위의 코드 실행 후 메모리의 모습은 아래와 같다.

 

객체 메모리 영역

 

인스턴스 필드 gas는 객체마다 따로 존재하고,

인스턴스 메소드 setSpeed( ) 는 객체마다 존재하지 않고, 메소드 영역에 저장되고 공유된다.

 


this (객체 자신)

 

객체 외부에서 인스턴스 멤버에 접근하기 위해 참조 변수를 사용하는 것처럼

객체 내부에서도 인스턴스 멤버에 접근하기 위해 this를 사용할 수 있다. (객체 자신 = "this")

 

this.model : 자신이 가지고 있는 model 필드 의미

 

this 는 주로 생성자와 메소드의 매개 변수 이름이 필드와 동일한 경우,

인스턴스 멤버인 필드임을 명시할 때 사용된다.

 

Car(String model) {
    this.model = model;
}

void setModel(String model) {
    this.model = model;
}

매개 변수 model 값을 필드 model에 저장한다.

 

ex) Car.java : 인스턴스 멤버와 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 = 10; i <= 50; i += 10) {
            this.setSpeed(i);
            System.out.println(this.model + "달립니다. (시속 :" + this.speed + "km/h)");
        }
    }
}

 

CarExample.java : 실행 클래스

public class CarExample {
    public static void main(String[] args) {
        Car myCar = new Car("포르쉐");
        Car yourCar = new Car("벤츠");
        
        myCar.run();
        yourCar.run();
    }
}