욤미의 개발일지
[DAY 3] Python: Lecture 7. Object-Oriented Programming 본문
728x90
반응형
[Lecture 7] Object-Oriented Programming
절차 지향 프로그래밍
- 절차를 차례대로 작성하는 것 → 절차 지향 프로그래밍
- 중간 과정을 수정하면 뒤에 있는 코드도 수정해야할 수도 있음.
- 협업 시 프로그래머의 수정 사항이 다른 프로그래머에게 큰 영향을 줌
→ 코드를 객체 단위로 나눌 필요가 있다. = 객체 지향 프로그래밍
- 클래스(Class)당 객체(Object)는 여러개 일 수 있다.
- 각 객체의 데이터(Attribute)는 달라도 행동(Method)는 동일하다.
Class 클래스명(부모클래스)
클래스 선언- 클래스명은 CamelCase가 관습적으로 사용
- 부모 클래스가 지정되지 않으면 object가 자동 상속된다.
- 클래스 속성
- 모든 객체가 같은 값을 참조, but 남용하면 스파게티 코드의 원인이 됨
- 클래스 함수(Method)
- 각 객체에 적용이 가능한 함수
- 현재 수정하고자 하는 객체는
self
로 지칭 instance.method(args, ...)
로 사용 가능
- 객체 속성
self.변수명
: 속성(attribute) 정의
- Magic Method
__init__
: 생성자__del__
: 소멸자
Magic Method
- indexing method
__getitem__
__setitem__
- length method
__len__
- typing method
__str__
__int__
__float__
__bool__
등 - comparison method
__lt__
(lessthan, < 연산자 재정의)__le__
(≤)__gt__
(>)__ge__
(≥)__eq__
(==)__ne__
(!=) - 함수화 method
__call__
- 생성된 객체를 호출 가능하게 함
- context manager: with 구문을 들어가면
__enter__
호출__exit__
로 탈출
객체지향의 3요소
1. 상속(Infereitance)
- 기존 구현틀(부모Class) 상속 → 새로운 틀(자식 Class)을 제작
- 자식 Class는 부모 Class의 기능을 사용할 수 있다.
- 같은 기능을 재작성할 필요가 없음 → 재활용성과 생산성↑
- 다중상속을 지원한다
- but, 죽음의 다이아몬드 발생가능성이 있음
- 파이썬은 mro로 우선순위를 정하기 때문에 어떤 순서로 상속되는지 알 수 있다.
- super 내장 함수를 이용해 상위 클래스에 접근 가능
2. 다형성(Polymorpishm)
- 같은 이름의 메소드를 다르게 작성
- 각 자식 클래스가 다른 클래스와 차별
- 부모 메소드로 접근시 자식 메소드 실행
- 외부에서는 똑같은 API로 접근
- 같은 이름의 메소드가 있으면 실행 = Duck Typing
✔️ Static & Class Method
파이썬에는 2가지 정적 함수가 존재
• 객체에서 접근 가능
• 일반적으로 Class.method 형태로 사용
• Static Method
• @staticmethod 꾸밈자 사용
• 특별한 argument를 받지 않음
• 일반적으로 class 내 유틸 함수로 사용
• Class를 일종의 Namespace로 사용
• Class Method
• @classmethod 꾸밈자 사용
• 호출된 클래스인 cls를 받음(self와 비슷)
• factory패턴에서 사용
3. 가시성, 캡슐화(Visibility)
- 다른 클래스에게 객체 내부를 감추기
- 캡슐화, 정보 은닉
- 클래스 간 간섭 최소화
- 최소한의 정보만을 지정된 API로 공개
- C나 Java에서는 private(자기자신)나 protected(자기자신, 자식)고 구현
- python에서는
- 명시적인 private/protected 범위가 없다. 모두 public
- private 변수/함수는 앞에 __를 붙임
- protected 변수/함수 앞에는 _를 붙임
- __의 경우 변수명 앞에 class 이름을 넣어 Mangling이 일어남(자식과 이름 겹치지 X)
- private와 protected는 코드 완성 등에서 안 보인다.
- 그러나 둘다 public과 기능적 차이는 없다. 밖에서 접근 가능
- 굳이 구분하는 이유는 가독성 때문!
- Property를 통해 Getter, Setter를 명시적 설정 가능
728x90
반응형
'NLP > STUDY' 카테고리의 다른 글
[DAY 4] Python: Lecture 10. String (0) | 2022.11.02 |
---|---|
[DAY 4] Python: Lecture 9. Advanced Data Structure (0) | 2022.10.21 |
[DAY 3] Python: Lecture 8. Module & Package (0) | 2022.10.18 |
[DAY 2] Python: Lecture 4 - Lecture 6 (1) | 2022.10.14 |
[DAY 1] Python: Lecture 0 - Lecture 3 (0) | 2022.10.13 |
Comments