이번 포스팅은 Python-Middle의 첫 포스팅으로 클래스와 객체에 대해서 알아보도록 하겠습니다.
다른 프로그램 언어에서도 마찬가지이지만, 클래스는 굉장히 어려운 관문 중에 하나입니다.
그 이유는 클래스와 객체에 대한 용어의 정의와 사용 목적이 유사하면서도 다르기 때문입니다.
먼저, 클래스와 객체의 개념부터 알아보도록 하겠습니다.
클래스는 객체를 만들어 내기 위한 "틀"이고,
객체는 그 설계도를 가지고 만들어낸 결과물입니다.
또한, 클래스는 속성과 메서드로 구성되어있습니다.
속성과 메서드에 대해서는 아래 예제들을 통해서 알아보도록 하겠습니다.
예를 들어서 와플팬이 있다고 하면, 와플팬으로 같은 모양의 와플을 계속 만들어 낼 수 있습니다.
여기에서 와플팬은 클래스이고, 만들어진 와플은 객체입니다.
실제 코드를 보며 클래스를 왜 사용하는지 더보도록 하겠습니다.
크림과 토핑으로 구성된 각각의 플레인 와플과 초콜릿 와플이 있다면 이렇게 레시피를 정리할 수 있습니다.
# 각각의 메뉴와 메뉴의 크림, 토핑을 선언
menu1 = "플레인와플"
cream1 = "생크림"
toping1= "없습니다."
print(f'{menu1}은 크림은 {cream1}, 토핑은 {toping1}')
menu2 = "초콜릿와플"
cream2 = "초코크림"
toping2= "초크칩"
print(f'{menu2}은 크림은 {cream2}, 토핑은 {toping2}')
여기에 추가로 각 메뉴의 토핑을 확인하는 함수 check_toping을 선언하고, 각 메뉴의 토핑을 출력한 코드입니다.
# 토핑을 확인 하는 함수를 선언
def check_toping(menu, toping):
print(f'{menu}은 토핑은 {toping}')
check_toping(menu1, toping1)
check_toping(menu2, toping2)
실행 결과는 다음과 같이 표현됩니다.
위의 예와 같이 코드를 작성한다면, 메뉴가 추가될 때마다 메뉴 변수를 만들어 줘야 하고,
토핑을 확인하고 싶을 때마다 함수를 호출 작성해야 합니다.
이 코드를 클래스로 선언하면 어떻게 될까요?
다음은 와플 메뉴 및 토핑을 확인하는 동작을 클래스로 선언한 코드입니다.
wapple이라는 클래스를 선언하고, 생성 시에 menu, cream, toping을 선언하며,
토핑을 확인하는 check_toping 함수도 만들어집니다.
# class 선언
class wapple:
# Class 초기화
def __init__(self, menu, cream, toping):
self.menu = menu
self.cream = cream
self.toping = toping
print(f'{menu}은 크림은 {cream}, 토핑은 {toping}')
# 토핑 체크함수
def check_toping(self):
print(f'{self.menu}은 토핑은 {self.toping}')
실제 사용 코드를 보면 메뉴, 크림, 토핑을 입력해서 클래스를 만들고, 바로 토핑을 확인할 수 있습니다.
# 클래스 생성
plain = wapple("플레인와플", "생크림", "없습니다.")
choco = wapple("초코와플", "초코릿크림", "초코칩")
# 토핑 확인
plain.check_toping()
choco.check_toping()
실행시킨 결과는 다음처럼 일반 사용 때와 동일하게 출력됩니다.
wapple 클래스를 생성할 때,
class 내부에서 사용되는 menu, cream, toping 등의 특징을 나타내는 것들이 바로 클래스의 속성입니다.
그리고 check_toping과 같이 클래스에서 실행되는 함수나 동작이 메서드입니다.
또한 plain, choco처럼 클래스를 사용해서 만들어 내는 객체를 인스턴스라고 합니다.
그러면 직접 선언한 위의 방식보다 클래스의 사용할 때 얻어지는 좋은 점은 무엇일까요?
바로 코드의 재사용성입니다.
재사용성 말 그대로 코드를 다시 사용한다는 부분인데요
기존의 코드는 한번 생성된 코드는 그 값으로만 사용되고 생성할 때마다 동일한 코드를 계속 작성해줘야 합니다.
필요 수량만큼 계속 선언을 해줘야 하는 것이지요.
이에 비해서 클래스의 경우는 필요한 만큼의 인스턴스를 선언하는 건 동일하다고 볼 수는 있지만,
속성에 대한 선언도, 함수를 선언할 부분도 기존에 선언된 클래스의 코드가 재사용되기 때문에
보다 효율적인 코드를 작성할 수 있습니다.
이 재사용 성에 대해서는 다음 포스팅에서 좀 더 자세히 다뤄보도록 하겠습니다.
'Coding, Testing, Challenge > Python-Middle' 카테고리의 다른 글
Python 파일 입출력 (0) | 2022.08.03 |
---|---|
Python 클래스 오버라이딩과 클래스 변수 (0) | 2022.06.23 |
Python 클래스 생성자와 상속 (0) | 2022.06.22 |