티스토리 뷰
7.7 객체지향적으로 생각하기(Object-Oriented Thinking)
- 프로그래밍의 절차지향적(procedural) 패러다임은 함수를 설계하는데에 초점을 둔다.
- 객체 지향적(object-oriented) 패러다임은 데이터와 메소드 둘 다 하나의 객체로 결합하는데 있다.
- 객체지향적(object-oriented) 패러다임을 이용하는 소프트웨어는 객체(objects)와 객체의 동작(operation)에 중점을 둔다.
- 이번 챕터에서는 절차지향적 프로그래밍과 객체지향적 프로그래밍의 차이점을 확인 할 수 있다.
- 4장에서 배운 BMI 프로그램 코드를 이용하여 두 패러다임의 차이점을 확인해보자.
*절차 지향적으로 만든 BMI 프로그램(BMI.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 |
# 파운드로 몸무게 입력
weight = eval(input("Enter weight in pounds: "))
# 신장을 인치로 입력
height = eval(input("Enter height in inches: "))
KILOGRAMS_PER_POUND = 0.45359237
METERS_PER_INCH = 0.0254
#BMI 계산
weightInKilograms = weight * KILOGRAMS_PER_POUND
heightInMeters = height * METERS_PER_INCH
bmi = weightInKilograms / (heightInMeters * heightInMeters)
#결과 출력
print("BMI is", format(bmi,".2f"))
if bmi < 18.5:
print("Underweight")
elif bmi < 25 :
print("Normal")
elif bmi < 30 :
print("Overweight")
else :
print("Obese")
|
cs |
- BMI 프로그램은 이용자의 비만도를 알려주는 프로그램이다.
- 하지만 이 코드는 다른 프로그램에 재사용이 불가능하다.
- 이 코드를 재사용 가능하게 만들기 위해선 아래와 같이 BMI 계산 함수를 독립적인(standalone) 함수로 정의하여야 한다.
def getBMI(weight, height):
- 이렇게 정의하면 아까보다는 좀 더 효율적인 함수가 되지만 아직 한계는 존재한다.
- 여러분이 몸무게와 신장을 사람의 이름과 생년월일과 연관시켜야 한다고 가정해 보자.
- 이름과 생년월일을 따로 변수를 만들어 값을 저장하는 방법도 있지만, 이는 깔끔하게 연관짓지 못한다.
- 가장 이상적인 방법은 하나의 객체를 만들어 이 안에 집어넣는 것이 바람직하다.
* BMI 프로그램 추상화(UML 다이어그램)
- BMI 클래스를 만들어 이 클래스를 이용하는 프로그램을 만들어 보자.
*BMI 클라이언트 (UseBMIClass.py)
1
2
3
4
5
6
7
8
9
10 |
from BMI import BMI
def main():
bmi1 = BMI("John Doe",18,145,70)
print("The BMI for", bmi1.getName(),"is",bmi1.getBMI(), bmi1.getStatus())
bmi2 = BMI("Peter King", 50, 215, 70)
print("The BMI for", bmi2.getName(),"is",bmi2.getBMI(), bmi2.getStatus())
main() |
cs |
- bmi1이 John Doe의 객체, bmi2가 Peter King의 객체이다.
- 각 자신의 객체 안에 위 자신의 정보들이 저장되어 있다.
*BMI 클래스 구현(BMI.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
42 |
class BMI:
def __init__(self, name, age, weight, height):
self.__name = name
self.__age = age
self.__weight = weight
self.__height = height
def getBMI(self):
KILOGRAMS_PER_POUND = 0.45359237
METERS_PER_INCH = 0.0254
weightInKilograms = self.__weight * KILOGRAMS_PER_POUND
heightInMeters = self.__height * METERS_PER_INCH
bmi = weightInKilograms / (heightInMeters * heightInMeters)
return round(bmi,2)
def getStatus(self):
bmi = self.getBMI()
if bmi < 18.5:
return "Underweight"
elif bmi < 25 :
return "Normal"
elif bmi < 30 :
return "Overweight"
else :
return "Obese"
def getName(self):
return self.__name
def getAge(self):
return self.__age
def getWeight(self):
return self.__weight
def getHeight(self):
return self.__height |
cs |
- 이 예제는 객체 지향적(object-oriented) 패러다임은 절차 지향적(procedural) 패러다임보다 더 많은 장점을 보여주는 예제이다.
- 객체 지향 패러다임은 절차 지향적 패러다임에 데이터(data)와 동작(operation)을 통합한 객체를 가미한 패러다임이다.
- 절차 지향적 프로그래밍(procedural programming)은 데이터(data)와 동작(operations)을 분리하여 데이터를 메소드에 전달해야한다.
- 객체 지향적 프로그래밍은(object-oriented programming) 데이터와 동작은 하나의 객체 안에 연관지어 놓는다.
- 객체 지향적 접근 방법으로 절차 지향적 프로그래밍의 태생적인 많은 문제들을 해결 할 수 있다.
- 객체 지향적 프로그래밍은 현실 세계를 미러링하여 만든 프로그램 제작 기법으로 모든 특성과 동작들은 서로 연관되어 있다.
- 객체를 사용하는 것은 소프트웨어의 재사용성을 높이고 개발을 쉽게 해주며, 유지보수도 쉽게 만들어 준다.
- 파이썬 프로그래밍은 객체의 관점에서 생각하는 것을 내포한다. 파이썬 프로그램은 서로 상호작용하는 객체들의 모임이라고 보면 된다.
참고 문헌 : Introduction to Programming Using Python / Y.DANIEL LIANG
※
본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.
교재 영어 원서를 직접 번역하여 정리한 게시물이므로 일부 오타, 의역이 존재할 수 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다.
※
'파이썬 > 이론' 카테고리의 다른 글
[파이썬]연결 연산자와 반복 연산자, in과 not in 연산자, 문자열 크기 비교 (1) | 2017.08.19 |
---|---|
[파이썬]str 클래스, 문자열 생성, 문자열을 위한 함수, 인덱스 연산자, 슬라이싱 연산자 (0) | 2017.08.16 |
[파이썬]클래스 추상화와 캡슐화(Class Abstraction and Encapsulation) (0) | 2017.08.06 |
[파이썬]불변 객체와 가변 객체, 데이터 필드 숨기기(data hiding) (0) | 2017.08.04 |
[파이썬]클래스 사용하기, UML 클래스 다이어그램 (0) | 2017.08.03 |
- Total
- Today
- Yesterday
- 파이썬 단계적 개선
- 파이썬 리스트
- 파이썬 터틀
- 자료구조
- css 박스
- 백준 1874
- 백준
- 백준 10451
- 자바 에센셜 실습문제
- 파이썬 문자열
- 파이썬 if문
- 명품 c++ 실습
- 자바스크립트 그래프
- 파이썬 선택문
- 파이썬 while
- 자바스크립트 자료구조
- 파이썬 연산자
- 파이썬 객체
- 파이썬 진수 변환
- 파이썬 for
- 파이썬 예제
- 버츄어박스
- css
- 파이썬 클래스
- 파이썬 함수
- 파이썬
- css 그리드
- 웹
- 백준 11501
- 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |