티스토리 뷰

7.2.5 예시 : 클래스 사용하기(Example: Using Classes)

- 이전 포스트에서 객체와 클래스의 개념에 대해서 배웠다.

- 이번에는 반지름이 각기 다른 3개의 circle 객체를 생성하고 각 원의 넓이를 출력하는 프로그램을 만들어 볼 것이다.

 

*TestCircle.py(circle 객체 사용 예제) 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from Circle import Circle
 
def main() :
    # 반지름 1인 circle 객체
    circle1 = Circle()
    print("Tre area of the circle of radius",
          circle1.radius,"is",circle1.getArea())
 
    # 반지름이 25인 circle 객체
    circle2 = Circle(25)
    print("The area of the circle of radius",
          circle2.radius, "is",circle2.getArea())
 
    # 반지름이 125인 circle 객체
    circle3 = Circle(125)
    print("The area of the circle of radius",
          circle3.radius, "is", circle3.getArea())
 
    # circle2 반지름 수정하기
    circle2.radius = 100
    print("The area of the circle of radius",
          circle2.radius, "is", circle2.getArea())
main()
cs

 

- 위 프로그램이 Circle 객체를 만들기 위해 Circle 클래스를 사용하였다.

- 위 처럼 클래스를 사용하는 프로그램을 우리는 클래스(Circle)의 클라이언트(client)라고 부른다.

- line1에서 from Circle import Circle 가 Circle 클래스를 임포트하는 것을 의미한다. Circle 클래스는 앞서 우리가 정의하였던 Circle.py(소스 보려면 ●클릭)이다.

line 20에 circle2.radius = 100은 circle2.setRadius(100)이라고 작성하여도 같은 의미이다.

 

7.3 UML 클래스 다이어그램(UML Class Diagrams)

- UML 클래스 다이어그램(UML class diagrams)은 클래스를 표현하기 위한 표기법이다.

- UML 클래스 다이어그램은 클래스와 객체를 좀 더 쉽게 설명하고 이해하기 위해 사용된다.

- 이를 간단히 클래스 다이어그램(class diagram)이라고 부르기도 한다.

- 다른 프로그래밍 언어에서도 이러한 모델링과 표기법을 이용한다.

 

* 작성 양식

데이터필드 이름(dataFieldName) : 데이터필드 타입(dataFieldType)

클래스 이름(매개변수 이름 :  매개변수 타입)

메소드 이름(매개변수 이름 : 매개변수 타입) : 반환 타입(returnType)

 

*UML 클래스 다이어그램(UML Class Diagram)

 

- UML 클래스 다이어그램에서 self 매개변수는 다루지 않는다. 왜냐면 클라이언트가 굳이 알 필요가 없는 매개변수인데다, 메소드를 호출할 때 사용하지 않는 매개변수이기 때문이다.

- __init__ 메소드도 다루지 않는다. 왜냐하면 생성자(constructor)로 호출이 이루어지며, __init__의 매개변수와 생성자(constructor)의 매개변수가 서로 같기 때문에 굳이 다루지 않는다.

- UML 다이어그램은 클라이언트와의 약속(contract , 템플릿(template))이기 때문에 우리가 어떻게 클래스를 사용해야 하는지 쉽게 알 수 있다.

- 그리고 클라이언트에게는 객체를 어떻게 생성하는지, 또 어떻게 그 객체의 메소드를 호출하는지를 알려준다.

 

- TV 프로그램을 예로 들어보자

- TV는 상태(states) 동작(behavior)을 가지고 있는 객체(object)이다. 

- 상태(states)는 현재 채널, 현재 볼륨, 현재 전원 상태로 이루어져 있으며 이는 데이터 필드(data field)로 표현된다.

- 동작(behaviors)은 채널 바꾸기, 볼륨 조절, 전원 끄기/켜기 동작으로 이루어져 있으며, 이는 메소드로 표현된 TV객체의 요소이다.

- 이를 UML 클래스 다이어그램으로 표현하면 아래와 같다.

 

* TV의 UML 클래스 다이어그램

 



 

- 위 UML 클래스 다이어그램을 바탕으로 코드를 작성하면 아래와 같다.

 

* TV 클래스(TV.py)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class TV:
    def __init__(self):
        self.channel  = #초기 채널 1
        self.volumeLevel = # 초기 볼륨레벨 1
        self.on = False # 초기 전원 상태 off
 
    def turnOn(self):
        self.on = True
 
    def turnOff(self):
        self.on = False
 
    def getChannel(self):
        return self.channel
 
    def setChannel(self, channel):
        if self.on and <= self.channel <= 120:
            self.channel = channel
 
    def getVolumeLevel(self):
        return self.volumeLevel
 
    def setVolumeLevel(self, volumeLevel):
        if self.on and <= self.volumeLevel <= 7:
            self.volumeLevel = volumeLevel
 
    def channelUp(self):
        if self.on and self.channel < 120 :
            self.channel += 1
 
    def channelDown(self):
        if self.on and self.channel > :
            self.channel -= 1
 
    def volumeUp(self):
        if self.on and self.volumeLevel < 7:
            self.volumeLevel += 1
 
    def volumeDown(self):
        if self.on and self.volumeLevel > 1:
            self.volumeLevel -= 1
cs

 

*TV 클라이언트 (TestTV.py)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from TV import TV
 
def main():
    tv1 = TV()
    tv1.turnOn()
    tv1.setChannel(30)
    tv1.setVolumeLevel(3)
 
    tv2 = TV()
    tv2.turnOn()
    tv2.channelUp()
    tv2.channelUp()
    tv2.volumeUp()
 
    print("tv1's channel is", tv1.getChannel(),
          "and volume level is ", tv1.getVolumeLevel())
 
    print("tv2's channel is", tv2.getChannel(),
          "and volume level is ", tv2.getVolumeLevel())
 
main()
cs

 

참고 문헌 : Introduction to Programming Using Python / Y.DANIEL LIANG



본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.


교재 영어 원서를 직접 번역하여 정리한 게시물이므로 일부 오타, 의역이 존재할 수 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다. 

댓글