728x90
지난 글에서는 다형성에 대해 예제 코드와 함께 알아보았다.
이번에는 객체지향에 관한 마지막 내용을 정리해보고자 한다.
객체지향의 장점
1. 비용 절감
- 재사용 가능한 컴포넌트를 활용하여 개발 시간 감소
2. 소프트웨어 품질 향상
- 캡슐화 + 다형성 을 통한 높은 모듈화
- 시스템 간 결합도 감소
3. 유지보수 용이성
- 변경이 필요한 부분이 제한된다.
- 확장과 수정이 쉽다.
4. 설계와 구현의 연결성
- 분석 → 설계 → 코드로 자연스럽게 이어진다.

Abstract Class vs. Interface
Pure Virtual Function
virtual int getSalary() const = 0;
- 구현이 없는 함수
- 반드시 subclass에서 구현해야 함
Abstract Class (C++)
- 하나 이상의 pure virtual function 포함
- 객체 생성 불가
Interface (Java)
- 모든 함수가 추상 함수
- 구현 없이 "기능 정의"만 존재
구분 C++ Abstract ClassJava Interface
| 구현 포함 여부 | 가능 | 불가능 |
| 목적 | 공통 기능 + 구조 | 순수 규약 정의 |
| 키워드 | virtual | interface |
Interface 예제 – Autonomous Car API
이제 실제 산업 예제를 살펴보자.
자율주행 자동차 시스템에서는 다양한 제조사가 존재한다.
하지만 모든 차량을 동일한 방식으로 제어해야 한다.
이를 위해 공통 인터페이스(API)를 정의한다.
public interface OperateCar
{
int turn(...);
int changeLanes(...);
int turnAudioOn(...);
int turnAudioOff();
}
구현 클래스
public class OperateHyundaiSonata implements OperateCar
{
int turn(...) { ... }
}
public class OperateKiaK8 implements OperateCar
{
int turn(...) { ... }
}
728x90
- 외부 시스템은 OperateCar만 알고 있다.
- 내부 구현은 각 제조사가 자유롭게 구현 가능하다.
구현이 달라도 인터페이스만 같으면 문제 없다.
완벽한 다형성 구조이다.
Interface 설계 원칙
마지막으로 중요한 설계 원칙을 정리해보자.
1. 최소화 (Minimality)
- 필요한 기능만 외부에 공개한다.
- 나머지는 모두 숨긴다.
2. 무변경 (Stability)
- 외부에 공개된 인터페이스는 변경하지 않도록 설계한다.
- 내부 구현은 자유롭게 수정이 가능하다.
다형성은 단순한 개념처럼 보이지만,
실제 시스템 설계에서는 의존성을 줄이는 가장 강력한 도구라고 볼 수 있다.
다음 글에서는 모델링에 대해서 정리하고자 한다.
728x90
'CS > Software Engineering' 카테고리의 다른 글
| [소프트웨어공학/Software Engineering] 시스템 설계와 구조 - system design and architecture (0) | 2026.06.02 |
|---|---|
| [소프트웨어공학/Software Engineering] 형상 관리(CM: Configuration Management)란? (0) | 2026.04.15 |
| [소프트웨어공학/Software Engineering] Polymorphism 다형성 (0) | 2026.04.10 |
| [소프트웨어공학/Software Engineering] 객체 지향이란? (2) | 2026.04.09 |
| [소프트웨어공학/Software Engineering] 애자일 소프트웨어 개발 (0) | 2026.04.07 |