X

객체지향 모델의 추상화 (Abstraction)

1. 핵심 개념 모델링, 객체지향 모델의 추상화의 개념 및 목적

(1) 추상화 (Abstraction)의 개념

개념도 개념
복잡한 시스템의 핵심 기능을 모델링하고, 불필요 세부 사항은 감추어 단순화하는 객체지향 모델의 특성

(2) 추상화의 목적

핵심에 집중 – 복잡한 구현 세부 사항을 숨기고, 중요한 인터페이스만을 노출하여 사용자가 쉽게 이해
유연한 설계 – 내부 구현이 변경되더라도 외부 인터페이스는 그대로 유지하여, 시스템 확장 및 유지보수 용이
재사용성 향상 – 공통 인터페이스나 추상 클래스 기반 여러 구체적인 클래스를 생성하여 코드 재사용성 향상
  • 추상화는 추상 클래스와 인터페이스 도구를 사용하여 추상 메서드로 공통의 형식을 만들고, 캡슐화와 정보 은닉을 통해 핵심 인터페이스만 외부에 공개

 

2. 객체지향 모델의 추상화 원리 및 구성 요소

(1) 추상화의 원리

(2) 추상화의 구성 요소

구성 요소 역할
추상 클래스
(Abstract Class)
– 상속 관계에서 부모 클래스의 역할로 추상 메서드 포함
– 여러 클래스들 간 공통 특징 그룹화, 가이드라인 제시
– 직접 객체 생성 불가, 자식 클래스에서 특정 메서드 구현
추상 메서드
(Abstract Method)
– 선언부만 있고 구현부(몸체)가 없는 메서드
– 메서드의 이름, 매개변수, 반환 타입만 정의
– 실제 기능은 이 메서드를 상속받는 하위 클래스에서 결정
인터페이스
(Interface)
– 클래스 동작을 규정하는 설계도 역할로 높은 추상화
– 불필요한 내부 구현 상세를 숨기고 필요한 기능만 노출
– 서로 다른 클래스간 동일 규격 통신하여 결합도 최소화
  • 객체지향 프로그래밍에서는 유연하고 확장성 있는 프로그램을 설계하기 위해 역할과 구현을 분리, 이 중 역할에 해당하는 부분이 인터페이스를 통해 추상화

 

3. 객체지향 모델의 추상화 코드 사례

abstract class Vehicle {
  // start, stop 메서드 추상화
  public abstract void start();
  public abstract void stop();
} 

class Car extends Vehicle {
  // start 메서드 오버라이드
  @Override
  public void start() {...}

  // stop 메서드 오버라이드
  @Override
  public void stop() {...}
} 

class Bike extends Vehicle {
  // start 메서드 오버라이드
  @Override
  public void start() {...}

  // stop 메서드 오버라이드
  @Override
  public void stop() {...}
} 

public class Dori {
  public static void main(String[] args) {
    // Car, Bike 객체 생성
    Vehicle car = new Car();
    Vehicle Bike = new Bike();

    // Car 객체의 start, stop 메서드 수행
    car.start();
    car.stop();

    // Bike 객체의 start, stop 메서드 수행
    Bike.start();
    Bike.stop();
  }
} 
  • 추상화를 제대로 활용하기 위해서는 클래스 내 응집도를 높이고 결합도를 최소화하기 위해 어떤 기능을 공통화할지, 인터페이스를 어떻게 설계할지 고민 필요

 
[참고]

  • 리프레임, 최은만, 객체지향 설계와 패턴 워크북, 2024.2
도리: