선미 파이썬 0329 14일차
hiblue
Shanmei (토론 | 기여) 사용자의 2018년 3월 29일 (목) 21:23 판 (새 문서: <pre> # 10_OOP #객체지향프로그래밍은 쉬운게 아니다. #파이썬에서 배우는 이유 혹은 목적은 자유자재로 다루기 위한 것이 아니라 어떠한 프...)
# 10_OOP
#객체지향프로그래밍은 쉬운게 아니다.
#파이썬에서 배우는 이유 혹은 목적은 자유자재로 다루기 위한 것이 아니라 어떠한 프로그램을 만들 때 이미 만들어진 기능을 가져다 써야 한다(라이브러리 등을 다운받거나 설치해서 사용)
#클래스로 만든 것이 많다. (가져다 쓸 때 어떤 원리인지, 어떻게 써야하는지 알아야 하기 때문에 클래스가 어떤 기능인지, 어떻게 써야하는지 알 수 있다.)
#>>이미 만들어진 클래스를 읽고 이해하기 위한 목적
def add(a, b) :
print(a+b)
return a+b
print(add(1, 2))
'''
OOP : 오브젝트 오리엔티드 프로그램 : 객체지향프로그래밍(>객체를 사용하는 프로그래밍-자바나 다른 프로그래밍 언어에도 있다.-)
(클래스와 객체)
- 객체지향이론
실제 사물(객체)로 이루어져 있으며 실제 세계에서 발생하는 사건들은 사물(객체)간의 상호작용이다.
- 특징(장점)
1. 코드의 재사용성이 높다.(함수의 높은 재사용성 : 한 번 만들어놓으면 영구히 사용할 수 있음)
2. 코드의 관리가 용이하다.( 코드 수정, 유지, 보수 측면)
3. 신뢰성이 높은 프로그래밍을 가능하게 한다.
- '클래스'와 '객체' (결국 객체지향 프로그래밍이라는 것은 클래스와 객체를 다루는 것)
>''<font color="red">클래스</font>''는 설계도 또는 틀(객체를 만들기 위한)
>객체는 그 설계도를 통해 만들어진 실재 사물
>객체라는 실제 사물을 만들기 위한 설계도일 뿐, 설계도는 물건이 아니다.
>아이폰6의 설계도와 아이폰6(물건)
>자동차 공정(소나타)와 실제 생산품인 소나타 1 2 3이 성격은 동일하지만 같은 물건이 아니듯 객체도 같은 속성을 가질 뿐 같지 않다.
- 클래스 :
-정의 :객체를 정의해놓은것
-용도 :객체를 생성
- 객체(오브젝트)
- 정의 : 실제로 존재하는 것
- 용도 : 객체가 지닌 기능과 속성에 다르다.
기능과 속성은 클래스가 정의한다.
- 책상, 의자, 컴퓨터, 자동차, 모니터 등등 실재가 있는 것
- 객체와 인스턴스
>인스턴스 : 사례, 경우, 실체
- '기본적으로 객체와 같은 의미'
- 클래스를 통해 실제로 만들어진 객체를 '인스턴스'라고 부른다.
>>철인 설계도(클래스)로 철인 객체를 만들 수 있다. 이 때 만들어진 철인 28호는 인스턴스이다.
- 객체의 구성 요소 : 속성과 기능(클래스에서 정의) 예)자동차라는 클래스에서 자동차는 주행한다(기능) 선루프가 열린다(기능) 색은 빨간색이다(속성) >>>기능 : 함수( *클래스 내부의 정의된 함수는 매소드라고 부른다), 속성 : 변수
>>>>클래스는 변수+함수로 만든다!!!!!
다수의 변수와 함수를 가질 수 있다. (정의할 수 있다.) >>>목적에 따라서(정해진 규칙은 없다.)<<<
예) 철인이라는 클래스가 있다. 클래스를 정의할 때는 속성과(변수) 기능(함수)이 있다.
속성 : 변수 : 이름(28호), 남은연로, 무기이름, 내구도(hp)
기능 : 함수 : 달리기, 날아가기, 공격하기, 자폭하기(hp가 0일 때)
>>>이렇게 클래스와 기능을 정의하는 행위를 '설계'라고 한다.
* 초보 개발자는 원래 클래스의 설계를 하지 않는다.
'''
print("=============oop=====================")
#일단 클래스를 정의하고 객체를 만들어서 사용해보기
class car : # car<작성하는 설계도의 이름,
# : 이하부터 클래스 설계 시작! 변수, 함수 만들기. 설계이기 때문에 여기 작성된 코드는 효력이 없다.
#클래스 안의 함수 정의, 이 때 정의된 함수는 매소드라고 부름
def power_on(self) : # 시동켜는 기능
print("부릉부릉~!")
self.power = True # 변수 만드는 형태
#클래스 내부에 정의하는 함수 첫 번째 매개변수는 반드시 필요함.
#첫 번째 매개변수에 전달되는 값은 함수를 호출하는 인스턴스이다. 즉 bmw.power_on일때 셀프에 전달되는 값은 비엠덮, 셀프.파워=트루는 비엠덮=파워=트루와 같다.
#굳이 셀프에 전달하지 않아도 자동으로 전달된다. 함수를 호출하는 나 자신이 되기때문에 self라고 사용(이름 달라도 괜찮지만 관용적 표현)
#객체 생성(만들어지는 실체는 인스턴스라고 부른다.)
#인스턴스명=클래스명
bmw = car() #함수의 코드 수행과 유사하긴 한데 함수처럼 코드가 수행되는 것은 아님.
tico = car()
# (1) 카 코드를 통해 인스턴스가 생성된다.
# (2) 코드를 통해 생성된 인스턴스를 비엠덮 변수가 가리킴
####예를들어 자동차공장이라는 클래스가 있으면 생산되어 나온 차(car) 1을 가리키는건 bmw고 다른 카 2를 가리키는건 티코
#비엠덮과 티코는 같은 공장에서 나온 자동차이지만 다른 객체가 됨(같은 설계도를 통해 한 대 한 대 따로 뽑아진 객체들이다.)
print(type("나는 문자열"))
# >>>>> int, str등은 클래스이다. 클래스는 문자열로 되어 있다.
print(type(1))
print(type(bmw))
##카는 클래스???? 이므로 비엠덮은 아래와 같이 사용할 수 있다.
bmw.power_on()
## 문자열 클래스인 str의 예상 설계도 >>>코드 배끼기
'''
만약
bmw = car()
tico = car()
car()
이런 코드라면 나온 자동차는 세개인데 하나는 이름(변수??)가 없어서 정의할 수 없다. 이렇게 사용ㅇ되는 경우도 많다.
'''
print()
print(bmw.power)
print(tico.power) #오류가 나는 원인 : 비엠덮은 파워온을 호출하면서 매소드 내부에서 셀프.파워도 호출했음(코드를 수행) 이 때 비엠덮 자동차에는 파워라는 속성이 생성, 그러나 티코는 파워온을 호출하지 않았기 때문에 파워라는 속성이 없다.
#파이썬에서는 새로 만든 속성을 추가할 수 있는데 자바나 씨쁠쁠에는 설계도에 없는 것을 새로 추가할 수는 없음.