본문 바로가기

Coding, Testing, Challenge/Python-Middle

Python 클래스와 객체

728x90

 

이번 포스팅은 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처럼 클래스를 사용해서 만들어 내는 객체를 인스턴스라고 합니다.

 

그러면 직접 선언한 위의 방식보다 클래스의 사용할 때 얻어지는 좋은 점은 무엇일까요?

바로 코드의 재사용성입니다.

재사용성 말 그대로 코드를 다시 사용한다는 부분인데요

기존의 코드는 한번 생성된 코드는 그 값으로만 사용되고 생성할 때마다 동일한 코드를 계속 작성해줘야 합니다.

필요 수량만큼 계속 선언을 해줘야 하는 것이지요.

 

이에 비해서 클래스의 경우는 필요한 만큼의 인스턴스를 선언하는 건 동일하다고 볼 수는 있지만,

속성에 대한 선언도, 함수를 선언할 부분도 기존에 선언된 클래스의 코드가 재사용되기 때문에 

보다 효율적인 코드를 작성할 수 있습니다.

 

이 재사용 성에 대해서는 다음 포스팅에서 좀 더 자세히 다뤄보도록 하겠습니다.