본문으로 건너뛰기
Python 기초집LESSON 17

상속, 캡슐화, 클래스 설계

난이도입문
예상 시간30분
선수지식이전 강의

17강. 상속, 캡슐화, 클래스 설계

1. 이번 강의에서 해결할 문제

JSON과 CSV 입력기가 서로 다른 호출법을 가지면 분석 코드가 파일 형식마다 분기합니다. 공통 계약을 만들고 구현 세부를 각 클래스 안에 둡니다.

2. 학습 목표

3. 핵심 개념

상속은 하위 클래스가 상위 타입의 계약을 만족할 때 사용합니다. Python의 _name은 내부 사용 의도를 알리는 관례이지 강제 접근 제어가 아닙니다. 데이터 보관만 필요하면 상속보다 합성이 단순할 수 있습니다.

4. 단계별 코드 예시

파일 경로: C:\dev\game-log-analyzer\battle_analyzer\readers.py

battle_analyzer/readers.py
from abc import ABC, abstractmethod
from pathlib import Path


class LogReader(ABC):
def __init__(self, path: Path):
self._path = path

@abstractmethod
def read(self):
"""전투 기록을 반환합니다."""

def source_name(self):
return self._path.name


class TextLogReader(LogReader):
def read(self):
return [
line.strip()
for line in self._path.read_text(encoding="utf-8").splitlines()
if line.strip()
]

파일 경로: C:\dev\game-log-analyzer\main.py

main.py
from pathlib import Path
from battle_analyzer.readers import TextLogReader

reader = TextLogReader(Path("data/battles.txt"))
print(reader.source_name(), reader.read())
PowerShell · 실행
.\.venv\Scripts\python.exe .\main.py

5. 코드가 동작하는 이유

ABC와 abstractmethod는 read()를 구현하지 않은 하위 클래스의 인스턴스 생성을 막습니다. 분석 코드는 구체적인 파일 처리 대신 read() 계약만 사용합니다. _path 변경 책임은 reader 내부에 둡니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

상속, 캡슐화, 클래스 설계 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“상속, 캡슐화, 클래스 설계” 기능을 확장하기 좋은 구조로 설명한 것은 무엇인가요?
  2. 문제 2‘코드 재사용만 위해 깊은 상속’ 상태에 관한 “상속, 캡슐화, 클래스 설계” 본문의 설명으로 가장 알맞은 것은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

17강. 상속, 캡슐화, 클래스 설계 미완료 상태