CS/Software Engineering

[소프트웨어공학/Software Engineering] 객체지향과 인터페이스

binaryroot 2026. 4. 10. 12:07
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