파이썬 클래스 정리, 핵심만 알고가자!
파이썬 클래스 정리, 핵심만 알고가자! — #파이썬클래스 AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다 파이썬 클래스는 필...
#파이썬클래스
AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다
파이썬 클래스는 필수다!
파이썬에 날개를 달 시간이 왔습니다. 바로 클래스를 공부하게 될텐데요. 클래스를 모른다고해서 프로그래밍에 지장이 없다고 하지만, 우리의 목표는 단순 프로그래밍을 넘어 생산성에 기여하는 것이기에, 클래스는 필수라고 생각됩니다.
클래스란 무엇인가?
클래스는 데이터와 함수를 효율적으로 관리할 수 있도록 돕는 파이썬에서 제공하는 기능입니다. 파이썬 자습서에는 C++과 모듈라 -3에서 제공하는 클래스를 혼합하여 만들었다고 되어있습니다.
흔히들 클래스를 붕어빵틀과 같은 맥락으로 비유하곤합니다. 붕어빵을 만들때 사용되는 붕어빵틀은 붕어빵이라는 결과물을 만들기 위해 여러가지 기능을 가지고 있습니다.
붕어빵틀이라는 클래스는 붕어빵이라는 결과물을 만들기 위한 함수를 가지고 있는 셈이 됩니다.
클래스를 이해하기
간단한 예시와 함께 클래스를 만들어 보겠습니다. 가장 간단한 예시는 역시나 계산기인 것 같습니다. 계산기는 계산할때 이전의 값을 기억해두고 있습니다. 예를들어 아래와 같이 5+3을 계산하는 상황을 생각해봅시다.
5+3 = 8로 간단하게 계산할 수 있었습니다. 여기에 +5를 한다면 어떻게 될까요?
기존의 8이라는 계산결과가 계산기 내부 어딘가에 저장되어 있어 8+5 = 13으로 정상적으로 작동합니다. 이처럼 계산기를 만들때는 계산할 함수식(클래스에서는 메서드)과 계산된 값(변수)을 저장할 공간이 필요합니다. 이런 기능을 클래스는 제공합니다.
다른 말로 표현해보자면, 클래스는 특정주제(계산)를 가지고 그 주제에 맞는 함수식(연산)을 내부에 작성합니다. 그리고 함수식의 결과물(변수)을 내부에 저장할 수 있습니다.
계산기라는 클래스를 만든다면, 사용자는 계산기 클래스를 사용하여 언제든지 계산기 기능을 사용할 수 있게됩니다.
클래스를 만들기
아무런 기능없는 클래스를 pass문을 활용하여 작성해보겠습니다.
| class Culc: pass |
|---|
| class ClassName |
|---|
함수 선언하듯이 class 이후 ClassName을 입력해주시면 됩니다. 단 첫글자는 대문자로 입력해야합니다.
클래스 선언
변수는 객체다
JavaScript사용하는 변수의 개념은 파이썬에서는 객체의 개념입니다. 이 객체에 클래스를 할당하여 매핑할 수 있습니다. (파이썬에서 객체는 포인터개념입니다) 참고
| a = Culc() |
|---|
이런식으로 클래스 객체를 만들 수 있습니다.
클래스 함수와 객체변수
메서드
클래스 내에서 선언된 함수는 메서드라고 불립니다. 이때 메서드의 선언은 파이썬이 함수형태를 띕니다. 단,들여쓰기는 주의하세요!
| class Culc: def data(self, first, second): self.first = first self.second = second |
|---|
클래스의 함수는 self를 인자로 받는 특징이 있습니다. 이때 self는 클래스를 선언한 객체 그자신이 됩니다. 예를들어 아래와 같이 변수를 클래스로 선언했다고 가정합시다.
| a = Culc() |
|---|
이때 data라는 함수에서 받은 self = a가 됩니다. 그리고 data를 실행하려면 아래와 같이 실행할 수 있습니다.
| a.data(4, 2) |
|---|
data()매서드의 인자 4와 2는 self.first, self.second에 들어갑니다. 이렇게 생성되는 변수는 객체변수라 부릅니다.
클래스의 기능만들기
더하기 기능만들기
이렇게 되면 클래스의 절반정도는 이해했다 할 수 있습니다. 원래 사칙연산은 더하기. 빼기, 곱하기, 나누기 기능을 만들어야 하지만, 이번글에서는 클래스와 내부 매서드에 대해 간단하게 알아보는게 목표입니다. 그러므로 더하기, 빼기만 구현하도록 하겠습니다.
| class Culc: def data(self, first, second): self.first = first self.second = second def add(self, first, second): self.first = first self.second = second return first + second def subtract(self, first, second): self.first = first self.second = second return first - seconda = Culc()print(a.add(4, 2))print(a.subtract(4, 2)) |
|---|
| 62 |
|---|
하지만, 제가 간과한게 있습니다. 보통 함수안에 선언된 변수는 함수내의 스코프에서만 사용이 가능합니다. 하지만 클래스의 경우는 객체변수라는 형태로 저장되기에 객체변수로 저장된 값이 다른 매서드에서도 사용이 가능합니다. 위 코드를 수정해보겠습니다.
| class Culc: def data(self, first, second): self.first = first self.second = second def add(self): return a.first + a.second def subtract(self): return a.first - a.seconda = Culc()a.data(4, 2)print(a.first, a.second)print(a.add())print(a.subtract()) |
|---|
| 4, 262 |
|---|
가장 처음 a.data(4, 2)를 주어 self.first와 self.second에 값이 각각 4, 2로 들어갔습니다. 이때 객체변수로 저장되었기에 add(), subtract()메서드에 별다른 값을 넣지 않아도 계산이 잘 되는 것을 볼 수 있습니다.
클래스의 생성자(Constructor)
클래스 생성자 소개
클래스에는 생성자라는 개념이 등장합니다. 어려울 것이 없습니다. 생성자는 그냥 매서드의 일종이기 때문입니다. 바로 클래스의 객체가 생성될때 자동으로 호출되는 메서드입니다.
생성자는 아래와 같이 작성할 수 있습니다.
| class Culc: def \_\_init\_\_(self, first, second): self.first = first self.second = second def add(self): return a.first + a.second def subtract(self): return a.first - a.seconda = Culc(4, 2)print(a.first)print(a.second) |
|---|
생성자는 객체 호출시 즉시 실행되기 때문에 객체생성시 클래스에 해당 값들을 전달해야합니다. a = Culc(4, 2)로 객체 생성과 동시에 바로 first, second값을 넣었습니다.
클래스의 상속
클래스 버전관리
클래스에는 또다른 유용한 기능을 제공합니다. 클래스를 만들다 보면 새로운 기능을 추가해야할 때가 있습니다. 열심히 새로운 기능을 만들었지만, 막상 만들고 나니 이전 버전이 더 좋아보이는 경우가 생길 수 있습니다. 이럴때 버전관리의 차원에서 클래스 상속을 이용할 수도 있습니다.
사용법은 역시나 간단합니다. 아래를 참고해주세요.
| class NewCulc(Culc): passc = NewCulc(4, 2)print(c.first, c.second) |
|---|
| 4, 2 |
|---|
새로운 클래스 NewCulc를 생성하고 Culc를 상속하였습니다. 이후 pass를 사용하여 아무 기능도 구현하지 않은 상태로 만들었는데요. 아무런 기능도 없는 새로운 클래스지만 기존 클래스를 상속 받았기 때문에 Culc의 메서드를 그대로 사용할 수 있습니다.
이정도면 클래스를 이해하는데 큰 문제는 없으리라 생각됩니다. 하지만, 처음 접하시는 분들은 심적인 부담감이 느껴지리라 생각됩니다. 저도 처음에 잘 이해되지 않았지만, 계속 보다보니 어느새 응용할 수 있게 된 것 같습니다. 다음에는 이 클래스를 활용하여 기존에 만들었던 Todo List를 클래스로 구현해보겠습니다.


