객체(Object)와 파이썬

 Object-oriented programming, 객체 지향 프로그래밍은 뭘까?


객체란?

객체는 함수+데이터의 집합이다.

함수와 함께 함수에 필요한 데이터를 꾸러미로 묶었다고 보면 된다.

현실 세계를 흉내내기

객체는 현실 세계를 흉내낼 수 있어 프로그래밍할 때 유리하다. 현실에서 '행동'은 함수로, 특성은 '데이터'로 흉내낸다. 이렇게 흉내낸 함수를 method (매쏘드), 데이터를 속성(attribute) 혹은 멤버(member)라고 한다.

객체의 사용법

객체는 각자 '이름'을 가지고, 이름은 고유(unique)하다. 이름을 부르고 함수와 데이터를 사용하는 방식을 취한다.

너의 이름은 무엇인고?

my_ball = Ball() #객체 생성 my_ball.color #색, 속성 my_ball.size #크기, 속성 my_ball.bounce() #튕기기, 매쏘드



위의 예를 보면  my_ball이라는 객체를 정의한다. 객체는 클래스라는 것으로부터 정의된다. 클래스는 객체를 생성하는 생성자(constructor)의 역할을 한다. 생성자란 '도장(stamp)'와 같다. 즉, 같은 종류의 객체를 찍어낸다. 하지만 같은 종류라고 개별 객체는 다르다. 우리가 '인간'이지만 모두 다른 것처럼.

속성

속성은 데이터다. 객체를 나타내거나 객체의 행동에 필요한 자료다. 속성은 '할당'과 '호출'로 사용한다. 

할당

할당은 데이터를 넣는 것을 말한다.

my_ball.color='red'


데이터를 불러오면 호출이다. 할당 연산자(=)를 사용하지 않으면 호출이다.

my_ball.color


당연하지만, 호출값은 다른 곳에 저장할 수도 있다.

his_ball_color=my_ball.color


his_ball_color라는 변수에 my_ball의 color 속성이 전달된다.

매쏘드

매쏘드는 행동이다. 행동은 함수다. 직관적으로 기억하면 좋다. 함수는 입력과 출력을 전제로 한다. 입력이 없을 수도 출력이 없을 수도 있지만, 완전한 형태는 입력과 출력을 모두 정의한다. 

my_ball.bounce() my_ball.status 'down' my_ball.bounce() my_ball.status 'up' my_ball.touch_count '3'






매쏘드는 함수라서 괄호가 붙는다. 괄호는 입력값이 있음을 의미한다. bounce() 매쏘드를 호출하기 위해 먼저 이름 my_ball을 불렀다. 그리고 마침표로 bounce()를 호출했다. 이 함수는 공을 내리거나 올리는 함수라고 하자. 함수의 실행 결과로 down이나 up이 표시된다. 이 결과를 my_ball의 속성인 status에 저장한다고 하자. 그리고 터치를 한 횟수를 touch_count에 저장한다. 이제 bounce() 매쏘드를 실행할 때마다 my_all의 멤버 혹은 속성은 변화한다.

왜 객체?

객체는 프로그램 내에서 자기의 영역을 확고히 가지고 있는 독립된 프로그램으로 간주된다. 즉, 함수와 데이터를 다 묶어서 '소유'하므로 (프로그래밍의 본질은 함수와 데이터) 한 파이썬 프로그램 내에서도 독립된 '부품'과 같은 프로그래밍 코드의 지위를 획득한다. 

부품을 제작하여 붙이는 방식으로 프로그래밍하면 다음과 같은 장점이 있다.

첫째, 프로그래밍의 구조를 설계하기 쉽다.

둘째, 남의 부품을 가져다가 쓰기 좋다.

셋째, 이미 개발한 부품을 계량하여 사용하기 좋다.

넷째, 뭔가 잘못되었을 때 빨리 고칠 수 있다.


댓글 없음:

댓글 쓰기

PyR Intro - 신입생OT학기제