티스토리 뷰

반응형

안녕하십니까! Hun!입니다!


오늘은 저번 시간에 포스팅한 "파이썬의 클래스 개념과 정의방법"에 이어서 클래스의 생성자에 대해서 소개하도록 하겠습니다. 우선 복습차원에서 다시 클래스를 설명드리면 클래스란 물건을 만들기 위해 필요한 설계도면이고 클래스 내부에는 구성요소로 다양한 함수가 사용될 수 있는데 이런 클래스를 통해서 다양한 객체(물건)들이 만들어지는 것입니다. 또 클래스에서 사용되는 함수는 메서드라고 부른다고 합니다. 생성자란 객체가 클래스로부터 생성될 때 초기화를 시켜주는 역할로 클래스에 포함된 특별한 메서드이고 이 메서드의 이름은 '__init__'이라고합니다. 오늘은 생성자의 예시로 계산기 기능을 클래스로 표현하여서 사용하여보겠습니다.


class Calculator:

    def setdata(self, num1, num2):

        self.num1 = num1

        self.num2 = num2

    def add(self):

        result = self.num1 + self.num2

        return result

    def mul(self):

        result = self.num1 * self.num2

        return result

    def sub(self):

        result = self.num1 - self.num2

        return result

    def div(self):

        result = self.num1 / self.num2

        return result


위의 코드가 바로 계산기를 표현한 코드로 덧셈과 곱셈, 뺄셈, 나누기 기능을 포함하고 있습니다. 클래스의 이름은 'Calculator'이고 포함된 함수로 값을 입력하는 함수와 사칙연산을 표현한 함수로 구성된 모습을 볼 수 있을 것입니다. 사용방법은 전과 동일하게 어떤 이름에 대입해서 사용하면 되는데 아래의 코드처럼 깜빡해서 값을 입력하지 않는 경우에는 오류가 발생합니다. 



a = Calculator()

a.add()


'Calculator' 클래스를 'a'에 대입하여 'a'객체를 생성하고 'a'객체의 'add(덧셈)'함수를 실행한 모습인데 'setdata'함수에 먼저 값을 입력하지 않았기 때문에 'add'함수가 연산할 수 없어서 이런 오류가 발생하는 것입니다. 객체를 만드는 명령어와 값을 입력하는 명령어, 값을 이용하는 함수를 호출하여 결과를 나타내는 명령어들로 크게 3가지로 객체를 만들고 사용하는 형태가 구분되었습니다. 하지만 사람도 사람이기 때문에 깜빡할 수도 있는 거고 초기부터 객체를 생성할 때 값을 입력하거나 생성되자마자 어떤 결과 값을 출력하도록 하고 싶은 경우도 있을 것입니다. 바로 이때 생성자가 사용됩니다. 


class Calculator:

    def __init__(self, num1, num2):

        self.num1 = num1

        self.num2 = num2

    def setdata(self, num1, num2):

        self.num1 = num1

        self.num2 = num2

    def add(self):

        result = self.num1 + self.num2

        return result

    def mul(self):

        result = self.num1 * self.num2

        return result

    def sub(self):

        result = self.num1 - self.num2

        return result

    def div(self):

        result = self.num1 / self.num2

        return result


위의 코드가 생성자를 추가한 클래스로 메서드의 이름이 '__init__'인 부분이 생성자입니다. 이 메서드의 이름 말고는 다른 부분들은 생성자 아래의 'setdata'함수와 동일한 것을 볼 수 있는데 생성자와 'setdata'함수의 차이점은 아까 말했다시피 객체가 생성될 때 호출이 되는냐 마느냐의 여부입니다. 그럼 한번 생성자가 적용된 클래스를 사용해보도록하겠습니다.


b = Calculator(4, 2)

b.add()


바로 위의 예처럼 'Calculator' 클래스를 어떤 이름인 'b'에 대입하여서 'b' 객체를 생성하는 동시에 '4'와 '2'인 값을 입력해 덧셈함수인 'add'를 호출하여 실행하여주면 오류가 나오지 않고 연산된 값인 '6'이 결과로 나올 것입니다. 생성자가 적용된 클래스는 객체를 만들고 사용하는 형태가 2가지로 구분되는 모습으로 비교적 간결하고 초기에 출력되는 값이 있을 경우에 효과적이라고 생각됩니다. 하지만 'b = Calculator()'와 같이 아무런 값을 입력하지 않고 대입을 한다면 생성자 메서드가 인식을 할 수 없기 때문에 오류가 발생할 것입니다.


그 동안 클래스를 공부하고나서 가벼운 고찰을 말씀드리면 저는 맨 처음에 파이썬의 클래스를 접하였을 때 함수와 클래스가 비슷하다고 생각하였습니다. 그 이유는 B라는 이름에 A라는 함수를 대입하였을 때 B가 A 함수와 동일하게 수행될 수 있는데 클래스의 경우도 어떠한 이름에 클래스를 대입하여 객체를 생성하여서 이 구조가 비슷하다고 생각하여서입니다. 하지만 함수의 경우에는 대입하려는 함수는 값을 입력받아서 작업을 수행할 수 있지만 클래스의 경우는 클래스에 바로 값을 입력할 수 없고 생성된 객체만이 가능하다는 점을 착안하여서 클래스와 객체의 관계는 객체는 눈에도 보이고 만질 수 있지만 클래스는 눈에 보이지 않지만 실체가 분명히 있는 물체이고 서로 끈끈한 줄로 이어진 것과도 같다고 느꼈습니다. 이상으로 포스팅을 마치도록 하겠습니다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함