본문 바로가기
Python/객체지향 및 자료구조

객체(인스턴스)/객체 지향 프로그래밍

by hooni40 2021. 5. 6.
728x90
반응형

안녕하세요, 개발자로 이직을 꿈꾸는 직장인입니다!

파이썬을 깊게 공부하기 위해 객체지향과 자료구조에 대해 공부하여 정리하려 합니다.

[파이썬 문법까지 정리하면 시간이 오래 걸릴 것 같아 생략하겠습니다 ㅠㅠ]

 

우선 객체란 뭘까요?

객체속성/행동으로 이루어진 존재.

ex) 자동차는 색/차 길이 등의 속성이 있고 시동을 켜고 액셀을 밟으면 앞으로 가는 행동을 할 수 있습니다.

 

여기서 객체는 실제로 존재하는 것 외에도 가상으로 존재하는 것도 객체라고 할 수 있습니다!

ex) 스타크래프트의 마린은 체력/공격력 등 속성을 가지고 있고 공격/스팀팩 등 행동을 할 수 있습니다!

 

 

그럼 객체 지향 프로그래밍은 무엇일까요?

객체 지향 프로그래밍이란 프로그램을 여러 개의 독립된 객체들과 그 객체들 간의 상호작용으로 파악하는 프로그래밍 접근법입니다.

ex) 스타그래프트의 벌처를 생각해볼까요?

벌처의 속성은 체력/공격력/이동속도/마인 개수가 있습니다. 행동으로는 탄을 발사한다/이동한다/지뢰(마인)를 심는다.

마인 또한 객체로 볼 수 있습니다. 마인은 속성으로 체력/공격력, 행동으로는 부딪히면 터지는 행동이 있습니다!

 

이제 벌처와 마인 간의 상호작용을 생각해보겠습니다.

벌처가 마인을 심으면 마인 객체가 생성되며 벌처의 마인 개수가 감소합니다. 만약 저글링이라는 객체를 만든다면?

저글링이 마인과의 상호작용을 하게 됩니다. (마인은 저글링을 만나 펑! 터지고 저글링의 체력은 0이되고...)

 

객체 지향 프로그래밍으로 프로그래밍을 만드는 방법을 크게 3가지 단계로 정리하였습니다.

① 프로그램에 어떤 객체들이 필요할지 정한다 ( 벌처/마인/저글링 등... )

② 객체들의 속성과 행동을 정한다 ( 각 유닛의 속성/행동 )

③ 객체들이 어떻게 소통할지 정한다 ( 벌처가 마인을 심고/ 마인이 저글링과 폭발 등)

 

윗 내용들이 제가 이해한 객체와 객체 지향 프로그래밍입니다.

 

파이썬에서는 클래스라는 것을 만들어 객체(인스턴스)를 만들 수가 있습니다.

아래 코드를 보시면 Unit이라는 클래스를 생성해 marine이라는 인스턴스(객체)를 만들어 보았습니다.

(참고. 파이썬에서 클래스의 첫 글자는 대문자를 써주자고 약속하였습니다! Unit의 'U')

 

class Unit():
	pass  #우선 생성하는 것만 확인하기 위해 pass 설정

#3개의 marine 객체를 만든다 -> !! marine1/2/3 은 서로 다른 객체이다
marine1 = Unit()
marine2 = Unit()
marine3 = Unit()

 

위의 코드에서는 Unit 클래스가 비워져 있는데요, 이제 마린(인스턴스)들에게 속성(변수)을 주겠습니다!

인스턴스의 변수를 정의하는 방법은

인스턴스 이름.속성 이름(인스턴스 변수) = "속성 값"

 

class Unit():
	pass  #우선 생성하는 것만 확인하기 위해 pass 설정

#3개의 marine 객체를 만든다 -> !! marine1/2/3 은 서로 다른 객체이다
marine1 = Unit()
marine2 = Unit()
marine3 = Unit()

#marine1의 속성 추가
marine1.name = "짱구"
marine1.email = "JJangu@naver.com"
marine1.password = "12345"

#marine2의 속성 추가
marine2.name = "철수"
marine2.email = "Ironwater@naver.com"
marine2.password = "123"

#marine3의 속성 추가
marine3.name = "훈이"
marine3.email = "hooni@naver.com"
marine3.password = "12"

 

marine1/2/3 모두 name/email/password라는 인스턴스 변수에 대해 각각 다른 속성 값을 가진 것을 확인할 수 있습니다!

인스턴스가 개인적으로 가지고 있는 속성을 인스턴스 변수라고 합니다! (name/email/password)

 

인스턴스 변수를 사용하는 방법은 인스턴스 이름.인스턴스 변수 이름으로 사용 가능합니다!

print(marine1.name)을 실행하면 '짱구'가 잘 나오는 것을 확인할 수 있습니다!

 

만약 정의되지 않은 인스턴스 변수를 사용한다면? 에러가 발생합니다. → 사용하기 전에 꼭꼭!! 정의하고 사용합시다!

728x90
반응형

'Python > 객체지향 및 자료구조' 카테고리의 다른 글

가변 타입 / 불변 타입  (0) 2021.07.04
클래스 메소드  (0) 2021.07.03
__str__ 메소드  (0) 2021.05.10
__init__ 메소드  (0) 2021.05.08
인스턴스 메소드 / 변수  (0) 2021.05.07

댓글