객체지향 모델의 추상화 (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

콘텐츠 사용 시 출처 표기 부탁 드리고, 댓글은 큰 힘이 됩니다^^