728x90
객체 지향 프로그래밍은 왜 쓸까?
파이썬 수업을 처음 들을 때 파이썬의 창시자가 크리스마스에 할 일이 없어 만든 언어라는 것과 함께 듣는 내용이 "python은 객체 지향 언어다" 라는 말이다. 그런데 python을 사용하다보면 object나 class를 사용하지 않아도 필요한 코드를 작성하는데 큰 문제가 없다. 그런데 만약 $^{1)}$다른 사람들과 협업을 하거나 $^{2)}$혼자라도 다루기 어려울 정도로 복잡한 프로그램을 작성하게 된다면 Object-oriented programming이 필요하게 될 것이다.
object는 현실의 대상을 모델링해 class를 정의하고 한번 정의된 class를 재사용해 여러 개의 instance를 생성하기 때문에 코드 작정 중 실수를 줄이고 사람이 이해하기 쉬운 코드를 작성할 수 있는 프로그래밍 패러다임이다. python에서 class를 사용하게 되면 다음과 같은 장점들이 있다.
- 데이터나 자료와 그것을 처리하는 방법들을 한 곳에 모아놓을 수 있음
- 프로그램을 모듈화하기 편리해 유지 보수 관점에서 유리함
- 프로그램의 기능들을 분리해 스파게티 코드를 방지할 수 있음
객체 지향 프로그래밍 용어
객체 지향 프로그래밍에 사용되는 용어들은 아래 표과 같이 정리할 수 있다. Class, object, instance 용어들이 헷갈릴 수 있다. 세 가지 용어를 잘 설명해 놓은 포스팅을 참고하자.
용어 | 설명 |
---|---|
Class | 객체(object)를 생성할 수 있는 틀 |
Methods | 클래스의 일부인 함수 |
Attributes | 클래스의 일부인 변수 |
Object | Class로 정의해 구현할 대상 - 다소 개념적인 용어 |
Instance | 변수(메모리)에 할당되어 구체화 된 실체 |
Inheritance | 다른 클래스로부터 method와 attribute등을 받아오는 것 |
Composition | 다른 클래스의 기능을 가져와 새로운 객체를 만드는 것 |
Class 구현
지금부터 파이썬에서 클래스의 요소들을 구현하는 코드를 정리한다.
Class 선언 - 기본
- line 1 클래스는
class class_name:
을 시작으로 선언하게 되고 클래스 이름의 첫 글자만 대문자로 적는 것이 convention이다. - line 2
__init__(self, arg):
는 예약어로 클래스가 선언될 때 호출되는 함수다. 여기서 self는 선언된 class 자기 자신을 나타내는 변수를 넣는 자리로 class 내에서 method를 선언 할 때 항상 넣어주어야 한다.self
로 넣는 것이 convention이지만 원하는 이름을 넣어도 상관 없다. 보통 init method에서 초기화 할 때 받을 attribute를 선언한다. - line 5 ~6
b1
과b2
는 Book object가 구현된 instance이다. 각각의 instance에는 title이라는 attribute가 있는데 이에 접근하기 위해서는b1.title
,b2.title
과 같이instance_name.attribute_name
으로 접근할 수 있다.
Class 선언 - 거의 모든 것
- line3 class variable은 method 밖에 정의된 변수로 instance가 생성될 때 전달되고, instance name 뿐만 아니라 class name으로도 접근 가능하다
Book.order
로 class variable에 접근 가능하다는 뜻__init__
메소드의 line18을 보면 인스턴스가 하나 생성될 때 마다 order가 하나씩 증가되는데 여기서 계산된 결과가 다음 instance에까지 영향을 준다. line35~37의 결과를 보면 확인 가능하다.
- line6 static method는
@staticmethod
라는 decorator를 메소드 앞에 선언해 정의할 수 있다. static method는 클래스 외부에서 접근해 사용할 수 있는 함수를 class 내부 정보를 활용해 사용하고자 할 때 사용할 수 있다.- (line44)에서 보는 것 과 같이 외부에서는 그냥 함수라고 생각해도 된다.
- line10 class method는
@classmethod
라는 decorator를 메소드 앞에 선언해 정의할 수 있다. class method는 class variable를 다루기 위해 사용하고, 함수의 첫 인자로 들어가는cls
는 instance가 아니라 class 자신을 칭한다.- line33을 실행하면 class variable인 order가 0으로 바뀌고 이후에 생성된
b3
에 반영된 것을 볼 수 있다.
- line33을 실행하면 class variable인 order가 0으로 바뀌고 이후에 생성된
- line21
hasattr
함수는 instance가 어떤 attribute를 가지고 있는지 확인하는 함수다.
'프로그래밍 언어 > python' 카테고리의 다른 글
[xlwings] 파이썬으로 excel 파일 다루기 (2) 여러 개의 파일과 시트 다루기 (0) | 2022.10.04 |
---|---|
[xlwings] 파이썬으로 excel 파일 다루기 (1) quick start (0) | 2022.09.28 |
numpy array broadcasting (0) | 2022.07.26 |
short-circuit evaluation (0) | 2022.07.26 |
jupyter module autoreload (0) | 2022.07.26 |