안녕하세요. 문범우입니다.
이번 포스팅에서는 파이썬에서의 클래스(Class)에 대해서 알아보도록 하겠습니다.
1. 클래스(Class)는 왜 필요할까?
클래스는 도대체 무엇이고, 왜 필요할까요?
먼저 하나의 예시를 들어서, 보다 쉽게 이해해보도록 하겠습니다.
계산기 기능을 하는 adder라는 프로그램이 있습니다.
보다 쉬운 이해를 위해 단순히 덧셈만 계산한다고 가정합니다.
계산기는 단순히 두개 또는 세개의 숫자만 더하는 것이 아닙니다. 제가 입력하는 모든 숫자들의 합을 구해야합니다.
따라서 아래와 같은 모습을 가지게 될 것입니다.
위의 계산기 adder에서는 전역변수로 선언된, 초기값 0을 가진 result를 가져와 주어진 값을 더합니다.
따라서 해당 코드가 실행된 후에 result 값을 확인하면, 3+6+12 = 21의 값을 갖고 있을 것입니다.
그런데 특정 상황에 의해, adder라는 계산기가 두개 필요하다고 생각해봅시다.
예를 들어, 3+4+5 라는 연산과 9+10 이라는 연산을 한번에 진행해야 하는 것입니다.
이러한 상황을 고려해보면, adder라는 함수 하나보다는 adder_1과 adder_2가 필요합니다.
따라서 아래와 같은 코드가 구현될 것입니다.
네, 여기까지는 문제가 없는 것 같습니다.
그런데 위와 같은 adder라는 계산기가 5개, 10개가 필요할때는 어떡할까요?
2개를 구현했던 것처럼 하나하나 모두 직접 함수를 구현해야 할까요?
클래스의 개념을 익히면 위와 같은 상황을 매우 쉽게 해결할 수 있습니다.
위의 예시를 보시면서 어느정도 감히 잡혔을지 모르지만,
많은 곳들에서 클래스를 틀, 공장 등으로 비유하는 경우가 많습니다.
말 그대로 클래스는 틀 또는 공장과 같은 성격을 가지고 있습니다.
위의 상황에 이어서, Adder라는 클래스(class)가 있다고 가정합시다.
그럼 Adder는 덧셈을 구현하는 계산기를 만들어내는 틀 또는 공장이 되는 것 입니다.
이것을 코드로 나타내보면 아래와 같습니다.
위의 코드를 보시면 먼저 class Adder가 만들어 집니다.
__init__ 함수에 대해서는 조금 더 뒤에서 설명드리니 일단 넘어갑니다.
Adder 클래스를 확인하면 adder라는 함수가 있습니다.
해당 함수에서는 입력받은 num 값을 result에 더해서 반환하는 역할입니다.
이러한 클래스를 통해 그 아래에서 3개의 계산기를 손쉽게 만들어 냈습니다.
이렇게 클래스(class)는 틀, 공장과 같은 역할을 해서 자신의 형태와 같은 결과물(인스턴스)를 만들어 냅니다.
2. 클래스(Class)에서 self와 __init__
그럼 위의 코드에서 self는 무엇이고 __init__은 무엇일까요?
먼저 self는 단어 그대로 자기자신이라고 생각하시면 됩니다.
즉 위에서 생성된 adder_1, adder_2, adder_3 객체 모두 result라는 요소를 가지고 있습니다.
그런데 우리가 adder_2의 result가 궁금할 때 어떻게 호출할까요?
adder_2.result
를 호출함으로써 알 수 있게 됩니다.
또한, adder_2에서 adder라는 함수가 실행될 때 어떤 result를 참조하는지를 self를 통해 자기자신의 result를 참조한다고 알려줍니다.
그런데 이는 객체를 통해 함수나 변수를 호출할 때 생략될 수 있습니다. 때문에 adder라는 함수에서 self를 포함해 입력 인자2개를 받지만, 객체 자신을 통해서 해당 함수를 호출하면 self를 생략할 수 있습니다.
따라서 아래의 두 문장은 서로 일치하는 문장입니다.
Adder.(adder_2, 3) == adder_2(3)
그럼 두번째로, __init__ 은 무엇일까요?
간단하게 한 문장으로 말씀드리면,
인스턴스가 생성될 때 항상 실행되는 것입니다.
즉, 위의 Adder라는 클래스를 통해 adder_1, adder_2, adder_3 라는 세개의 인스턴스가 생성되었는데 각 인스턴스가 생성될 때 마다 __init__이라는 함수가 실행되어 각각의 인스턴스 모두 self.result = 0 이라는 문장을 실행한 것입니다.
또한 클래스(Class)에는 클래스 상속(Inheritance)과 오버로딩(Overloadging) 이라는 개념이 존재합니다.
하지만 이러한 것들 또한 위에서 설명된 내용들을 잘 이해한다면 쉽게 이해하실 수 있는 내용이기에 따로 설명은 생략하겠습니다.
이렇게해서 파이썬에서의 클래스(Class)에 대해서 알아보았습니다.
클래스는 프로그래밍을 하면서 매우 유용하게, 자주 사용되므로 꼭 직접 코드를 작성해보시면서 이해하시면 좋을 것 같습니다.
막히는 부분이 있거나 잘못된 부분이 있다면 언제든 말씀해주세요 :)
'프로그래밍 언어 > Python' 카테고리의 다른 글
파이썬(python) #16_ 모듈과 패키지 (0) | 2018.03.08 |
---|---|
파이썬(python) #15_ 클래스의 상속(Inheritance) (0) | 2018.02.27 |
파이썬(python) #13_ 사용자 입출력, 파일IO (0) | 2018.02.22 |
파이썬(python) #12_ 함수 알아보기 (0) | 2018.02.19 |
파이썬(python) #11_ 제어문(if문, while문, for문) (0) | 2018.02.16 |