728x90
반응형

객체 지향 언어 에서 말하는 객체란 우리 주변에 존재하는 모든 사물, 또는 추상적으로 존재하는 개념 등 우리가 상상할 수 있는 모든 것을 말한다.

객체에 대한 속성이나 행동, 특징들을 정의 하는 청사진(설계도)을 프로그래밍 언어에서는 클래스로 구현한다.

예를 들어 아래와 같이 Car 라는 클래스를 만들었다.
이 클래스는 speed 라는 속성을 가지고 있고, speed라는 속성을 Accel()Break() 라는 두 개의 메소드로 조절 할 수 있다.

public class Car
{
    // field
    int speed = 0;

    // method
    public void Accel()
    {
        speed++;
    }

    public void Break()
    {
        speed--;
    }

    public void DisplaySpeed()
    {
        Console.WriteLine($"현재속도: {speed}");
    }
} 

하지만 클래스는 어디까지나 청사진을 만든 것 뿐이지 내가 만든 소프트웨어 세계 안에 실제로 존재하는 것은 아니다. 내가 만든 세계에 실제로 존재하게 하기 위해선 new라는 키워드를 이용해서 실제 메모리에 할당해주어야 한다.

아래의 예제에서 처럼 Car 라는 클래스를 실제 내가 만든 소프트웨어 세계안에 실체화(인스턴스화) 하였다. 이제 myCar 라는 변수 안에는 Car 클래스의 인스턴스(Instance)가 들어있다.
이 인스턴스를 이용해 클래스 안에 있는 함수들을 사용할 수 있다.

static void Main(string[] args)
{
    Car myCar = new Car(); // 인스턴스화
    myCar.Accel();
    myCar.Accel();
    myCar.DisplaySpeed();
    myCar.Break();
    myCar.DisplaySpeed();
}

// 실행 결과:
// 현재속도: 2
// 현재속도: 1

new Car() 부분이 인스턴스를 생성하는 부분이다. 여기서 "myCar이라는 변수에 인스턴스가 할당되었다." 라고 할 수 있다.
그래서 클래스를 주로 "붕어빵 틀"에 비유하고, 인스턴스를 "붕어빵"에 비유하곤 한다.
누가 시작했는지는 잘 모르겠지만 이해하기 좋은 비유인 것 같다.

728x90
반응형

+ Recent posts