• 검색 결과가 없습니다.

14장. 객체

N/A
N/A
Protected

Academic year: 2022

Share "14장. 객체"

Copied!
30
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

IT응용공학과 허석렬

[email protected]

14장. 객체

(2)

객체

 리스트는 변수(데이터)를 모으는 한 가지 방법이고 함수는 코드를 끊임없이 재사용 할 수 있는 방법을 제공함

 객체(Object)는 함수와 데이터를 함께 묶는 한가지 방법

 파이썬의 내부구조를 보면 거의 모든 것이 객체로 구 성됨

 파이썬은 객체지향적(object-oriented) 언어임

(3)

현실 세계의 객체

 객체란 무엇일까?

 공을 예로 들면,

공은 들어올리거나 던지거나 발로 차거나 공기를 불어넣어 부풀릴 수 있음-> 행동(action)

색깔, 크기, 무게 => 속성(attribute)

(4)

파이썬의 객체

 파이썬에서는 객체의 특징 또는 알고 있는 것을 속 성(attribute) 라고 하고 행동 또는 객체에 대해 할 수 있는 것을 가리켜 메서드(method)라고 함

 공을 예로 들면

속성은

메서드는

(5)

속성이란 ?

 속성은 공에 관해 알고 있는 것(또는 찾을 수 있는 것) 을 말함. 공의 속성은 숫자, 문자열 등과 같은 정보로 구성되어 있음

 속성 표시

>>> print ball.size

 속성에 값 할당

>>> ball.color = ‘green’

 속성은 보통 객체가 아닌 변수에 할당

>>> myColor = ball.color

(6)

메서드란 ?

 메서드는 객체를 통해 할 수 있는 것들

 메서드는 어떤 일을 하기 위해 호출(call)할 수 있 는 코드 덩어리로 구성됨

메서드는 객체 안에 포함된 함수

 인자를 전달하거나 값을 반환하는 것을 비롯해 다 른 함수를 통해 할 수 있는 일들은 메서드로 할 수 있음

 따라서 객체 = 속성 + 메서드

(7)

객체 만들기

 파이썬에서는 객체를 만들 때 두 가지 단계를 가짐

 첫 번째

객체가 어떤 모습이고 어떻게 행동하는지(객체의 속 성과 메서드)를 정의함

정의만으로 객체가 만들어지지 않음(설계도와 같음)

객체의 설명이나 설계도를 클래스(class) 라고 함

 두 번째

클래스를 이용해 실제 객체를 만듦(집을 만듦)

때 객체를 해당 클래스의 인스턴스(instance) 라

(8)

 인스턴스를 생성 myBall = Ball( )

 속성을 추가

myBall.direction = “down”

myBall.color = “green”

myBall.size = “small”

클래스와 인스턴스 만들기 예제

메서드

Ball 이라는 클래스를 만듦

(9)

Ball 클래스 사용하기

(10)

객체 초기화

 공 객체를 만들었을 때 공 객체의 size, color, direction에는 아무것도 채워지지 않음.

객체를 생성하고 나서 이 속성을 채움

 위의 방법 외에, 객체를 생성될 때 객체의 속성을 설 정하는 방법이 있음. 이를 초기화라고 함

 클래스를 정의할 때 __init__( )라는 특별한 메서드를 정의하고 이를 이용해서 속성을 초기화 할 수 있음

 __init__( ) 메서드는 클래스의 새 인스턴스가 만들어 질 때마다 실행됨

 __init__( ) 메서드에 인자를 전달해서 원하는 특성을 갖는 인스턴스를 만들 수 있음

(11)

객체 초기화-계속

(12)

객체 초기화-계속

(13)

“마법“메서드: __str__( )

 클래스를 만들 때 파이썬이 자동으로 포함시키 는 메서드: 특수 메서드

__init__( ), __str__( )

 __str__( ) 메서드는 객체에 대해 print를 호출할 때 파이썬이 어떤 내용으로 표시할지 알려줌

인스턴스가 정의된 곳(__main__)

클래스 이름

인스턴스가 저장돼 있는 메모리상의 위치( 예:

0x00BB83A0)

 print를 이용해 객체에 대한 다른 정보를 보여주 고 싶으면 직접 __str__( ) 를 정의할 수 있음

(14)

__str__( ) :객체가 출력하는 내용 변경

(15)

self란?

 Ball 클래스를 이용해 두 개의 인스턴스 생성 cartersBall = Ball(“red”, “small”, “down”)

warrensBall = Ball(“green”, “medium”, “up”)

 warrensBall.bounce( ) 를 실행(호출)하면 해당 메 서드(bounce( ) 는 어느 인스턴스에서 메서드를 호 출했는지를 알아야 함. 이 때 self 인자는 어느 객체 (이 경우 warrensBall)가 호출했는지를 알려줌

 Ball.bounce(warrensBall)로 작성한 것과 동일

(16)

self의 이해

(17)

self의 이해:계속

 객체에 메서드를 호출할 때 파이썬은 첫 번째 인 자가 호출한 객체가 되도록 만듦

초기화 메서드가 이제는 self.thing 이라는 속성에 값을 대입함

how_big 메서드는 self.thing의 길이를 반환

self를 사용해서 호출할 객체를 식별

(18)

self의 이해:계속

(19)

예제 클래스 – HotDog

 HotDog 클래스에 몇 가지 속성과 메서드를 추가

 속성

cooked_level: 핫도그의 구워진 상태

cooked_string: 핫도그의 상태를 나타내는 문자열

condiments: 핫도그 양념(케첩, 겨자소스 등) 목록

 메서드

cook( ): 핫도그를 특정시간 동안 굽는다

add_condiment( ): 핫도그에 양념을 추가한다

__init__( ): 인스턴스를 생성하고 기본 특성을 설정한다

__str__( ): print 출력 결과를 더 보기 좋게 만든다

(20)

예제 클래스 – HotDog(계속)

 첫 번째, __init__( ) 메서드 설정

 핫도그를 굽는 메서드 설정

(21)

핫도그 전체 프로그램

(22)

핫도그 프로그램 실행하기

실행결과는

>>>

0 <- cooked_level 값 Raw <- cooked_string [ ] <- condiments

아래 내용을 예제에 추가한 뒤 실행 한 뒤 결과 확인하기 print “Now I’m going to cook the hot dog”

myDog.cook(4)

print myDog.cooked_level print myDog.cooked_string

(23)

데이터 숨기기

 객체 안에 들어 있는 데이터(속성)을 보거나 변 경하는 두 가지 방법이 있음

myDog.cooked_level = 5 #직접 접근

myDog.cook(5) #메서드 이용

 속성을 직접 수정하면

관계되는 모든 것을 직접 수정해야 하며

이치에 맞지 않는(구운 핫도그를 되돌리는) 상황 발생할 수 있음

 메서드로만 데이터를 획득하거나 변경할 수 있 도록 객체의 데이터 접근을 제한하는 것을 데이 터 은닉(data hidging)이라고 함

(24)

다형성 : 동일한 메서드, 다른 동작 방식

 다형성은 서로 다른 클래스에 이름이 같은 두 개(또 는 그 이상)의 메서드를 둘 수 있는 것을 말함

(25)

상속 : 부모로부터 배우기

 객체지향 프로그래밍에서는 클래스는 다른 클래 스로부터 속성과 메서드를 물려 받을 수 있음.

 다른 클래스로부터 속성과 메서드를 물려 받는 클 래스를 파생클래스(derived class) 또는 하위 클 래스(subclass)라고 함

(26)

상속 맛보기

super.__init__(self,”coin”) 으로도 표현

(27)

미리 생각하기

 메서드(또는 함수)에 실제 코드를 넣지 않고 해 당 메서드에서 해야 할 일을 설명하는 주석만 작 성하는 방법: 코드 토막(code stub)

 “pass” 키워드는 코드 토막을 만들 때 자리를 채 우는 용도로 사용함

(28)

도전과제

 BankAccount 라는 클래스를 정의하시오. 이 클 래스에는 은행계좌의 이름(문자열), 계좌번호(문 자열이나 숫자), 잔액(실수)에 대한 속성이 있어 야 함. 그리고 잔액을 표시하고 입금과 출금을 수행하는 메서드가 있어야 함

(29)

도전과제 해답

# Copyright Warren & Carter Sande, 2013

# Released under MIT license http://www.opensource.org/licenses/mit- license.php

class BankAccount:

def __init__(self, acct_number, acct_name):

self.acct_number = acct_number self.acct_name = acct_name

self.balance = 0.0 def displayBalance(self):

print "The account balance is:", self.balance def deposit(self, amount):

self.balance = self.balance + amount print "You deposited", amount

print "The new balance is:", self.balance

(30)

해답 계속

def withdraw(self, amount):

if self.balance >= amount:

self.balance = self.balance - amount print "You withdrew", amount

print "The new balance is:", self.balance else:

print "You tried to withdraw", amount

print "The account balance is:", self.balance print "Withdrawl denied. Not enough funds."

myAccount = BankAccount(234567, "Warren Sande") print "Account name:", myAccount.acct_name

print "Account number:", myAccount.acct_number myAccount.displayBalance()

myAccount.deposit(34.52) myAccount.withdraw(12.25) myAccount.withdraw(30.18)

참조

관련 문서

모든 증명서는 발행기관의 직인이 있어야 하며, 외국어로 작성된 경력증명서를 제출할 경우 공증받은 한글번역본을 원본과

원자로용기 내에 물을 어떻게 주입하고 발생 증기를 어떻게 방출하는지 설명할 수 있어야 함.. 증기를 정상적으로 빼내지는

* 원천기술혁신은 새로운 문제, 이를 해결하기 위한 과학, 기술과 잠재적 시장에 대한 정보, 그리고 이를 수행하는 데 필요한 역량과 활동을 matching 시키는 매우

표시법으로는 빨간색은 Clasp, Bar 금속상의 금속이 되는 부위에 표시하고, 청색은 금속이 되는 부위에 표시하고, 청색연필은 Resin상의 외형선을 그리고, 흑연필은

• 특정 행동을 수행하고자 할 때, 그 행동에 대한 지식과 수행하는 방법 등을 알아야 함.

○ 대상자의 객관적 자료 수집을 위해 검진자의 감각을 이용하는 과정. ○ 비정상적인 결과를 구분하기에 앞서 정상적인 결과를 알고

동 증명서는 스페인어, 영어, 프랑스어, 포르투갈어에 한해 인정하며 다음 내용이 포함되어

동 증명서는 스페인어, 영어, 프랑스어, 포르투갈어에 한해 인정하며 다음 내용이 포함되어