ssoL2 TISTORY

[기초 PYTHON 프로그래밍] 20강. 클래스와 객체 본문

com/python

[기초 PYTHON 프로그래밍] 20강. 클래스와 객체

ssoL2 2020. 12. 25. 10:55

- 객체(object) : 파이썬에서 모든 데이터와 함수는 객체이다.

 

모든 데이터는 객체이다 / 수치형 및 군집 자료형의 type을 보면 <class '...'> 형태로 나온다. 여기서 공통적으로 class를 갖고 있다

 

모든 함수는 객체이다 / 사용자 정의 함수, 내장함수 등의 type을 보면 <class '...'> 형태로 나온다. 여기서도 공통적으로 class를 지니고 있다

 

- 모든 데이터 및 함수의 type을 확인하면 <class '...'> 형태를 공유

 


 

- 클래스(class) : 객체(object)를 만들기 위한 도구이며, 현실 세계의 모든 물체들을 객체로 생성 가능

 

클래스(class)의 구성 1. 속성 2. 메소드 3. 생성자, 소멸자 4. 연산자 중복

 

- 속성 : 객체를 구성하는 데이터

- 메소드 : 클래스 안에서 속성에 대해 어떤 기능을 수행하는 함수

- 생성자, 소멸자 : 객체 생성과 소멸 시에 자동 호출되는 특별한 메소드

- 연산자 중복 : 연산자(+,- 등) 기호를 이용하여 표현할 수 있도록 함

 

- 생성자는 def __init__(self,...) : 으로 정의 / 소멸자는 def __del__(self,...) : 으로 정의

 

- 강아지를 클래스를 이용하여 객체로 표현하기

 

강아지 클래스 

 

- class 정의시 기본적으로 docstring을 통해 """ class 설명과 객체 속성 설명함 """

- 모든 메소드는 첫 번째 인수로 self가 들어가야 함

- 객체 생성 시 생성자 메소드 __init__ 이용하며 self 다음으로 속성으로 매개변수 잡음

 

강아지 클래스 예시

 

- 알고리즘 순서 

1. x = Dog('Jack', 3)

   Dog 이라는 클래스에 인수로 'Jack'과 3을 담음

   -> __init__ 메소드에 name : 'Jack', age=3인 객체가 생성됨 

   -> 이 객체는 x이며 이때 self가 x인거임

2. y = Dog('Daisy', 2)

   Dog 이라는 클래스에 인수로 'Daisy'과 2을 담음

   -> __init__ 메소드에 name : 'Daisy', age=2인 객체가 생성됨 

   -> 이 객체는 y이며 이때 self가 y인거임

3. x.bark()

   x 라는 객체에 대해서 bark() 메소드를 호출

   -> 객체 x에서 호출했으므로 self는 x이며 print하기 위해 self.name을 호출

   -> print 함

   -> Jack is barking

4. y.bark()

   y라는 객체에 대해서 bark() 메소드를 호출

   -> 객체 y에서 호출했으므로 self는 y이며 print하기 위해 self.name을 호출

   -> print 함

   -> Daisy is barking

5. print(x.name, 'is', x.age, 'years old.')

   x라는 객체에 대해 name 속성과 age 속성 호출

   -> print 함

   -> Jack is 3 years old

6. print(y.name, 'is', y.age, 'years old.')

   y라는 객체에 대해 name 속성과 age 속성 호출

   -> print 함

   -> Daisy is 2 years old

 

-원(circle)을 클래스를 이용하여 객체로 표현하기

 

원(circle) 클래스 이용하기

 

- 기본적으로 클래스(속성) 형태이다 !!!!!!!!!! 인자가 클래스 객체 속성임

- 이것도 위의 순서와 비슷하다.

  대충, circle 클래스에 인수로 속성 5가 와서 c1이라는 객체 생성 이후 객체 메소드 참조 

 

- list 클래스

- 위의 Dog 클래스와 circle 클래스 처럼 사실은 리스트(list)도 클래스였다!!

 

list에서 사용가능한 메소드 / 그래서 앞에서는 파란색 메소드만 다뤘지만 __함수이름__ 도 사실 특정 메소드이다.

 

list 클래스 

 

- 그래서 리스트 생성 시 L1 = [1,3,5] 처럼 속성만 썼지만 L2 = list([2,4,6]) 처럼도 생성 가능

  (list도 클래스이므로 클래스(속성) 형태이므로 이렇게 객체 생성)

- 그러나 리스트를 많이 이용하는 파이썬에서 생략 가능해도 객체 생성 되도록 만든 것

- 고로, list도 사실은 클래스이다.

 


 

- int 클래스

 

int 클래스에서 사용가능한 메소드 

 

- 빨간색으로 되어있는 메소드는 비교 연산자 / 파란색으로 되어있는 메소드는 계산 연산자

- int 클래스에 있는 비교 연산자와 계산 연산자는 현재 간략히 표현되고 있음

 

int 클래스의 비교 연산자 계산 연산자

 

- list 클래스의 객체 생성과 마찬가지로 int 클래스도 y = int(20) 처럼 객체 생성이 원리

  but 파이썬 기술의 생략으로 간략히 y = 20 으로도 객체 생성이 가능 했던 것

- 이처럼 계산 연산자도 사실 메소드로 쓰는 것이 원리 ex) z = x.__add__(y)

  but 주석 #z=x+y 처럼 파이썬 기술의 편리성으로 메소드 대신 + 연산자로 대체 가능

- 이는 equalize에서 스펠링을 가져온 __eq__ 메소드도 == 으로 대체 가능

- grater than에서 스펠링 가져온 __gt__ 메소드도 > 로 대체 가능

 

- 이런 방법으로 메소드가 편리하게 대체되고 있던 것이다. 이것이 원리다 !!

 

- 이렇게 연산자 메소드를 연산자와 중복해서 사용할 수 있다는 뜻에서 연산자 중복

 

수치 연산자 메소드

 

- 연산자 중복 예제 : 좌표 클래스 만들기

 

연산자 중복 예제 - 좌표 클래스 

 

- 좌표를 만들어주는 Point 클래스 

- 속성은 x좌표 y좌표 있으며 생성자 매개변수로 예전에 배운 기본값 인자 사용 중

- get 메소드는 좌표 모양을 나타내는 표시

- 좌표끼리 더하는 __add__ 메소드 즉, 연산자 중복으로 + 연산자 이용해서

  (p3 = p1.__add__(p2) 대신에 p3 = p1+p2 사용)

  두 좌표를 각각 x, y 좌표 더해서 Point(newX, newY)를 반환하므로써 새로운 객체 생성

 


 

- 클래스가 저장된 파일을 모듈로 사용 가능

 

클래스 파일을 모듈로 사용 가능

 

Comments