1. 추상화란?
•
추상화는 객체지향 프로그래밍의 핵심 개념 중 하나이다.
•
추상화는 사용자와 관련 있는 내용만 노출하고 나머지 세부 내용은 숨기는 개념이다.
•
추상화를 통해 사용자는 애플리케이션이 일을 수행하는 방법이 아니라 애플리케이션이 수행하는 일 자체에 집중할 수 있다.
정리
추상화는 사용자를 위해 무언가를 최대한 간단하게 만들고자 하는 객체지향 프로그래밍의 핵심 개념 중 하나이다. 객체지향 프로그래밍의 객체는 사용자에게 높은 수준의 작업 집합만 노출하고 작업의 내부 구현 내용은 숨겨야 한다는 말이 있다. 이 개념을 구현하는 추상화를 통해 사용자는 애플리케이션이 일을 수행하는 방법이 아니라 수행하는 일 자체에 집중할 수 있다.
즉, 내용을 노출하는 복잡성을 줄이고 코드의 재사용성을 높이며 코드 중복을 방지하고 낮은 결합도와 높은 응집도를 유지한다. 중요한 내용만 공개하여 애플리케이션의 보안과 재량권을 유지한다.
실생활의 예를 들면 이렇다. 차를 운전하는 사람이 있는데, 운전자는 각각의 페달이 무슨 일을 하는지, 핸들이 무슨 일을 하는지 알고 있지만, 페달과 핸들에 힘을 실어주는 차 내부의 메커니즘은 전혀 알지 못하는 경우가 많다. 이것이 추상화이다.
2. 추상화에 대한 코드 예제
•
운전자는 적절하게 페달을 이용하여 차의 속도를 높이거나 늦출 수 있다. 또한 바퀴 조종장치의 도움으로 좌회전과 우회전을 할 수도 있다. 이 모든 작업은 Car라는 이름의 인터페이스로 통합할 수 있다.
public interface Car {
public void speedUp();
public void slowDown();
public void turnRight();
public void turnLeft();
public String getCarType();
}
Java
복사
•
각 차량의 타입은 Car 인터페이스 구현에 정의된 동작의 내용을 제공하기 위해 메서드를 오버라이드 해야 한다. 이 구현 내용은 차를 운전하는 운전자에게 노출되지 않는다.
•
예를 들어 ElectricCar 클래스는 다음과 같이 나타낸다.
◦
이 클래스의 사용자는 구현 내용을 전혀 몰라도 public 메서드에 접근할 수 있다.
public class ElectricCar implements Car {
private final String carType;
public ElectricCar(String carType) {
this.carType = carType;
}
@Override
public void speedUp() {
System.out.println("Speed up the electric car");
}
@Override
public void slowDown() {
System.out.println("Slow down the electric car");
}
@Override
public void turnRight() {
System.out.println("Turn right the electric car");
}
@Override
public void turnLeft() {
System.out.println("Turn left the electric car");
}
@Override
public String getCarType() {
return this.carType;
}
}
Java
복사
public class PetrolCar implements Car {
private final String carType;
public PetrolCar(String carType) {
this.carType = carType;
}
@Override
public void speedUp() {
}
@Override
public void slowDown() {
}
@Override
public void turnRight() {
}
@Override
public void turnLeft() {
}
@Override
public String getCarType() {
return null;
}
}
Java
복사
•
최종 출력 결과는 다음과 같습니다.
public class Main {
public static void main(String[] args) {
Car electricCar = new ElectricCar("BMW");
Car petrolCar = new PetrolCar("Audi");
System.out.println("Driving the electric car: " + electricCar.getCarType() + "\n");
electricCar.speedUp();
electricCar.turnLeft();
electricCar.slowDown();
System.out.println("\n\nDriving the petrol car: " + petrolCar.getCarType() + "\n");
petrolCar.slowDown();
petrolCar.turnRight();
petrolCar.turnLeft();
}
}
== 출력 결과 ==
Speed up the electric car
Turn left the electric car
Slow down the electric car
Driving the petrol car: Audi
Slow down the petrol car
Turn right the petrol car
Turn left the petrol car
Java
복사