* 파이썬 객체지향프로그래밍(OOP;Object Oriented Programming)
1. 객체
- 프로그램이 어떤 작업을 수행하기 위해서는 1)데이터 와 2)데이터를 조작하는 행위 두 가지 요소가 필요함.
- 일반적으로 데이터는 변수에 넣어서 사용하고, 데이터를 조작하는 일은 함수로 구성해서 쉽게 실행할 수 있도록 만들어놓음.
- 객체(object, instance) : 서로 연관된 데이터와 그 데이터를 조작하기 위한 함수를 하나의 집합에 모아놓은 것.
- 멤버(member), 속성(attribute) : 집합의 원소가 되는 변수나 함수
- 메서드(method) : 객체의 속성인 함수
ex) 사각형의 면적을 구하는 프로그램
필요한 변수 : 가로 길이, 세로 길이 두 개의 데이터를 넣을 변수
필요한 함수 : 두 길이를 곱해서 면적을 구하는 함수
1) 객체지향을 사용하지 않고 파이썬으로 구현
h = 10
v = 20
def area(h,v) :
return h * v
a = area(h,v)
print(a)
2) 객체지향 방식
class Rectangle(object) :
def __init__(self, h, v) :
self.h = h
self.v = v
def area(self) :
return self.h * self.v
r = Rectangle(10, 20)
a = r.area()
print(a)
2. 클래스
- 객체지향프로그래밍에서 객체를 만드려면 객체를 바로 만들지 못하고 항상 클래스(class)라는 것을 만든 후 그 클래스를 이용해 객체를 만들어야한다.
- 위 예제에서 Rectangle은 클래스이고, r은 Rectangle의 클래스로 만들어진 객체이다.
객체와 클래스의 관계는 "붕어빵"과 "붕어빵을 굽는 틀"에 비유할 수 있다.
즉, 정해진 속성, 여기에서는 가로길이 h와 세로길이 v라는 속성을 가지도록 사각형 클래스를 한 번 만들어 놓으면 이 속성을 가지는 실제 사각형은 얼마든지 많이 만들 수 있다.
- 예를 들어 위에서 만들어 놓은 Rectangle 클래스로 다음과 같이 5개의 사각형을 만들 수 있다.
a = Rectangle(1, 1)
b = Rectangle(2, 1)
c = Rectangle(4, 2)
d = Rectangle(6, 3)
e = Rectangle(8, 5)
- 이 사각형들의 면적은 다음과 같이 계산한다.
print(a.area())
print(b.area())
print(c.area())
print(d.area())
print(e.area())
3.생성자
- 파이썬에서 클래스를 정의하는 문법은 다음과 같다.
class 클래이름(object) :
def __init__(self, 속성값1, 속성값2, 속성값3) :
self.속성이름1 = 속성값1
self.속성이름2 = 속성값2
self.속성이름3 = 속성값3
- 이때 속성값 인수는 필요하지 않다면 없어도 된다. 여기에서 class 블럭 안에 정의된 __init__함수는 생성자(constructor)라고 하며, 클래스 정의에서 가장 중요한 함수이다.
- 객체를 생성할 때는 클래스 이름을 함수처럼 호출해야 하는데, 이때 실제로는 __ini__로 정의된 생성자 함수가 호출된다. 생성자 함수 내부에서는 생성자를 호출할 때 넣은 입력 변수, 즉 인자의 값을 속성값으로 저장한다.