프로그래밍 언어발행일 2023. 3. 6.원본 https://blog.naver.com/jword_/223036736181 ↗

파이썬 클래스 정리, 핵심만 알고가자!

파이썬 클래스 정리, 핵심만 알고가자! — #파이썬클래스 AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다 파이썬 클래스는 필...

#Languages#Naver Blog

#파이썬클래스

​

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 - second​​a = 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.second​​a = Culc()a.data(4, 2)print(a.first, a.second)​print(a.add())print(a.subtract())
4, 2​62

가장 처음 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.second​a = Culc(4, 2)print(a.first)print(a.second)​

생성자는 객체 호출시 즉시 실행되기 때문에 객체생성시 클래스에 해당 값들을 전달해야합니다. a = Culc(4, 2)로 객체 생성과 동시에 바로 first, second값을 넣었습니다.

​

클래스의 상속

클래스 버전관리

클래스에는 또다른 유용한 기능을 제공합니다. 클래스를 만들다 보면 새로운 기능을 추가해야할 때가 있습니다. 열심히 새로운 기능을 만들었지만, 막상 만들고 나니 이전 버전이 더 좋아보이는 경우가 생길 수 있습니다. 이럴때 버전관리의 차원에서 클래스 상속을 이용할 수도 있습니다.

​

사용법은 역시나 간단합니다. 아래를 참고해주세요.

class NewCulc(Culc): pass​c = NewCulc(4, 2)print(c.first, c.second)
4, 2

새로운 클래스 NewCulc를 생성하고 Culc를 상속하였습니다. 이후 pass를 사용하여 아무 기능도 구현하지 않은 상태로 만들었는데요. 아무런 기능도 없는 새로운 클래스지만 기존 클래스를 상속 받았기 때문에 Culc의 메서드를 그대로 사용할 수 있습니다.


이정도면 클래스를 이해하는데 큰 문제는 없으리라 생각됩니다. 하지만, 처음 접하시는 분들은 심적인 부담감이 느껴지리라 생각됩니다. 저도 처음에 잘 이해되지 않았지만, 계속 보다보니 어느새 응용할 수 있게 된 것 같습니다. 다음에는 이 클래스를 활용하여 기존에 만들었던 Todo List를 클래스로 구현해보겠습니다.