본문 바로가기

Java/Methodology

[OOP] 객체 지향 프로그래밍이란? - 추상화

  • 추상화(Abstraction)

각자 다른 클래스들의 공통적인 부분들을 모아서 하나로 추출한다.

전혀 추상화가 되어있지 않은 아래의 코드를 살펴보자.

public class Motorcycle
{

    private String manufacturer;
    private String modelName;
    private String engineName;
    private String fuelType;

    public void run()
    {
        log.info("느리게 달린다.");
    }

    public void engineOn()
    {
        log.info("시동을 켠다.");
    }

}

public class Bicycle
{

    private String manufacturer;
    private String modelName;

    public void run()
    {
        log.info("빠르게 달린다.");
    }

}

공통으로 사용하고 있는 부분이 보이는가
manufacturer, modelName, run()은 Motorcycle(오토바이)과 Bicycle(자전거)가 공통으로 가지고 있는 속성이다.
그러므로 굳이 양쪽에 정의해두면 나중에 유지 보수하기만 힘들어진다.

아래는 추상클래스를 사용하여 Motorcycle과 Bicycle의 공통점을 모아서 추상화한 코드이다.

public abstract class Vehicle
{

    private String manufacturer;
    private String modelName;

    public abstract void run();

}

public class Motorcycle extends Vehicle
{

    private String engineName;
    private String fuelType;

    @Override
    public void run()
    {
        log.info("빠르게 달린다.");
    }

    public void engineOn()
    {
        log.info("시동을 켠다.");
    }

}

public class Bicycle extends Vehicle
{

    @Override
    public void run()
    {
        log.info("느리게 달린다.");
    }

}

Motorcycle과 Bicycle에서 중복되는 부분인 manufacturer, modelName, run()을 가지고 있는 Vehicle 추상클래스를 만들었다.

이렇게 여러 클래스의 중복되는 부분을 하나의 클래스로 뽑아내는 것을 추상화라고 생각한다.