Dev Language/Python
[파이썬_3] #2. Decorator/Underscore/Getter&Setter/Overriding/Overloading/Dispatch
ydin
2021. 11. 25. 12:27
- 공부한 날짜: 2021.11.25
Part 01
- Context manager Annotation
- @contextlib.contextmanager, __enter__, __exit__
- 가장 대표적인 with 구문 이해
- Contextlib 데코레이터 사용
- 코드가 직관적이고 예외 처리하는데 용이하다는 특징이 있다
- 데코레이터(@contextlib.contextmanager) 이용해서 구현
- with open('~','w') as f: \n f.write('~') 과 같은 내용인 것같은데 my_file_writer() 구현함으로써 달라지는 부분이 있나 궁금함
Part 02
- Property(1) - Underscore
- access modifier(접근 지정자)
- 다양한 언더스코어 활용
- 파이썬 접근지정자 설명
- Use underscore
- 언더스코어 이용될 때: 1. 값 무시 2. 인터프리터 3. 네이밍(국제화, 자릿수)
- 접근 지정자
- name : public
- _name: protected
- __name: private
- 파이썬 -> Public 강제성이 없음, 약속된 규약에 따라 코딩 장려(자유도, 책임감 장려)
- 타 클래스가 클래스 변수, 인스턴스 변수 값 쓰기 장려 안함 -> Naming Mangling
- '__'표시가 변수명에 있으면 접근하지 않는 것이 원칙이다
- Ex2
- Ex3 : 변수를 직접 참조하거나 값을 바꾸는 것이 아닌 메소드(Getter,Setter)를 이용하는 것이 더 좋다
Part 03
- Property(2): Getter, Setter
- @Property
- 프로퍼티(property) 사용장점
1. 파이써닉한 코드
2. 변수제약 설정
3. Getter, Setter 효과 등등(코드 일관성)
=> 캡슐화, 유효성 검사 기능 추가 용이
=> 대체표현(속성 노출, 내부의 표현 숨기기 가능)
=> 속성의 수명 및 메모리 관리 용이
=> 디버깅 용이(런타임에서 체크가능)
=> Getter, Setter 작동에 대해 설계된 여러 라이브러리(오픈소스) 상호 운용성 증가
- Ex1
- Ex2
Part 04 : Method Overriding
- 메소드 오버라이딩: 자식 클래스가 부모 클래스의 메소드를 변경하는 것. 같은 기능 사용을 위해 반복 코딩을 하지 않아도 자동 상속되는 것을 의미한다.
- 메소드 오버라이딩 효과
1. 서브(자식) 클래스에서 슈퍼(부모)클래스를 호출 후 사용
2. 메소드 재정의 후 사용가능
3. 부모클래스의 메소드를 추상화 후 사용가능(구조적 접근)
4. 확장 가능, 다형성(다양한 방식으로 동작)
5. 가독성 증가, 오류가능성 감소, 메소드 이름 절약, 유지보수성 증가 등
- Ex1
- Ex2
- Ex3
Part 05 : Overloading, Dispatch
- 메소드 오버로딩 : 파이썬에서는 오버로딩을 지원하지 않는다. 오버로딩을 남발하면 코드가 복잡해지지만 필요할 때는 사용해야한다. 동일한 이름의 함수를 매개변수에 따라 다른 기능으로 동작하게 하는 것을 의미한다
- (출처: https://hyeonggi.tistory.com/entry/Python-%EC%9E%85%EB%AC%B8-%EC%98%A4%EB%B2%84%EB%9D%BC%EC%9D%B4%EB%94%A9%EA%B3%BC-%EC%98%A4%EB%B2%84%EB%A1%9C%EB%94%A9)
- 메소드 오버로딩 효과
1. 동일 메소드 재정의
2. 네이밍 기능 예측
3. 코드 절약, 가독성 향상
4. 메소드 파라미터 기반 호출 방식
- Ex1
- 동일 이름 메소드 사용 예제
- 동적 타입 검사 -> 런타임에 실행(타입 에러가 실행시에 발견) 면접 대비해서 알아두기!!!
- Ex2
- Ex3
-@dispatch: 오버로딩을 위한 라이브러리이다.