Download as pdf or txt
Download as pdf or txt
You are on page 1of 26

공학도를 위한

창의적프로그래밍
[week4]

객체 지향 프로그래밍1
-클래스와 객체-
Contents
객체 지향 프로그래밍
 객체 지향과 실제 세계

클래스(Class)와 객체(Object)
 클래스 정의
 객체 생성
 사용자 클래스 구현

클래스 정의와 객체 생성 실습
객체 지향 프로그래밍

 OOP(Object-Oriented Programming)

객체(Object) 지향(Oriented)

현실 세계에 존재하는 실체 특정한 종류의 사물이나 실체에


관심을 갖는다

우리가 보고 인지하는 실제 세계를 흉내 내어, 가장 기본적인 단위인 객체들을 만들고,


객체들 간의 상호 작용하는 방식으로 작성하는 프로그램 방법론
프로그램의 일부분을 작은 부품(객체)으로 보고, 객체를 먼저 만들고 이렇게 만들어진
여러 객체들을 조립해서 하나의 완성된 프로그램을 만드는 프로그래밍 방법론

객체 생성  객체 조립  프로그램 형성

4
객체 지향 프로그래밍

 OOP의 목적
• 부품만 쉽게 교체하고 나머지 부품들을 건드리지 않아도 되는 것처럼,
프로그램을 보다 유연하고 변경이 용이 하도록 만들기
• 불필요한 반복 작업을 줄이고 효율성을 높일 수 있도록,
이미 만들어진 코드를 재사용하여 프로그램의 생산성을 향상시키기
• 대규모 프로그램을 분업하여 효율적으로 코딩 가능

5
객체 지향 프로그래밍 vs 실제 세계

 실 세계를 모방해서 객체로 표현


 같은 타입(클래스)의 다른 객체들을 그룹화함

 표현할 객체는 속성(Attribute)과 행동(Behavior)으로 나눠서 표현

 모방할 대상의 복잡한 특징이나 기능을 추상화하여 속성과 행동(기능)으로 간


단하게 표현
• 속성 : 고유 특성은 속성(Attribute) 으로 표현
• 행동 : 수행하는 행동과 절차(procedure)는 행동(Behavior) 으로 표현, 주로 객체와의 상
호 작용을 위한 인터페이스역할
• 행동(Behavior)은 코드상에서는 메서드(method)로 불려 짐

6
객체 지향 프로그래밍 vs 실제 세계

 실 세계를 모방해서 객체로 표현


 객체(object)
• 동물(고양이, 강아지…), 마우스, 피아노, 계산기, 자동차 등과 같은 ‘사물’을 의미함

젤리(Jelly)
1살 0살
갈색 갈색

빈(Bean)
0살
검은색 1살
검은색/흰색
타이거(Tiger)
2살
회색 1살
흰색
7
객체 지향 프로그래밍 vs 실제 세계

 실 세계를 모방해서 객체로 표현


 같은 타입의 다른 객체들을 그룹화함  클래스(class)
• 객체를 생성하기 위한 틀(mold)

8
객체 지향 프로그래밍 vs 실제 세계

 객체는 속성(Attribute)과 행동(Behavior)으로 구성

젤리(Jelly)
 객체 예1) 고양이 1살
갈색
• 속성:이름, 나이, 색상, 크기, …
• 행동: 걷는다, 잔다,먹는다, … 빈(Bean)
타이거(Tiger) 0살
2살 검은색
회색

 객체 예2) 좌표
• 속성: x좌표,y좌표, …
• 행동: 좌표간의 거리, 회전거리 …

9
객체 지향 프로그래밍 vs 실제 세계

 파이썬 프로그래밍에서 객체

 객체 예:
정수 실수 문자열 리스트 딕셔너리
• 1234 , 3.14159, “Hello”, [1, 5, 7, 11], {“CA”: “California”, “IA”: “IOWA”}
 1234는 정수 데이터형의 객체
 “hello”는 문자 데이터형의 객체

 객체를 생성하고 조작(삽입, 수정, 삭제)하는 등,


객체간의 상호작용 방식으로 프로그램 작성
• num1 = 10, L = [2,3,4]
• sum = num1 + num2
• L.append(), L.sort() 객체명.메서드명( )
10
객체(object)

객체들의 그룹들은 속성을 가짐


 데이터 속성 (data attributes)  프로시저 속성 (procedural attributes)
• 객체를 구성하는 요소 • 행동/동작/메서드 (methods)
• 데이터를 가지고 어떻게 객체를 표현 • 객체가 하는 행동(Behavior)
할 수 있나? • 누군가가 어떻게 객체와 소통할 수 있는가?
• 그것이 무엇인지(What it is) • 그것이 무엇을 하는지(What it does)

• 예1) 동물(animal)에서 • 예1) 동물(animal)에서


 age, name  소리를 냄
• 예2) 좌표(coordinate)에서 • 예2) 좌표(coordinate)에서
 x좌표와 y좌표의 값  두 좌표 사이의 거리를 구함

11
객체(object)

 객체가 갖고 있는 것
• 유형(type)  클래스(class)
• 내부 데이터 표현(primitive or composite)  속성
• 객체와의 상호작용을 위한 일련의 절차  메서드

 객체  데이터 추상화(data abstraction)


1) 내부 표현(internal representation)
데이터 속성을 통해
2) 객체와 상호작용하기 위한 인터페이스
procedures/functions 를 통해
동작(behaviors) 정의
but 구현(implementation)은 숨김
12
클래스(Class)와 객체(Object)

 객체 지향 프로그래밍을 하려면
• 공통된 속성과 행동을 하나의 패키지로 묶는 작업인 클래스(class)로 정의하고
• 정의한 클래스를 객체화해서 사용하는 과정이 필요

• 1) 클래스를 생성/정의 한다는 것은


클래스 이름(class name) 정의
클래스 내부에 데이터 속성(attributes)과 행동(메서드(method))을 정의

• 2) 클래스를 사용한다는 것은(객체화)


객체의 새로운 인스턴스 생성
인스턴스에 대한 동작 수행

13
클래스(Class)와 객체(Object)

 클래스(Class)
• 객체를 만들기 위한 공통된 특징의 템플릿, 설계도
• 특징을 추상화하여 속성(attribute)과 행위/기능(behavior)를 정의

 객체(Objects  instance)
• 수많은 사물을 프로그래밍 관점에서는 객체라고 부름
• 프로그램 내부에서 객체화된 대상을 인스턴스(instance)라고 부름

객체 생성
객체(자동차)

클래스(자동차 설계도)
14
클래스 정의

 클래스 구현(Implementing the class)


• class 키워드를 사용하여 새 유형(type) 정의
클래스정의 클래스이름/유형 클래스부모

class Coordinate ( object ) :


#define attributes here

• 함수(def) 정의와 유사
• 클래스 정의에 포함된 코드는 들여쓰기 해야 함
• object는 Coordinate가 파이썬 객체이고
모든 속성을 상속(inheritance)한다는 것을 의미함
 Coordinate 는 object의 하위클래스(subclass)
 object는 Coordinate 의 슈퍼클래스(superclass)
15
클래스 정의

 속성과 행동을 구현
• 클래스 내부에는 데이터 속성과 프로시저 속성(행동)을 정의
 행동을 메서드로 정의함
 메서드는 해당 클래스에서만 동작하는 함수

toy
• 예) toy 클래스를 정의하고 공통적으로 필요
한 속성과 행동을 내부에 정의
 속성: 모양, X위치, Y 위치 를 정의
 변수로 구현됨
 행동(기능): 이동하기( ) 를 정의
함수로 구현됨
 구현된 함수를 메서드라고도 부름

16
클래스 정의

 생성자
class Coordinate ( object ) :
def __init__ ( self, x, y ): 첫번째매개변수는self를사용

self.x = x 데이터에접근하기위한점(.) 표기법사용


이중밑줄(_ _)을 Coordinate 객체를
사용하는인스턴스를 self.y = y 초기화하는데이터
생성하는특수메서드
클래스인스턴스를
모든Coordinate 객체에대한
참조할매개변수
두개의데이터속성

• __init__ 라는 특수 메서드를 사용하여 각 객체 속성이 초기화됨(생성자)


 객체를 생성하면 무조건 호출되며, 변수의 값을 초기화하는 메서드
 생성자는 클래스 안에서 __init__()라는 이름으로 지정되어 있음

17
클래스 정의와 객체 생성

class Coordinate(object):
클래스 정의
def __init__ (self, x,y):
self.x = x
self.y = y

c = Coordinate(3,4) Coordinate 타입의새로운객체를생성,


클래스 사용 __init__에3과4 좌표를전달함
origin = Coordinate(0,0)
(Using the class)
print(c.x) 점(.)을 사용하여인스턴스c 속성에접근함
print(origin.x)

 __init__() 메서드를 통한 속성 초기화 과정에서, 첫 번째 매개변수인 self는 파이썬이 자동으로 전달


하므로 생략됨
 “.” 연산자를 사용하여 속성 또는 메서드에 접근

18
메서드(Method)

 메서드
• 해당 클래스에서만 동작하는 함수와 같음  절차적 속성(procedural attribute)

 __init__ 라는 특수 메서드=생성자
• 생성자는 클래스 안에서 __init__()라는 이름으로 지정되어 있음
• init 앞뒤로 언더바(_)가 2개씩 있음
 파이썬은 항상 객체를 첫번째 인수(argument)로 전달함
• 모든 메서드의 첫번째 매개변수는 self를 사용하는 것이 관례임
 “.” 연산자는 모든 속성에 접근할 때 사용함
• 객체의 데이터 속성
• 객체의 메서드

19
메서드(Method) 사용 방법

 메서드 정의
def distance (self, other):
# code here

 클래스 사용(Using the class)


• 전통적인 방식 • 동일한 표현
c = Coordinate(3,4) c = Coordinate(3,4)
zero = Coordinate(0,0) zero = Coordinate(0,0)
print (c.distance (zero)) print (Coordinate.distance (c, zero))
클래스 메서드
메서드를 메서드이름 self를포함하지않는 이름 메서드를호출할객체를
이름
호출할객체 매개변수 포함하여self를 표현한
(self는c로암시됨) 매개변수
20
클래스와 재정의(override) 함수

 Coordinate 클래스 구현과 사용


class Coordinate ( object ) :
def __init__ ( self, x, y ):
self.x = x 인스턴스를참조하는데사용함
self.y = y 메서드에대한또다른매개변수

def distance (self, other): 데이터를접근하기위한


점(.) 표기법
x_diff_sq = (self.x - other.x)**2
y_diff_sq = (self.y - other.y)**2
return (x_diff_sq + y_diff_sq)**0.5
>>> c = Coordinate(3,4)
>>> print(c) print 함수로Coordinate 객체출력하기  기본적으로는
<__main__.Coordinate object at 0x7fa918510488> 유용하지 않은 정보가 출력됨
21
클래스와 재정의(override) 함수

 Coordinate 클래스 구현과 사용


class Coordinate ( object ) :
def __init__ ( self, x, y ):
self.x = x
self.y = y
def distance (self, other):
x_diff_sq = (self.x - other.x)**2
y_diff_sq = (self.y - other.y)**2
return (x_diff_sq + y_diff_sq)**0.5
def __str__ (self): 객체출력시, 유용한정보를출력위한용도로__str__() 메서드사용
특수
메서드 return "<"+str(self.x)+","+str(self.y)+">" 문자열을반환(return)
이름
>>> c = Coordinate(3,4)
>>> print(c)
<3, 4>
22
클래스와 재정의(override) 함수

• 객체 인스턴스의 유형을 요청
>>> c = Coordinate(3,4)
>>> print (c)
<3,4> __str__ 메서드의반환(return)
>>> print(type(c))
<class __main__.Coordinate> 객체 c의유형(type) Coordinate 클래스

• 그 이후
>>> print (Coordinate)
<class __main__.Coordinate> Coordinate 클래스
>>> print (type(Coordinate))
<type 'type'> Coordinate 클래스객체의유형(type)

• 객체가 Coordinate인지 확인하기 위해 isinstance() 사용


>>> print (isinstance(c, Coordinate))
True

23
클래스와 재정의(override) 함수

 SPECIAL OPERATORS
• +, -, ==, <, >, len(), print, and many others
 https://docs.python.org/3/reference/datamodel.html#basic-customization

 print와 같이 class에서 재정의(override)할 수 있음


• 앞/뒤에 이중 밑줄을 사용하여 정의함

__add__(self, other)  self + other


__sub__(self, other)  self - other
__eq__(self, other)  self == other
__lt__(self, other)  self < other
__len__(self)  len(self)
__str__(self)  print self
... and others
24
객체 지향 프로그래밍1

 객체 지향 프로그래밍이란?

▶ 객체

▶ 클래스

▶ 속성

▶ 메서드

 클래스 정의(구현)

 클래스 사용

25
수고하셨습니다.

You might also like