티스토리 뷰
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 #초기 채널 1
self.volumeLevel = 1 # 초기 볼륨레벨 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 1 <= self.channel <= 120:
self.channel = channel
def getVolumeLevel(self):
return self.volumeLevel
def setVolumeLevel(self, volumeLevel):
if self.on and 1 <= 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 > 1 :
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
※
본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.
교재 영어 원서를 직접 번역하여 정리한 게시물이므로 일부 오타, 의역이 존재할 수 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다.
※
'파이썬 > 이론' 카테고리의 다른 글
[파이썬]클래스 추상화와 캡슐화(Class Abstraction and Encapsulation) (0) | 2017.08.06 |
---|---|
[파이썬]불변 객체와 가변 객체, 데이터 필드 숨기기(data hiding) (0) | 2017.08.04 |
[파이썬]생성자(Constructor), 객체 멤버 접근, self 매개 변수 (1) | 2017.08.01 |
[파이썬]객체와 클래스(Objects and Classes),생성자(initializer) (2) | 2017.07.31 |
[파이썬]함수 추상화와 단계적 개선 (2) (0) | 2017.07.30 |
- Total
- Today
- Yesterday
- 파이썬 함수
- 버츄어박스
- 파이썬 단계적 개선
- 자바
- 파이썬 if문
- 파이썬 예제
- 자료구조
- 파이썬 연산자
- 자바스크립트 자료구조
- css 그리드
- css 박스
- 자바 에센셜 실습문제
- 파이썬 터틀
- 백준 10451
- 명품 c++ 실습
- 웹
- 백준 1874
- 파이썬 선택문
- 파이썬
- 파이썬 객체
- 파이썬 진수 변환
- 파이썬 리스트
- 파이썬 while
- 자바스크립트 그래프
- 백준 11501
- 파이썬 문자열
- css
- 파이썬 for
- 파이썬 클래스
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |