관리 메뉴

FU11M00N

[Python] 파이썬 클래스와 메소드 ,객체,변수 본문

Programming/Python

[Python] 파이썬 클래스와 메소드 ,객체,변수

호IT 2020. 11. 10. 16:34

- 객체지향프로그램(Object-Oriented Program, OOP)

• OOP는 설계도에 해당하는 클래스(Class)와 실제 구현체인 인스턴스 (Instance)로 나눔

주체 의미
Class 동일한 목적을 달성하기 위해 저장공간과 기능을 하나로 묶은 것(Encapsulation)
class Object 클래스와 동일한 의미로 사용하는데 특정 클래스를 구체적으로 지
정하기 위해 사용
Object(Instance)  클래스를 자료형으로 해서 생성된 객체
Method 클래스 안에 정의된 함수
 Member & Static variable  클래스 안에 정의된 변수
Attribute(속성) 클래스 안에 있는 모든 것
Inheritance(상속) 하위 클래스가 상위 클래스의 모든 속성을 물려받는 것
Super Class(Base Class) 다른 클래스의 상위 클래스
 Sub Class(Derived Class) 다른 클래스로부터 속성을 물려받는 클래스
 Multiple Inheritance(다중상속) 2개 이상의 클래스로부터 상속받는 것
Polymorphism(다형성) 동일한 코드가 상황에 따라 다르게 반응하는 것

 

- 클래스와 객체

– 똑같은 무엇인가를 계속해서 만들어낼 수 있는 설계도면
– 1개의 클래스는 무수히 많은 객체를 만들 수 있다.

>>> a = Bread()
>>> b = Bread()

 

• Object

 

– 클래스에 의해 만들어진 피조물
– 객체별로 독립적인 성격을 갖는다
– 동일한 클래스에 의해 생성된 객체들은 서로에게 전혀 영향을 주
지 않는다.

 

객체(Object) = 속성(Attribute) + 기능(Method)


• 클래스를 자료형으로 해서 메모리 할당을 한 데이터

 

 

 

1. 파이썬에서는 클래스도 하나의 객체
2. 속성 : 사물의 특징

num = 123 # 자료형 : int, 변수: num 
my_car = Car() # 자료형 : Car 클래스, 객체 : my_car 



객체 대신 인스턴스(Instance)라는 용어를 사용하기도 함.


• 클래스가 설계도, 객체는 그 설계를 바탕으로 실체화한 것이라는 뜻에서 유래
한 용어
• 객체뿐 아니라 변수도 인스턴스라고 부름.
• 자료형을 메모리에 실체화한 것이 변수이기 때문임.


클래스는 다음과 같이 class 키워드를 이용하여 정의.

 

class 클래스명: 
코드블록 


클래스의 코드블록은 변수와 메소드(Method)로 이루어짐.

 

 

• 메소드(Method)
- 객체 지향 프로그래밍의 기능에 대응하는 파이썬 용어
- 함수와 거의 동일한 의미이지만 메소드는 클래스의 멤버라는 점이 다름
• 변수
- 클래스 변수 : 클래스 내부에 선언된 변수
- 인스턴스 변수 : self가 붙어 있는 변수

 


객체의 멤버(메소드와 데이터 속성에 접근하기)
• 객체의 멤버에 접근할 때는 점(.)을 이용.

my_car = Car()

print(my_car.color)

 

 

 

• 예) 자동차의 속성 : 바디의 색, 바퀴의 크기, 엔진의 배기량


 기능 : 어떤 것의 특징적인 동작

 

 

• 예) 자동차의 기능 : 전진, 후진, 좌회전, 우회전

 속성과 기능을 들어 자동차를 묘사하면?

 

• “16인치의 바퀴를 가진 2,000cc의 빨간 차는 전진, 후진, 좌회전, 우
회전의 기능이 있다.”

 

 

다음과 같이 묘사한 자동차를 코드로 표현

 

• “16인치의 바퀴를 가진 2,000cc의 빨간 차는 전진, 후진, 좌회전, 우회전의 기 능이 있다

color = 0xFF0000 # 바디의 색
wheel_size = 16 # 바퀴의 크기
displacement = 2000 # 엔진 배기량
def forward(): # 전진
pass
def backward(): # 후진
pass
def turn_left(): # 좌회전
pass
def turn_right(): # 우회전
pass

 

- 다음과 같이 묘사한 자동차를 클래스 코드로 표현.

 

• “16인치의 바퀴를 가진 2,000cc의 빨간 차는 전진, 후진, 좌회전, 우회전의 기능이 있다.”

 

class Car:
def __init__(self):
self.color = 0xFF0000 # 바디의 색
self.wheel_size = 16 # 바퀴의 크기
self.displacement = 2000 # 엔진 배기량
def forward(self): # 전진
pass
def backward(self): # 후진
pass
def turn_left(self): # 좌회전
pass
def turn_right(self): # 우회전
pass

 

 

- 메소드

- 메소드 생성

 

메소드를 클래스 내부에 선언할 때는 첫번째 매개변수는 무조건 현재

- 클래스의 객체 가 되어야 함

 

관습적으로 self 라는 단어를 이용
두번째 매개변수부터는 사용자가 정의할 수 있음
예) def add(self, num):

 



 - 메소드를 호출하는 방법

 

 1. 클래스 이름을 이용한 호출(언바운드 호출)

        클래스이름.메소드이름(인스턴스이름, 매개변수)

 



2. 인스턴스 이름을 이용한 호출(바운드 호출)

        인스턴스이름.메소드이름(매개변수)

 

 


3. 클래스 내부에서 자신의 클래스에 속한 메소드를 호출

        self.메소드이름(매개변수)

 

class Student:
	def start(self):
	     print("안녕하세요")
	def printName(self,name):
	     print("이름은 {0} 입니다. ".format(name))

stu = Student()
Student.start(stu)        #<----- unbound 호출: 클래스명.메소드
stu.printName("김찰스")       # <---- bound 호출 : 인스턴스.메소드

결괏 값

- 변수

 

클래스 내의 변수 생성

 

• 메소드 외부에서 선언하면 클래스 변수

 

- 클래스 내부에 1개만 만들어지며 클래스 이름으로 접근할 수 있고 객체 이름으로
도 접근해서 사용할 수 있게 됩니다.
- 클래스 변수는 클래스 이름을 이용해서 수정하면 클래스 변수가 수정되지만 객체
이름으로 수정하면 객체 각각의 데이터가 만들어집니다.

 

• 메소드 내부에서 self와 함께 선언되면 인스턴스 변수

 

- 각 객체 내부에 각각 만들어지며 객체 이름으로만 접근해서 사용할 수 있음
- 메소드 내부에서 self.과 함께 변수를 선언하지 않으면 그 변수는 메소드의 지역변
수가 됨

 

변수 예제 코드

 

Comments