작성자: admin 작성일시: 2016-09-20 22:37:14 조회수: 854 다운로드: 63
카테고리: Python 태그목록:

파이썬 객체지향 프로그래밍 기초 1

객체

프로그램이 어떤 작업을 수행하기 위해서는 (1)데이터와 (2)데이터를 조작하는 행위, 두 가지 요소가 필요하다. 일반적으로 데이터는 변수(variable)에 넣어서 사용하고 데이터를 조작하는 일은 함수(function)로 구성해서 쉽게 실행시킬 수 있도록 만들어 놓는다.

객체(object)는 서로 연관된 데이터와 그 데이터를 조작하기 위한 함수를 하나의 집합에 모아놓은 것을 말한다.

집합의 원소가 되는 변수나 함수는 멤버(member) 또는 속성(attribute)이라고 한다. 특히 객체에 합쳐진 함수는 함수가 아니라 메서드(method)라고 부른다.

예: 사각형의 면적 구하기

예를 들어 사각형의 면적을 구하는 프로그램을 만든다고 하자. 필요한 변수와 함수는 다음과 같다.

  1. 가로 길이와 세로 길이라는 두 개의 데이터를 넣을 변수
  2. 두 길이를 곱해서 면적을 구하는 함수

객체지향을 사용하지 않고 파이썬으로 구현하면 다음과 같아진다.

In [1]:
h = 10
v = 20

def area(h, v):
    return h * v

a = area(h, v)
print(a)
200

위 프로그램에서 사각형의 가로 길이를 나타내는 변수 h, 사각형의 세로 길이를 나타내는 변수 v, 그리고 이 사각형의 면적을 계산하는 함수 area()는 제각기 떨어져 있다. 하지만 객체 지향 프로그래밍에서는 이 세가지를 하나의 객체(object)로 묶을 수 있다.

다음은 이 프로그램을 객체 지향 방식으로 다시 구현한 것이다.

In [8]:
class Rectangle(object):
    
    def __init__(self, h, v):
        self.h = h
        self.v = v
        
    def area(self):
        return self.h * self.v

이 부분은 클래스(class) 구현이라고 한다. 실제로 길이 변수들을 저장하고 면적을 계산하는 코드는 다음과 같다.

In [9]:
r = Rectangle(10, 20)    
a = r.area()
print(a)
200

위 프로그램에서 r이 바로 객체이다. 어떻게 위와 같은 코드를 만드는지에 대해서는 곧 자세히 설명할 것이다.

객체 r은 사각형의 가로 길이와 세로 길이를 나타내는 변수 hv 그리고 면적을 계산하는 함수 area()가 합쳐져서 만들어진 것이다. 객체 r에 포함된 이 변수들과 함수, 즉 속성을 꺼내려면 객체 이름 뒤에 점(.)을 붙인 다음 속성 이름을 치면 된다. 다음과 같이 입력해 보면 알 수 있다.

In [4]:
r.h
Out[4]:
10
In [5]:
r.v
Out[5]:
20
In [7]:
r.area()
Out[7]:
200

클래스

객체 지향 프로그래밍에서 객체를 만들려면 객체를 바로 만들지 못하고 항상 클래스(class)라는 것을 만든 후에 그 클래스를 이용하여 객체를 만들어야 한다.

위 예제에서 Rectangle은 클래스이고 rRectangle 클래스로 만들어진 객체이다. 객체와 클래스의 관계는 "붕어빵"과 "붕어빵을 굽는 틀"에 비유할 수 있다. 즉, 정해진 속성, 여기에서는 가로 길이 h와 세로 길이 v라는 속성을 가지도록 사각형 클래스를 한 번 만들어 놓으면 이 속성을 가지는 실제 사각형은 얼마든지 많이 만들 수 있다.

예를 들어 위에서 만들어 놓은 Rectangle 클래스로 다음과 같이 5개의 사각형을 만들 수도 있다.

In [10]:
a = Rectangle(1, 1)   # 가로 1, 세로 1인 사각형
b = Rectangle(2, 1)   # 가로 2, 세로 1인 사각형
c = Rectangle(4, 2)   # 가로 4, 세로 2인 사각형
d = Rectangle(6, 3)   # 가로 6, 세로 3인 사각형
e = Rectangle(8, 5)   # 가로 8, 세로 5인 사각형

이 사각형들의 면적은 다음과 같이 계산한다.

In [12]:
print(a.area())
print(b.area())
print(c.area())
print(d.area())
print(e.area())
1
2
8
18
40

생성자

파이썬에서 클래스를 정의하는 문법은 다음과 같다.

class 클래스이름(object):

    def __init__(self, 속성값1, 속성값2, 속성값3):
        self.속성이름1 = 속성값1
        self.속성이름2 = 속성값2
        self.속성이름3 = 속성값3

이 때 속성값 인수는 필요하지 않다면 없어도 된다.

여기에서 class 블럭안에 정의된 __init__란 함수는 생성자(constructor)라고 하며 클래스 정의에서 가장 중요한 함수이다.

객체를 생성할 때는 클래스이름이란 이름을 가진 함수를 호출해야 하는데 이 때 실제로는 __init__로 정의된 생성자 함수가 호출된다. 생성자 함수 내부에서는 생성자를 호출할 때 넣은 입력 변수, 즉 인자의 값을 속성값으로 저장한다.

연습 문제 1

삼각형의 넓이를 계산하기 위한 클래스를 만든다. 이 클래스는 다음과 같은 속성을 가진다.

  • 밑변의 길이 b 와 높이 h
  • 삼각형의 넓이를 계산하는 메서드 area

연습 문제 2

사각 기둥의 부피를 계산하기 위한 클래스를 만든다. 이 클래스는 다음과 같은 속성을 가진다.

  • 밑면의 가로 길이 a, 밑면의 세로 길이 b, 높이 h
  • 부피를 계산하는 메서드 volume
  • 겉넓이를 계산하는 메서드 surface

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!