JAVA

객체지향 프로그래밍

HipPopoTamUs 2022. 8. 2. 00:44

~자바의 정석 공부중~

 

객체란 사전적인 의미로 '실제로 존재하는 것'이란 뜻이다. 자동차나 책상, 혹은 수학 공식같은 무형적인 것들도

객체에 포함된다. 

 

객체를 생성하는 데엔 클래스가 사용되고, 클래스는 객체를 정의해놓은 것이다.

객체는 속성(멤버 변수), 기능(메소드) 로 이루어져 있다.

클래스를 한번 생성해놓으면 그에 맞는 객체(인스턴스)를 쉽게 찍어낼 수 있다는 것이 장점이다.

예를 들어 자동차 클래스를 생성하면, 그 인스턴스인 빨간색 자동차나 파란색 자동차 등을 쉽게 만들 수 있는 것이다.

따라서 클래스는 종종 설계도, 객체는 설계도에 맞게 찍어낸 제품으로 비유한다.

 

class Car{
	//멤버 변수
	String color;
    boolean power;
    int speed;		
    
    //메소드
    void power() {power!=power;}
    void speedup() {speed+=10;}
    void speeddown() {speed-=10;}
}

class CarTest{
	public static void main(String args[]){
    	Car car;	//Car 클래스를 참조하기 위한 참조변수 car 선언
        car = new Car();	//Car 인스턴스 생성
        car.color = red;
        car.speed = 0;
        System.out.println("현재 속력은 "+car.speed+"km/h입니다.");
    }
}

main문의 Car car; 에서 참조변수 car을 위한 메모리 공간이 마련된다.

하지만 아직 인스턴스를 생성하지 않았으므로 car로 아무것도 할 수 없지만,

이후 new 연산자에 의해 Car의 인스턴스가 메모리의 빈 공간에 생성되고

생성된 인스턴스의 주소값이 참조변수 car에 저장된다.  이제 car을 통해 인스턴스에 접근 할 수 있는 것이다.

따라서 인스턴스를 다루기 위해서는 참조변수가 반드시 필요하다. 그리고 참조변수의 타입은 인스턴스의 타입과 일치해야한다.

 

class CarTest{
	public static void main(String args[]){
    	Car car1 = new Car();
        Car car2 = new Car();
        
        car1 = car2;
        car2.color = red;
    }
}

인스턴스를 두개 생성해보았다. 각각의 참조변수 car1과 car2는 주소를 저장하고 있으므로

car1 = car2;에 의해 car1은 car2가 가리키고있는 인스턴스를 참조하게 된다.

따라서 car1과 car2가 참조하는 인스턴스는 같다.

정리하면 하나의 인스턴스를 여러개의 참조변수가 가리킬 수 있지만,

하나의 참조변수가 여러개의 인스턴스를 가리킬 순 없다.