문서 읽는 데 22분 · 7강 · 1과목 · 소프트웨어 설계

객체지향과 SOLID 원칙

목차 15
전체 59강 중 7강 · 1과목 · 소프트웨어 설계

좋은 객체지향 설계가 공통으로 지키는 5가지 원칙 SOLID가 이 강의 중심. 좋은 설계의 황금률(결합도↓·응집도↑)을 코드 차원에서 풀어낸 헌법. 매 회차 1~3문항.

핵심 암기 5종: SOLID · 한글 보조 단개리인의 · OCP 확열수닫 · LSP 자대부 · DIP 추의


객체지향 기초

객체지향이란 ·개념 정의·

[정의] 프로그램을 여러 개의 독립된 객체(Object)들의 협력으로 보는 설계 패러다임.

[분류]

용어 정의
객체(Object) 데이터 + 그 데이터를 다루는 기능을 한 덩어리로 묶음
클래스(Class) 객체를 찍어내는 설계도(틀)
메시지(Message) 객체끼리 주고받는 요청·응답

🎯 빈출 객체·클래스·메시지 세 용어가 함께 등장하면 객체지향 보기. 간헐.

객체지향 4대 특성 ·캡상다추·

[분류]

특성 영문 한 줄 정의
캡슐화 Encapsulation 데이터+기능을 묶고 외부엔 필요한 것만 공개
상속 Inheritance 부모 클래스의 속성·기능을 자식이 물려받음
다형성 Polymorphism 같은 메시지에 객체마다 다르게 반응
추상화 Abstraction 공통 속성만 뽑아 본질을 남기고 세부는 감춤

🔑 암기 캡상다추 (캡슐화·상속·다형성·추상화) ⚠️ 함정 4대 특성(캡상다추, 4개)과 SOLID 5원칙(단개리인의, 5개)은 다른 개념. 'SOLID 5원칙'에 캡상다추가 끼면 함정.

SOLID 개요 ·5원칙 한눈에·

[정의] 로버트 마틴(Robert C. Martin, 'Uncle Bob')이 2000년대 초 정리한 객체지향 설계 5원칙. 5개 원칙 영문 첫 글자를 모아 'SOLID'(견고한).

[분류]

약자 원칙(한글) 한 줄 정의 핵심 키워드
SRP 단일 책임 클래스는 단 하나의 책임만 한 책임
OCP 개방-폐쇄 확장 열림·수정 닫힘 확열수닫
LSP 리스코프 치환 자식이 부모를 완전히 대체 자대부
ISP 인터페이스 분리 인터페이스를 작게 쪼갬 쪼개기
DIP 의존 역전 구체가 아닌 추상에 의존 추의

🔑 암기 SOLID / 단개리인의 (단일책임·개방폐쇄·리스코프치환·인터페이스분리·의존역전) 🎯 빈출 'SOLID를 정립한 사람?'(로버트 마틴) 단답·약자 매칭. 그중 OCP·LSP 정의 매칭은 거의 매회 1순위.


SOLID 5원칙

SRP — 단일 책임 ·Single Responsibility·

[정의] 하나의 클래스는 단 하나의 책임만 가져야 한다. = 클래스가 변경되어야 할 이유는 단 하나여야 한다.

🔑 암기 한 클래스 = 한 책임 🎯 빈출 '하나의 책임'·'변경 이유가 하나' → SRP. 모듈의 기능적 응집도를 클래스 차원에서 실현한 것. ⚠️ 함정 '인터페이스를 쪼갠다'는 SRP가 아니라 ISP. SRP = 책임(클래스 차원), ISP = 메서드(인터페이스 차원). 💡 보충 식당에서 한 명이 요리·서빙·계산을 다 하면 점심에 사고 — 한 사람 한 책임.

OCP — 개방-폐쇄 ·1순위 빈출·

[정의] 소프트웨어 요소는 확장에는 열려 있고, 수정에는 닫혀 있어야 한다(Open for extension, Closed for modification). 새 기능 추가 시 기존 코드는 안 건드리고 새 코드만 더한다.

🔑 암기 확열수닫 (확장 열림·수정 닫힘) 🎯 빈출 정의·빈칸·영문 매칭. 매 회차 거의 그대로 출제. 인터페이스를 미리 두고 새 구현 클래스만 추가하는 게 코드 모습. ⚠️ 함정 '수정 열림·확장 닫힘'으로 뒤집기 단골. 확장 = 열림(O), 수정 = 닫힘(C). 💡 보충 모듈러 책장·멀티탭 — 칸/탭을 끼워 확장, 기존은 안 부순다. 팩토리 메서드·전략·템플릿 메서드 패턴이 OCP 도구.

LSP — 리스코프 치환 ·1순위 빈출·

[정의] 자식 타입은 언제나 부모 타입을 완전히 대체할 수 있어야 한다. 부모 자리에 자식을 넣어도 프로그램이 정상 동작. 1987년 바버라 리스코프(Barbara Liskov) 정립.

🔑 암기 자대부 (자식이 부모를 대체) 🎯 빈출 '상위를 하위로 치환·대체' 정의 매칭 + '바버라 리스코프' 인물 매칭. 매 회차 1순위. ⚠️ 함정 단순 '상속 잘하라'가 아니라 '자식이 부모의 약속(계약)을 깨면 안 됨'. LSP를 잘 지키면 OCP도 따라온다. 💡 보충 Bird.fly()를 상속한 Penguin이 '못 난다'며 예외를 던지면 LSP 위반.

ISP — 인터페이스 분리 ·Interface Segregation·

[정의] 클라이언트는 자신이 사용하지 않는 메서드에 의존하면 안 된다. = 큰 인터페이스 하나보다 작게 쪼갠 여러 인터페이스가 낫다.

🔑 암기 쪼개기 — 인터페이스를 용도별로 잘게 분리 🎯 빈출 '사용하지 않는 메서드에 의존 X' 정의 매칭. SRP의 인터페이스 버전. ⚠️ 함정 SRP와 헷갈림 — SRP = 책임 분리(클래스), ISP = 메서드 분리(인터페이스). 가짜 풀네임 'Independence·Integration' 함정 → 정답은 Segregation. 💡 보충 만능 리모컨(버튼 100개) → 전용 리모컨(필요한 버튼만).

DIP — 의존 역전 ·Dependency Inversion·

[정의] 고수준 모듈은 저수준 모듈에 의존하면 안 되고, 둘 다 추상(인터페이스)에 의존해야 한다. = 구체 클래스가 아닌 추상에 의존하라.

🔑 암기 추의 (추상에 의존) 🎯 빈출 '구체가 아닌 추상에 의존'·'고수준·저수준 모두 추상에 의존' 정의 매칭. ⚠️ 함정 '역전'은 방향만 바꾸는 게 아니라 '추상에 의존하는 구조'. 가짜 풀네임 'Distribution' 함정 → 정답은 Dependency Inversion. 💡 보충 콘센트·USB 표준 — 가전도 충전기도 표준(추상)에 의존. OrderService가 IOrderRepository(추상)에만 의존하면 DB 교체 자유. 스프링 IoC(제어 역전) 컨테이너가 DIP의 대표 실현.


패턴과 명칭 함정

디자인 패턴 ↔ SOLID ·패턴은 도구·

[비교]

디자인 패턴 실현 원칙
팩토리 메서드 OCP
추상 팩토리 OCP·DIP
전략(Strategy) OCP·DIP
템플릿 메서드 OCP·LSP
어댑터 DIP·ISP
데코레이터 OCP·SRP
옵저버 OCP·DIP

🎯 빈출 '전략 패턴이 실현하는 SOLID 원칙?' 통합 문제. 간헐. 💡 보충 패턴은 도구, SOLID는 원칙 — 패턴이 SOLID를 코드로 풀어낸다. (GoF 패턴 23종은 6강.)

명칭 헷갈림 함정 차단 ·합격 한 끗·

[비교] 이름이 비슷한 '원칙·원리·특성' 모음

이름 두문자 영역
객체지향 설계 5원칙 SOLID / 단개리인의 오늘의 주제
공통 모듈 명세 5원칙 정명완일추 모듈 명세(5강)
요구사항 명세 6원리 명완검일수추 요구사항 문서화(2강)
객체지향 4대 특성 캡상다추 특성(4개)
UI 설계 4원칙 직유학유 화면 설계(4강)

🔑 암기 SOLID = 단개리인의 다섯 개뿐. 그 외 항목이 'SOLID 5원칙' 보기에 끼면 정답 후보. 🎯 빈출 'SOLID에 포함되지 않는 것?' 소거형. 정명완일추·캡상다추 끼워 넣기 단골.


기출 다지기

[기출 1 출제] 다음 설명에 해당하는 객체지향 설계 원칙은? (빈칸형)

소프트웨어 요소는 ( ㉠ )에는 열려 있어야 하고, ( ㉡ )에는 닫혀 있어야 한다. 즉, 새 기능을 추가할 때 기존 코드를 수정하지 않고 추가만으로 가능해야 한다.

  • ① SRP (단일 책임 원칙)
  • ② OCP (개방-폐쇄 원칙)
  • ③ LSP (리스코프 치환 원칙)
  • ④ ISP (인터페이스 분리 원칙)
정답 및 해설 보기

정답 ②

㉠ 확장 / ㉡ 수정. '확장 열림·수정 닫힘' = OCP 표준 정의.

선지 판정 근거
① SRP 오답 '한 클래스 = 한 책임'. 확장·수정과 무관
② OCP 정답 확열수닫
③ LSP 오답 '자식이 부모 대체'
④ ISP 오답 '인터페이스 쪼개기'

🔑 OCP = 확열수닫. 영문 'Open for extension, Closed for modification'까지 한 세트.

[기출 2 출제] 다음 설명에 해당하는 객체지향 설계 원칙은? (설명→용어)

부모 타입의 객체를 자식 타입의 객체로 치환해도 프로그램의 정확성이 깨지지 않아야 한다. 자식 타입은 언제나 부모 타입을 완전히 대체할 수 있어야 한다.

  • ① 단일 책임 원칙 (SRP)
  • ② 개방-폐쇄 원칙 (OCP)
  • ③ 리스코프 치환 원칙 (LSP)
  • ④ 의존 역전 원칙 (DIP)
정답 및 해설 보기

정답 ③

선지 판정 근거
① SRP 오답 '한 책임'. 치환과 무관
② OCP 오답 '확열수닫'. 치환과 다른 결
③ LSP 정답 '치환·대체'가 핵심. 1987년 바버라 리스코프
④ DIP 오답 '추상에 의존'

🔑 치환·대체·substitution이 보이면 LSP(자대부).

[기출 3 출제] SOLID 중 알파벳 약자와 원칙명이 잘못 짝지어진 것은? (짝짓기 오류형)

  • ① S — Single Responsibility Principle (단일 책임 원칙)
  • ② O — Open-Closed Principle (개방-폐쇄 원칙)
  • ③ L — Liskov Substitution Principle (리스코프 치환 원칙)
  • ④ D — Distribution Independence Principle (분배 독립 원칙)
정답 및 해설 보기

정답 ④

D는 Dependency Inversion Principle(의존 역전)이다. 'Distribution Independence'는 존재하지 않는 가짜 용어.

약자 정확한 영문 한글
S Single Responsibility 단일 책임
O Open-Closed 개방-폐쇄
L Liskov Substitution 리스코프 치환
I Interface Segregation 인터페이스 분리
D Dependency Inversion 의존 역전

🔑 단개리인의. 가짜 풀네임 함정 — I = Interface Segregation, D = Dependency Inversion.

[기출 4 출제] 다음 설명에 해당하는 객체지향 설계 원칙은? (설명→용어)

하나의 클래스는 단 하나의 책임만 가져야 한다. 클래스가 변경되어야 할 이유는 오직 하나여야 한다.

  • ① 단일 책임 원칙 (SRP)
  • ② 개방-폐쇄 원칙 (OCP)
  • ③ 인터페이스 분리 원칙 (ISP)
  • ④ 의존 역전 원칙 (DIP)
정답 및 해설 보기

정답 ①

'단 하나의 책임'·'변경 이유가 하나' = SRP. 한 클래스 = 한 책임.

선지 판정 근거
① SRP 정답 책임 차원의 분리
② OCP 오답 '확열수닫'
③ ISP 오답 '분리' 단어로 헷갈림. ISP는 인터페이스(메서드) 차원
④ DIP 오답 '추상에 의존'

🔑 SRP = 책임 분리(클래스), ISP = 메서드 분리(인터페이스). '책임'이 보이면 SRP.

[기출 5 출제] 의존 역전 원칙(DIP)에 대한 설명과 거리가 가장 먼 것은? (거리형)

  • ① 고수준 모듈은 저수준 모듈에 의존해서는 안 된다
  • ② 고수준 모듈과 저수준 모듈 모두 추상에 의존해야 한다
  • ③ 추상은 세부 사항(구체 클래스)에 의존해서는 안 된다
  • ④ 하위 클래스는 항상 상위 클래스를 완전히 대체할 수 있어야 한다
정답 및 해설 보기

정답 ④

④는 LSP(자대부)의 정의 — DIP와 거리가 가장 멀다.

선지 어떤 원칙?
① 고수준→저수준 의존 금지 DIP
② 둘 다 추상에 의존 DIP
③ 추상→구체 의존 금지 DIP
④ 하위가 상위 대체 LSP(DIP 아님)

🔑 DIP 보기엔 '고수준·저수준·추상' 세 단어가 함께. '치환·대체'가 보이면 LSP.

[기출 6 출제] 객체지향 설계 5원칙(SOLID)에 포함되지 않는 것은? (소거형)

  • ① 단일 책임 원칙 (SRP)
  • ② 인터페이스 분리 원칙 (ISP)
  • ③ 의존 역전 원칙 (DIP)
  • ④ 공통 모듈 명세 5원칙 (정명완일추)
정답 및 해설 보기

정답 ④

정명완일추(정확·명확·완전·일관·추적)는 공통 모듈 명세 5원칙(5강)이다. SOLID와 이름만 비슷하고 영역이 다르다.

두문자 정체
단개리인의 객체지향 설계 5원칙(SOLID)
정명완일추 공통 모듈 명세 5원칙(5강)
명완검일수추 요구사항 명세 6원리(2강)

🔑 SOLID = 단개리인의 다섯뿐. 캡상다추(4대 특성)·명완검일수추도 끼면 정답 후보.

[기출 7 출제] 객체지향 설계 원칙(SOLID)에 대한 설명으로 옳지 않은 것은? (부정형)

  • ① SRP — 클래스는 단 하나의 책임만 가져야 한다
  • ② OCP — 확장에는 열려 있고 수정에는 닫혀 있어야 한다
  • ③ LSP — 클라이언트는 자신이 사용하지 않는 메서드에 의존하면 안 된다
  • ④ DIP — 고수준 모듈과 저수준 모듈 모두 추상에 의존해야 한다
정답 및 해설 보기

정답 ③

③은 ISP(인터페이스 분리)의 정의다. LSP는 '자식이 부모를 완전히 대체(자대부)'.

선지 정확 여부 정확한 매칭
① SRP 정확 한 책임
② OCP 정확 확열수닫
③ LSP 오류 '사용하지 않는 메서드'는 ISP 정의
④ DIP 정확 추상에 의존

🔑 SRP=한책임 / OCP=확열수닫 / LSP=자대부 / ISP=쪼개기 / DIP=추의. 자리 바꾸기 함정은 이 다섯 줄로 적발.


한 장 요약

약자 한글 한 줄 정의 핵심 키워드
SRP 단일 책임 한 클래스 = 한 책임 한 책임
OCP 개방-폐쇄 확장 열림·수정 닫힘 확열수닫
LSP 리스코프 치환 자식이 부모를 대체 자대부
ISP 인터페이스 분리 인터페이스 잘게 쪼개기 쪼개기
DIP 의존 역전 추상에 의존 추의
헷갈리는 짝 한 단어 차이
SRP vs ISP 책임(클래스) vs 메서드(인터페이스)
LSP vs DIP 치환·대체 vs 추상에 의존
SOLID vs 정명완일추 객체지향 5원칙 vs 공통 모듈 명세 5원칙
SOLID vs 캡상다추 설계 5원칙 vs 4대 특성

🎯 합격 한 끗: 단개리인의 · 확열수닫 · 자대부 · 추의 네 줄과 명칭 함정(SOLID ≠ 정명완일추·캡상다추) 거르기만 손에 쥐면 7강은 끝. SOLID는 결합도↓·응집도↑를 코드 차원에서 푼 헌법(5강과 한 줄로 연결).

전체 목록 필기 이론

합격까지

정처기, 혼자 막막하다면

초개인화 학습앱 Klue와 에듀윌 온라인강의로 합격까지 이어가세요.