파이썬을 기반으로 작성되었습니다
상속
부모의 메소드와 변수를 그대로 받아 사용할수있다. 이를 활용하면 코드 중복을 줄일 수있다.
상속은 아래와 같이 가능하다.
class Cashier(Employee):
pass
help 함수를 통해 calss를 자세히 볼 수있다.
파이썬에서 모든 class는 자동으로 Builtins.object Class를 상속받는다.
mro 메소드
해당 인스턴스의 클래스가 어떤 부모 클래스를 가지는 지 보여준다.
⇒ 클래스가 상속받는 부모 클래스들이 순서대로 담긴 리스트를 리턴
들여쓰기 에러인 IndetationError를 출력하면 다음과 같이 나온다
print(IndentationError.mro())
[<class 'IndentationError'>, <class 'SyntaxError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>]
isinstance 함수
어떤 인스턴스가 주어진 클래스의 인스턴스인지를 알려준다.
print(isinstance(young, Cashier))
위와 같이 검사할 인스턴스 이름과 기준 클래스를 넣으면 검사하는 인스턴스와 기준 클래스가 일치하는 지에 대한 불린값이 출력된다.
issubclass 함수
어떤 클래스가 다른 클래스의 자식 클래스인지를 알려준다.
오버라이딩
부모로 부터 물려받은 걸 자기에 맞게 덮어써서 수정하는 것
자식 클래스에서 물려받은 메소드 → 같은 이름의 메소드를 내용을 바꿔 정의
super()
부모 클래스의 메소드를 사용하고 싶을 때 쓰는 함수
부모 클래스의 변수를 덮어 씌우려면 그냥 자식에서 같은 이름변수를 만들고 할당하면된다.
mro를 통해 메소드를 찾는 순서를 알수잇다. mro에 나온 순서대로 메소드를 찾고 오버라이딩한다.
상속을 사용하면 더 적은 코드로 새로운 클래스들을 생성할 수 있다.
다중상속
두 가지의 부모클래스를 상속받을 수 있다.
단점 : 이때 super로 부모에있는 코드를 가져오게 되면 어떤걸 가져와야할지 모른다…
⇒ super말고 클래스명으로 가져와야한다.
다중 상속 문제 해결법
- 부모클래스끼리 같은 이름의 메소드를 갖지 않도록하기
- 같은 이름의 메소드는 자식클래스에서 오버라이딩
다형성
- 여러가지 형태를 갖는 성질
- 하나의 변수가 다른 여러클래스의 인스턴스를 가르킬 수 있는 성질
- 둘다 같은 메소드나 변수를 들고있어야만 가능
다형성의 상속
어떤 변수가 여러 종류의 인스턴스를 가르키게 해서 다형성을 가지게 할수잇다.
⇒ 하지만 호출하는 인스턴스에 해당 메소드가 존재해야하만 다형성이 성립된다.
→이러한 문제를 방지 하기 위해선 어떤 클래스의 인스턴스가 맞는지 미리 확인해야한다.
⇒ isinstance로 이를 확인 할 수 있고 상속을 활용하면 한번만 써서 확인 할 수 있다.
자식클래스가 부모클래스의 메소드를 오버라이딩하지 않으면 문제가 생길수있다.(부모클래스 메소드에 아무 내용도 없을때!)
부모클래스의 자식클래스가 메소드도 강제로 오버라이딩 하게 하려면 어떻게 해야할까
→ 추상 클래스를 사용하자!!!
추상클래스
여러클래스들의 공통점을 추상화 해서 모아 놓은 클래스
추상 클래스는 부모클래스의 자식클래스가 메소드도 강제로 오버라이딩하게 만든다.
추상클래스로는 인스턴스를 만들수없다.
파이썬에서 추상클래스 조건
- ABC를 상속받는다
- 2개이상의 추상메소드를 지닌다.
추상메소드
- 오버라이딩을 자식클래스에게 강제할 수 있다.
추상클래스 쓰는법
form abc import ABC,abstractmethod
class Animal(ABC):
@abstractmethod
def eat(self)->int:
pass
@abstractmethod
def sleep(self)->float:
pass
타입 힌팅을 통해 어떤 타입의 리턴값인지 명시해준다.
추상클래스의 추상화
추상 클래스는 서로 관련있는 클래스들이 공통부분을 묶어서 추상화한다.
⇒ 동물을 나타내는 클래스라면 가질수밖에 없는 공통점을 Animal 클래스로 추상화한것
이렇게 되면 해당 추상클래스 밑의 자식 클래스까지 고려할 필요없이 추상 클래스의 메소드만을 고려하여 코드를 작성할수있다.
마찬가지로 추상 클래스를 사용하여 개발할 때 타입힌팅을 사용하자
추상클래스 좀더 알아보기
- 추상클래스의 일반메소드를 사용가능하다 → 반드시 오버라이딩 할필요 없이 그대로 사용해도 된다.
- 추상메소드에도 내용 추가가 가능하다. → 모든 클래스가 공통으로 가져야할 내용을 적어주자
- 자식클래스가 특정 변수를 갖도록 유도하기 → 변수의 getter setter 메소드를 추상메소드화 하여 해당 변수를 유도 할수있다.
추상클래스 다중상속
- 추상클래스 다중 상속은 일반적으로 많이 사용한다.
- 다중상속 받는 부모추상 클래스들이 추상 메소드로만 이뤄져 있으면 아무 문제 없이 다중 상속 받을수있다.
- 다중 상속 받는 부모 추상 클래스들간에 이름이 겹치는 일반 메소드가 있으면 일반 클래스를 다중 상속 받을때와 동일한 문제가 생길수있다.
다형성의 예시 (변수 함수)
- 옵셔널 파라미터 (무조건 맨뒤에 작성)
- 파라미터 이름 명시
- 개수가 확정되지 않은 파라미터
코딩스타일
파이썬은 EAFP 스타일을 주로 사용한다.
LBYL : 어떤 작업을 수행하기 전에 그작업을 수행해도 괜찮을지 확인
EAFP : 일단 먼저 빨리 실행하고 문제가 생기면 처리
'💻 CS' 카테고리의 다른 글
객체 지향 프로그래밍 _ SOLID (0) | 2024.01.21 |
---|---|
객체 지향 프로그래밍 (OOP) _ 추상화 & 캡슐화 (0) | 2024.01.16 |