현재 선택한 정보처리 과정

정보처리기사 필기 이론 학습

이론 목록으로 돌아가기

객체지향 핵심과 SOLID·설계 계약

객체지향의 네 특성과 오버로딩·오버라이딩, SOLID 원칙의 적용 목적을 정리한다.

예상 읽기 3

객체지향의 기본 요소

  • 객체(Object): 식별 가능한 상태와 행동을 가진 실행 단위
  • 클래스(Class): 공통 속성과 연산을 정의한 설계
  • 인스턴스(Instance): 클래스로부터 생성된 실제 객체
  • 속성(Attribute): 객체의 상태를 나타내는 데이터
  • 메서드(Method): 객체가 수행하는 구체적 연산
  • 메시지(Message): 다른 객체에 책임 수행을 요청하는 상호작용

객체지향 설계는 데이터만 묶는 것이 아니라 책임과 협력을 분명히 하는 것이 중요하다.

객체지향의 네 특성

특성핵심 의미
추상화필요한 본질만 모델링하고 불필요한 세부를 감춤
캡슐화상태와 행동을 하나의 경계에 묶고 올바른 변경 경로 제공
상속상위 클래스의 특성과 동작을 하위 클래스가 물려받아 확장
다형성같은 메시지·인터페이스에 객체별로 다른 동작을 수행

정보 은닉은 외부가 알 필요 없는 구현 결정을 감추는 설계 원리다. 캡슐화는 이를 구현하는 데 도움을 주지만 필드를 private으로 선언하는 것만으로 좋은 설계가 완성되는 것은 아니다.

오버로딩과 오버라이딩

구분오버로딩(Overloading)오버라이딩(Overriding)
의미같은 이름의 연산을 매개변수 형태에 따라 여러 개 정의하위 클래스가 상위 클래스의 메서드를 재정의
상속 필요필수 아님일반적으로 필요
선택 기준호출 시그니처실제 객체의 재정의 메서드
관련 다형성정적·컴파일 시점 다형성동적·실행 시점 다형성

반환형만 다르게 한 동일 매개변수 메서드는 일반적으로 오버로딩으로 구분되지 않는다.

상속과 합성

  • 상속: “~은 ~이다(is-a)”라는 일반화 관계와 치환 가능성이 분명할 때 적합
  • 합성: 다른 객체를 구성요소로 포함하고 역할을 위임하는 “가지고 있다(has-a)” 관계

상속은 강한 결합을 만들 수 있으므로 단순 코드 재사용만을 목적으로 남용하지 않는다. 실행 중 역할 교체와 독립 변경이 중요하면 합성·위임이 유리할 수 있다.

SOLID 원칙

객체지향·SOLID 요약도를 설명하는 교육용 도식
객체지향·SOLID 요약도를 설명하는 교육용 도식

객체지향·SOLID 요약도

SRP: 단일 책임 원칙

클래스·모듈이 하나의 응집된 책임과 변경 이유를 갖게 한다. 메서드 수가 하나여야 한다는 뜻은 아니다.

OCP: 개방-폐쇄 원칙

확장에는 열려 있고 기존 코드의 불필요한 수정에는 닫히도록 안정된 추상화 지점을 둔다. 어떤 변경에도 코드를 절대 수정하지 않는다는 뜻은 아니다.

LSP: 리스코프 치환 원칙

하위 타입 객체가 상위 타입 객체를 대신해도 프로그램의 기대되는 성질이 깨지지 않아야 한다. 문법적으로 상속했다는 사실만으로 자동 충족되지 않는다.

ISP: 인터페이스 분리 원칙

클라이언트가 사용하지 않는 기능에 의존하지 않도록 목적별로 인터페이스를 분리한다. 무조건 메서드 하나짜리 인터페이스를 만들라는 뜻은 아니다.

DIP: 의존성 역전 원칙

상위 정책과 하위 구현이 모두 구체 구현보다 추상화에 의존하도록 한다. 의존성 주입(DI)은 이를 구현하는 한 방법이지 원칙 자체와 동일하지 않다.

인터페이스 계약의 기본

객체 간 인터페이스에는 입력, 결과, 오류 조건, 상태 변경을 명확히 한다. 이 수준의 계약은 객체를 안전하게 치환하고 시험하는 데 도움을 준다. 사전·사후·불변 조건의 기본 정의와 책임을 구분하되, 계약 상속의 형식 규칙과 정형 증명은 다루지 않는다.