1. Method overriding
상위 클래스에서 정의한 method의 기능을 하위 클래스에서 가져와 자신에게(하위 클래스에) 맞게 customizing 하는 것
Method overriding 장점
sub class에서 super class를 호출 후 사용한다.
method 재정의 후, 사용 가능하다.
Super class의 method 추상화 후 사용 가능
- 구조적 접근이 가능하다.
확장 가능, 다형성
- 다형성: 상위 클래스에서 하나로 만들었지만, 하위 클래스의 성질에 따라 다양하게 적용되기 때문에 다형성을 띈다.
가독성 증가, 오류 가능성 감소, 유지 보수성 증가
- Method 이름이 절약되기 때문이다.
아래 코드들을 보면서 위 장점들에 대해 느껴보자
1.1 Ex1
|
|
dir
과__dict__
를 각각 호출해보자.
|
|
- 그 결과, 차이가 있다는 걸 알 수 있다.
Ex 1.2
|
|
Ex 1.3
Method overriding을 통해서 log class를 구현하기
- 이번 예제를 통해서 구조적 설계에서의 장점을 보인다.
- 운영에 있어서 필요한 log class를 구현해보자.
- 실무적으로 좋은 예제다.
|
|
super(TimestampLogger, self)
는super(파생클래스, self)
로 기반 클래스의 method 호출에 사용한다.
2. Method overloading
동일한 class 내에서 method 이름은 동일하지만, parameter의 number와 type이 다른 여러 method를 정의하는 것
Method overloading 장점
- 동일 method 재정의
- Naming으로 기능 예측
- 코드 절약, 가독성 향상
- Method parameter 기반 호출 방식
아래 코드들을 보면서 위 장점들에 대해 느껴보자
|
|
분명 인자가 2개인 method를 만들었지만,
z
가 부족하다는 Error가 떴다.동일한 method name으로 작성했을 때, 맨 마지막 method로 인식한다는 것이다.
이 문제에 대해 해결책은 2가지 방법이 있다.
- unpacking 사용하기
- 외부 모듈인 multipledispatch 사용하기
|
|
- 다음으로 unpacking에 자료형에 따른 분기 처리 를 추가해보자.
- single method로 여러 기능들을 구현할 수 있다.
|
|
이렇게 단일 method 내에서 조건 분기화를 통해서 구현했지만, 이는 method overriding이 아니다.
파이썬은 클래스 내에서 method overloading을 지원하지 않는다.
- 그래서 multipledispatch를 사용하여 method overloading을 구현한다.
3. Overloading: multipledispatch
외부 module인 multipledispatch를 사용하여 overriding을 구현해보기
3.1 To install Multipledispatch
- 이를 위해서 먼저 외부 module을 설치해보자.
- 외부 모듈이기 때문에, 가상환경에 입력한다.
pip install multipledispatch
로는 설치되지 않는다.
|
|
3.2 Multipledispatch로 구현하기
- 설치한 package를 통해서 method overloading을 보다 편하게 구현할 수 있다.
- 또한, 최근 overloading을 구현하는 방식이다.
|
|
- 동일한 이름을 사용해서 훨씬 깔끔하고, 이름을 아낄 수 있다.
- 그럼 인스턴스를 만들어서 각 method를 실행해보자.
|
|
- 동일한 method 명이지만, 변수의 타입과 갯수에 맞게 적절한 method가 적용된다는 걸 확인했다.
- 동일한 name을 사용하여 훨씬 깔끔하고, name을 아낄 수 있다.