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