객체지향 프로그래밍
~자바의 정석 공부중~
객체란 사전적인 의미로 '실제로 존재하는 것'이란 뜻이다. 자동차나 책상, 혹은 수학 공식같은 무형적인 것들도
객체에 포함된다.
객체를 생성하는 데엔 클래스가 사용되고, 클래스는 객체를 정의해놓은 것이다.
객체는 속성(멤버 변수), 기능(메소드) 로 이루어져 있다.
클래스를 한번 생성해놓으면 그에 맞는 객체(인스턴스)를 쉽게 찍어낼 수 있다는 것이 장점이다.
예를 들어 자동차 클래스를 생성하면, 그 인스턴스인 빨간색 자동차나 파란색 자동차 등을 쉽게 만들 수 있는 것이다.
따라서 클래스는 종종 설계도, 객체는 설계도에 맞게 찍어낸 제품으로 비유한다.
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가 참조하는 인스턴스는 같다.
정리하면 하나의 인스턴스를 여러개의 참조변수가 가리킬 수 있지만,
하나의 참조변수가 여러개의 인스턴스를 가리킬 순 없다.