파이썬에서 클래스(Class)는 객체 지향 프로그래밍(OOP)의 핵심 개념 중 하나로, 데이터와 해당 데이터를 다루는 메서드를 함께 묶어놓은 틀(template)이다. 클래스를 사용하면 관련 있는 데이터와 동작을 하나의 단위로 묶어서 객체를 생성하고 다룰 수 있다.
객체지향 프로그래밍 (OOP : Object-Oriented Programming)
동일한 목적이나 기능을 하는 변수와 함수들을 각각 하나로 묶어서 object(객체)로 만들고 그 객체들끼리 상호 통신하면서 프로그램 전체가 돌아가도록 코드를 구성하는 것
객체(Object)
자신 고유의 속성을 가지는 물리적, 추상적인 모든 대상
클래스(Class)
객체들을 소프트웨어 내에서 구현하기 위해 만든 설계도
방법 1. 리스트의 순서를 잘 지켜서 각 몬스터들의 hp를 잘 적어둔다. (중앙 한 곳에 모아서 관리)
방법 2. 몬스터마다 각자의 hp를 가질 수 있게 한다.
만약 뱀이 100마리 1000마리라면 뱀의 HP를 각각 자체적으로 관리해주는 것이 효율적이고 직관적임. -> 객체지향적
객체지향
각 객체에 그것들에 관련된 속성들을 넣어두고 컨트롤 할 수 있는 함수들을 넣어둔 후 한 곳에서 함수들만 불러서 각 객체들을 제어하는 것
삼각형의 정보를 저장하려면 아래 삼각형을 표현하는 정보들이 필요하다.
→ 이들을 묶어서 Triangle 속성(attribute)으로 정의할 수 있다.
삼각형의 정보를 조작하고 다루는 함수 Set
ChangeColor() : 색을 변경하는 함수
Rotate() : 도형을 시계방향으로 회전시키는 함수
Move() : 중심점의 위치를 이동시키는 함수
→ 이 함수들은 오직 삼각형 Triangle의 데이터 정보를 변경하기 위한 함수이지만 외부에서 보기에는 관련이 있는지 유추하기가 힘들다. 그래서 Triangle의 속성(attribute)과 그 데이터를 변형하는 함수를 같은 공간에 묶고, 이것을 '클래스(Class)'라고 한다. 이 때, 클래스(Class)의 이름공간에 속한 멤버 함수를 '메서드'라고 부른다.
- Class(Triangle)의 속성(attribute) : Point_A, Point_B, Point_C, Color, Position
Class Triangle에 정의되는 공통 요소로 클래스 변수라고도 한다. 클래스 내에서 변수를 지정할때 사용한다. 자동차 클래스에서 "색상"이나 "모델"과 같은 특징.- 메소드 : ChangeColor(), Rotate(), Move()
클래스 내에서 정의된 함수로 클래스 함수라고도 한다. 자동차 클래스의 "가속"이나 "정지"와 같은 작업.
위의 삼각형 클래스를 예로 들면 삼각형이 필요할 때마다 class인 삼각형 틀로 삼각형을 하나씩 만들어내면 되는 것이다.
이렇게 만들어진 삼각형들을 '인스턴스(Instance)'객체라고 한다.
- 인스턴스(instance) 객체
같은 클래스에 속하는 개개의 객체로, 하나의 클래스에서 생성된 객체.
즉, 클래스가 구체화되어 클래스에서 정의된 속성과 성질을 가진 실제적인 객체로 표현된 것을 의미
'인스턴스'객체는 생성이 완료된 직후 원본 클래스와 동일한 데이터와 함수를 가지고 있다.
```
class Triangle : # 클래스 정의(선언)
color = "Red" # 멤버 변수(속성) : 메서드 밖에서 선언된 변수
...
def ChangeColor(self, color): # 멤버 메서드(기능) : 개체마다 독립적으로 수행하는 매서드로 첫 번째 인자로 self 키워드를 받는다.
...
def Print(self):
print("My color is {}".format(self.color))
T1 = Triangle() # 인스턴스 객체 생성
T1.color = "Blue" # 인스턴스 객체의 멤버 변수 값 변경
T1.ChangeColor(Blue) # 멤버 메소드 조작
T1.Print() # My color is Blue
T2 = Triangle()
T2.color = "Yellow"
T2.ChangeColor(Yellow)
T2.Print()
# 자체적으로 관리가 가능
# 속성접근자 ('.') : '객체이름.멤버 메서드' 혹은 '객체이름.멤버 변수'의 형태로 쓰임.
# 파이썬에서는 기본적으로 클래스, 인스턴스의 모든 멤버 변수와 메서드의 접근 권한이 public이다.
> 인스턴스 객체 생성은 클래스의 이름을 사용해 함수를 호출하는 형태이다.
아무런 제한 없이 삼각형 내부 정보에 접근하거나 정보를 변경할 수 있으면 삼각형 본연의 특성조차 잃어버릴 수 있어서 클래스에서는 데이터와 내부 함수를 외부에서 접근할 수 없게 한다.