출처: 입문자를 위한 딥러닝 정주행 Kit
출처: 한 번에 끝내는 데이터 사이언스 초격차 패키지 Online.
Class 란?
- 실세계의 것을 모델링하여 속성(attribute)와 동작(method)를 갖는 데이터 타입
- Python에서의 string, int, list, dict... 모두가 다 클래스로 존재
- 예를 들어 학생이라는 클래스를 만든다면, 학생을 나타내는 속성과 학생이 행하는 행동을 함께 정의할 수 있음
- 따라서 다루고자 하는 데이터(변수)와 데이터를 나누는 연산(함수)를 하나로 캡슐화(encapsulation)하여 클래스로 표현
- 모델링에서 중요시 하는 속성에 따라 클래스의 속성과 행동이 각각 달라짐
Object 란?
- 클래스로 생성되어 구체화된 객체 (인스턴스)
- Python의 모든 것(int, str, list... etc)은 객체 (인스턴스)
- 실제로 class가 인스턴스화되어 메모리에 상주하는 상태를 의미
- class가 빵틀이라면, object는 실제로 빵틀로 찍어낸 빵이라고 비유 가능
Class 선언하기
- 객체를 생성하기 위해선 객체의 모체가 되는 class를 미리 선언해야 함
init(self)
- 생성자, 클래스 인스턴스가 생성될 때 호출됨
- 생성자에서는 해당 클래스가 다루는 데이터를 정의
* 이 데이터를 멤버 변수(member variable) 또는 속성(attribute)라고 함
self
- Python의 method는 항상 첫 번째 인자로 self를 전달
- self는 현재 해당 method가 호출되는 객체 자신을 가리킴
- C++/C#, Java의 this에 해당
- 이름이 꼭 self일 필요는 없지만, 관례적으로 self로 사용
method 정의
- 멤버 함수라고도 하며, 해당 클래스의 object에서만 호출 가능
- method는 객체 레벨에서 호출되며, 해당 객체의 속성에 대한 연산을 행함
- {obj}.{method}() 형태로 호출됨
method type
- instance method - 객체로 호출
- 해당 method를 호출한 객체에만 영향을 미침
- class method(static method) - class로 호출
- 클래스 레벨로 호출되기 때문에, 클래스 멤버 변수만 변경 가능
Class inheritance (상속)
- 기존에 정의해둔 클래스의 기능을 그대로 물려받을 수 있다.
- 기존 클래스에 기능 일부를 추가하거나, 변경하여 새로운 클래스를 정의한다.
- 코드를 재사용할 수 있게 된다.
- 상속 받고자 하는 대상인 기존 클래스는 Parent, Super, Base class라고 부른다.
- 상속 받는 새로운 클래스는 Child, Sub, Derived class라고 부른다.
- 의미적으로는 is-a관계를 갖는다.
method override
- 부모 클래스의 method를 재정의 (override)
- 하위 클래스(자식 클래스)의 인스턴스로 호출 시, 재정의된 메소드가 호출됨
super
- 하위 클래스(자식 클래스)에서 부모 클래스의 method를 호출할 때 사용
special method
- _로 시작 _로 끝나는 함수
- 해당 method들을 구현하면, 커스텀 객체에 여러가지 파이썬 내장 함수나 연산자를 적용 가능
- 오버라이딩 가능한 함수 목록은 아래 링크에서 참조
ML/DL Project 실무에서의 활용