생활속 보물창고 : 일상 속 유용한 정보를 공유드립니다.

안녕하세요 엘빈입니다. 파이썬에서 중요한 개념 두가지가 있습니다. 하나는 이전에 정리했던 함수입니다. 함수는 반복되는 구문을 줄여주고 더 효율적인 코드를 작성할 수 있게 합니다. 다른 하나는 바로 클래스인데요.

 

 

 

 

 

클래스는 파이썬 뿐만 아니라 객체지향의 개념을 내포한 모든 언어에 존재합니다. 객체지향은 프로그래밍의 역사를 뒤바꾼 아주 중요한 개념인데요. 이 개념의 핵심이 바로 클래스입니다. 이번 포스팅에서는 프로그래밍에 입문할 때 가장 많이 헷갈려하면서 어려운 개념인 클래스의 기본 개념들에 대해서 알아보겠습니다.

 

 

 

  클래스의 탄생 이유와 기본 구조

 

클래스가 탄생한 이유를 알기 위해서는 객체 지향의 개념을 알아야 합니다. 객체지향이론 또한 함수와 같이 반복을 없애고 효율적인 코드를 작성하기 위해 탄생하였습니다. 간략히 말하자면 존재하는 모든 물체를 객체라고 말하며 물체의 기능과 특성을 객체 구문으로 작성하는 것입니다.

 

 

 

 

예를 들어 "더하기 연산 가능"이라는 기능이 있습니다. 세상에 존재하는 물체 중 이 기능을 가진 물체는 무엇이 있을까요? 대표적으로 계산기가 있겠군요! 하지만 계산기만 이 기능을 가진 것이 아닙니다. 컴퓨터, 스마트폰도 더하기 연산이 가능하죠.

 

 

컴퓨터,스마트폰,계산기는 분명 더하기 연산 기능을 가지고 있지만 분명 다른 물체입니다. 우리는 이 세가지를 개별적으로 취급하려고 합니다. 그렇기에 계산기,컴퓨터,스마트폰 세가지를 객체 개념으로 구분하여 이 객체 구문 안에 더하기 연산 기능 함수를 포함시키는 것이죠. 더하기 연산은 객체가 가지고 있는 기능들 중 하나에 불과하며 각 객체의 특성에 맞게 다양한 기능을 구문 안에 내포합니다.

 

 

세가지 객체의 더하기 속도는 모두 다를 것입니다. 예를 들어 계산기의 속도를 2라고 할때 스마트폰은 10, 컴퓨터는 20이라고 합시다. 이 경우도 속도가 다르다는 것을 구별하기 위해 객체 구문 안에 속도 변수 "speed"를 포함시키고 값을 제각각 지정합니다.

 

 

 

 

class Computer:

    speed = 20

    def add(self,a,b):
        return a+b

class SmartPhone:
    speed = 10
    
    def add(self,a,b):
        return a+b

class Calculator:
    speed = 2

    def add(self,a,b):
        return a+b

computer1 = Computer()
computer2 = Computer()

print(computer1.add(1,3)) # 4

 

 

그리고 이 객체의 형태를 틀로서 만들기 위해 클래스를 사용합니다. 우리는 클래스 구문을 이용해 여러 개의 객체를 만들 수 있죠. 예를 들어서 컴퓨터 클래스의 틀을 이용해 여러 개의 컴퓨터 객체들을 만들어낼 수 있습니다.

 

자 그럼 용어 정리를 해봅시다. 이제부터 클래스를 다룰때 사용하는 언어의 의미는 다음과 같습니다.

 

클래스 - 객체를 만들기 위한 틀
객체 - 클래스 형태를 토대로 만들어진 물체
메소드 - 클래스 구문에 포함된 함수, 객체의 기능을 나타냄
변수 - 클래스나 객체의 속성을 나타냄. 객체 변수와 클래스 변수 두가지로 나뉜다.

 

즉 클래스의 기본 구조는 다음과 같습니다.

 

Class 클래스명:
     변수 = 값 (없어도 된다)
     Def 메소드명(self,매개변수)
          메소드 구문

 

메소드 안에 self가 보이는데요.  Self 란 객체 자기 자신을 뜻하는 용어로 메소드 매개변수로 꼭 포함시켜야 합니다.

 

 

 

 

 

 

 클래스 생성자

 

클래스 생성자란 객체 변수를 초기화하기 위한 메소드입니다. 여기서 중요한 점은 객체 변수라는 것입니다. 메소드 바깥에 선언된 모든 변수는 클래스 변수입니다. 클래스 변수와 객체 변수의 차이점을 간략히 말하자면 클래스 변수는 객체들간에 공유되는 변수이고 객체 변수는 객체가 생성되면 그 객체만이 가지는 유일한 변수입니다. 이 둘은 예제 코드로 간략히 알아본 뒤 나중에 포스팅으로 자세히 다루겠습니다.

 

 

class Computer:
    classNum = 0
    
    def setValue(self , num):
        self.objNum = num

cp1 = Computer()
cp2 = Computer()

cp1.setValue(10)
cp2.setValue(20)

print("cp1 : {0} cp2 : {1}" .format(cp1.objNum,cp2.objNum)) # cp1 : 10 cp2 :  20

Computer.classNum = 20

print("cp1 : {0} cp2 : {1}" .format(cp1.classNum,cp2.classNum)) #  cp1 : 20 cp2 :  20

 

코드를 보면 "classNum"는 클래스 변수이며 "objNum"는 객체 변수입니다.  클래스 변수는 객체마다 개별적인 것이 아니라 공유된다는 점을 기억하시면 됩니다.

 

 

코드와 같이 "setValue" 메소드를 통해 객체 변수를 초기화해주는 방법이 있습니다. 하지만 파이썬은 객체 변수 초기화 메소드를 좀 더 간편하고 구별할 수 있는 "생성자"를 제공하고 있습니다.

 

 

생성자는 객체 변수를 초기화하기 위한 특별한 메소드입니다. 다음 생성자 예제 코드를 살펴봅시다.

 

 

 

class Computer:
    def __init__(self,a,b):
        self.num1 = a
        self.num2 = b

cp1 = Computer(10,30)

print("num1 : {0} num2 : {1}" .format(cp1.num1,cp1.num2)) # num1 : 10 num2 : 30

 

코드와 같이 메소드 명에 "__init__"을 작성하고 똑같이 매개변수와 객체 변수를 통해 초기화시켜주시면 됩니다.

 

 

클래스마다 생성자가 꼭 있어야하는 것은 아닙니다. 하지만 생성자를 사용하면 좀 더 쉽고 다른 메소드와 구별 가능하게 변수들을 초기화 시킬수 있으므로 활용하시는 것을 추천드립니다.

 

 

 

 


마무리

지금까지 클래스 기본 개념들에 대해서 알아보았습니다. 클래스는 정말 중요한 개념입니다. 한번 잘 알아두면 파이썬 뿐만 아니라 다른 프로그래밍 언어에서도 쉽게 적용할 수 있으니 꼭 숙지하시기 바랍니다. 포스팅 읽어주셔서 감사합니다.

 

 

이전글

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band