클래스(Class) 개념

장현웅·2023년 8월 26일
0

클래스(Class)란?


파이썬에서 클래스(Class)는 객체 지향 프로그래밍(OOP)의 핵심 개념 중 하나로, 데이터와 해당 데이터를 다루는 메서드를 함께 묶어놓은 틀(template)이다. 클래스를 사용하면 관련 있는 데이터와 동작을 하나의 단위로 묶어서 객체를 생성하고 다룰 수 있다.

  • 객체지향 프로그래밍 (OOP : Object-Oriented Programming)
    동일한 목적이나 기능을 하는 변수와 함수들을 각각 하나로 묶어서 object(객체)로 만들고 그 객체들끼리 상호 통신하면서 프로그램 전체가 돌아가도록 코드를 구성하는 것

  • 객체(Object)
    자신 고유의 속성을 가지는 물리적, 추상적인 모든 대상

  • 클래스(Class)
    객체들을 소프트웨어 내에서 구현하기 위해 만든 설계도

예를 들어, 아주 많은 몬스터들의 HP를 관리해야 하면?

방법 1. 리스트의 순서를 잘 지켜서 각 몬스터들의 hp를 잘 적어둔다. (중앙 한 곳에 모아서 관리)

방법 2. 몬스터마다 각자의 hp를 가질 수 있게 한다.

만약 뱀이 100마리 1000마리라면 뱀의 HP를 각각 자체적으로 관리해주는 것이 효율적이고 직관적임. -> 객체지향적

  • 객체지향
    각 객체에 그것들에 관련된 속성들을 넣어두고 컨트롤 할 수 있는 함수들을 넣어둔 후 한 곳에서 함수들만 불러서 각 객체들을 제어하는 것

삼각형을 프로그램으로 표현한다고 가정해보자.

  • 삼각형의 정보를 저장하려면 아래 삼각형을 표현하는 정보들이 필요하다.

    • 세 꼭지점을 나타내는 Point_A, Point_B, Point_C
    • 색을 나타내는 Color
    • 중심점의 위치를 나타내는 Position

    → 이들을 묶어서 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)는 일종의 '붕어빵 틀'과 같은 역할을 한다.

  • 위의 삼각형 클래스를 예로 들면 삼각형이 필요할 때마다 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이다.
    > 인스턴스 객체 생성은 클래스의 이름을 사용해 함수를 호출하는 형태이다.
    
  • 아무런 제한 없이 삼각형 내부 정보에 접근하거나 정보를 변경할 수 있으면 삼각형 본연의 특성조차 잃어버릴 수 있어서 클래스에서는 데이터와 내부 함수를 외부에서 접근할 수 없게 한다.

추가적으로 사각형, 원 등의 도형을 프로그램으로 표현하려고 한다.

  • 각 도형마다 공통적으로 사용되는 데이터(Color, Position)와 함수(ChangeColor(), Move(), Rotate())가 중복된다. 이를 최소화하기 위해서 각 도형 클래스의 공통된 부분을 부모 클래스(상위 클래스)로 두고, 자식 클래스(하위 클래스)는 이것을 받아서 각 특성을 추가한다. 부모 클래스로부터 공통된 요소를 물려받는 관계를 '상속관계'라고 한다. 부모 클래스가 둘 이상인 경우를 '다중 상속'이라고 한다.

0개의 댓글