개요
상속 (Inheritance)
기존 클래스의 속성과 메서드를 물려받아 새로운 하위 클래스를 생성하는 것
상속이 필요한 이유
코드 재사용
상속을 통해 기존 클래스의 속성과 메서드를 재사용할 수 있음
새로운 클래스를 작성할 때 기존 클래스의 기능을 그대로 활용할 수 있으며, 중복된 코드를 줄일 수 있음
계층 구조
상속을 통해 클래스들 간의 계층 구조를 형성할 수 있음
부모 클래스와 자식 클래스 간의 관계를 표현하고, 더 구체적인 클래스를 만들 수 있음
유지 보수의 용이성
상속을 통해 기존 클래스의 수정이 필요한 경우, 해당 클래스만 수정하면 되므로 유지 보수가 용이해짐
코드의 일관성을 유지하고, 수정이 필요한 범위를 최소화할 수 있음
상속 없이 구현 하는 경우 (1/2)
상속 없이 구현 하는 경우 (2/2)
super()
다중 상속
다중 상속 정의
둘 이상의 상위 클래스로부터 여러 행동이나 특징을 상속받을 수 있는 것
상속받은 모든 클래스의 요소를 활용 가능함
중복된 속성이나 메서드가 있는 경우 상속 순서에 의해 결정됨
중복된 속성이나 매서드가 있는 경우 상속 순서대로 결정된다!
파이썬에서의 해결책
MRO(Method Resolution Order) 알고리즘을 사용하여 클래스 목록을 생성
부모 클래스로부터 상속된 속성들의 검색을 깊이 우선으로, 왼쪽에서 오른쪽으로, 계층 구조에서 겹치는 같은 클래스를 두 번 검색하지 않음
그래서, 속성이 D 에서 발견되지 않으면, B 에서 찾고, 거기에서도 발견되지 않으면, C 에서 찾고, 이런 식으로 진행됨
MRO (Method Resolution Order)
super()
부모 클래스 객체를 반환하는 내장 함수
다중 상속 시 MRO를 기반으로 현재 클래스가 상속하는 모든 부모 클래스 중 다음에 호출될 메서드를 결정하여 자동으로 호출
mro() 메서드
해당 인스턴스의 클래스가 어떤 부모 클래스를 가지는지 확인하는 메서드
기존의 인스턴스 -> 클래스 순으로 이름 공간을 탐색하는 과정에서 상속 관계에 있으면 인스턴스 -> 자식 클래스 -> 부모 클래스로 확장
super의 2 가지 사용 사례
단일 상속 구조
명시적으로 이름을 지정하지 않고 부모 클래스를 참조할 수 있으므로, 코드를 더 유지 관리하기 쉽게 만들 수 있음
클래스 이름이 변경되거나 부모 클래스가 교체되어도 super()를 사용하면 코드 수정이 더 적게 필요
다중 상속 구조
MRO를 따른 메서드 호출
복잡한 다중 상속 구조에서 발생할 수 있는 문제를 방지
MRO 가 필요한 이유
부모 클래스들이 여러 번 액세스 되지 않도록, 각 클래스에서 지정된 왼쪽에서 오른쪽으로 가는 순서를 보존하고, 각 부모를 오직 한 번만 출력하고, 부모들의 우선순위에 영향을 주지 않으면서 서브 클래스를 만드는 단조적인 구조 형성
프로그래밍 언어의 신뢰성 있고 확장성 있는 클래스를 설계할 수 있도록 도움
클래스 간의 메서드 호출 순서가 예측 가능하게 유지되며, 코드의 재사용성과 유지보수성이 향상
디버깅
버그 (bug)
소프트웨어에서 발생하는 오류 또는 결함 프로그램의 예상된 동작과 실제 동작 사이의 불일치
버그의 기원
최초의 버그는 1945년 프로그래밍 언어의 일종인 코볼 발명자 그레이스 호퍼가 발견
역사상 최초의 버그는 mark 2 라는 컴퓨터 회로에 벌레인 나방이 들어가 합선을 일으켜 비정상적으로 동작한 것을 기록한 것
버그라는 용어는 이전부터 사용되어 왔지만 이 사건을 계기로 컴퓨터 시스템에서 발생하는 오류 또는 결함을 지칭하는 용어로 널리 사용되기 시작
디버깅 (Debugging)
소프트웨어에서 발생하는 버그를 찾아내고 수정하는 과정
프로그램의 오작동 원인을 식별하여 수정하는 작업
디버깅 방법
print 함수 활용
개발 환경(text editor, IDE) 등에서 제공하는 기능 활용
Python tutor 활용 (단순 파이썬 코드인 경우)
뇌 컴파일, 눈 디버깅 등
에러 (Error)
프로그램 실행 중에 발생하는 예외 상황
파이썬의 에러 유형
문법 에러 (Syntax Error)
예외 (Exception)
예외 (Exception)
프로그램 실행 중에 감지되는 에러
내장 예외 (Built-in Exceptions)
예외 상황을 나타내는 예외 클래스들
파이썬에서 이미 정의되어 있으며, 특정 예외 상황에 대한 처리를 위해 사용
참고 문서 : https://docs.python.org/ko/3/library/exceptions.html#ValueError
try 와 except
파이썬에서는 try 문과 except 절을 사용하여 예외 처리
try-except 구조
try 블록 안에는 예외가 발생할 수 있는 코드를 작성
except 블록 안에는 예외가 발생했을 때 처리할 코드를 작성
예외가 발생하면 프로그램 흐름은 try 블록을 빠져나와 해당 예외에 대응하는 except 블록으로 이동
Base Exception
모든 예외 상황들을 아우르는 예외들의 Class
as 키워드
개요
예외처리와 값 검사에 대한 2가지 접근 방식
EAFP
LBYL
EAFP (“Easier to Ask for Forgiveness than Permission”)
예외처리를 중심으로 코드를 작성하는 접근 방식 (try-except)
LBYL (“Look Before You Leap”)
값 검사를 중심으로 코드를 작성하는 접근 방식 (if-else)