파이썬/클래스와 객체 지향

[객체 지향 프로그래밍 4개의 기둥] 추상화와 파이썬 타입 힌팅(Type Hinting)

Data Jun 2025. 3. 20. 11:51

파이썬은 변수를 선언할 때 타입을 미리 지정하지 않아도 되는 동적 타입 언어입니다. 이 덕분에 코드를 간결하게 작성할 수 있지만, 반대로 어떤 타입을 사용해야 하는지 명확하지 않아 혼란을 줄 수도 있습니다. 이러한 문제를 보완하기 위해 파이썬 3.5부터 타입 힌팅(Type Hinting) 기능이 추가되었습니다. 이번 글에서는 타입 힌팅이 무엇인지, 어떻게 사용하는지 간단한 예제를 통해 알아보겠습니다.

 

타입 힌팅이란?

타입 힌팅(Type Hinting)은 변수나 함수의 타입을 명시적으로 표시하는 기능입니다. 이를 통해 코드를 읽고 사용할 때 타입을 명확하게 파악할 수 있으며, IDE에서 타입 오류를 미리 감지할 수 있습니다.

 

타입 힌팅 적용 전 코드

아래는 타입 힌팅을 적용하지 않은 BankAccount 클래스입니다.

class BankAccount:
    """은행 계좌 클래스"""
    interest = 0.02  # 클래스 변수 (이자율)

    def __init__(self, name, balance):
        """인스턴스 변수: name(문자열), balance(실수형)"""
        self.name = name
        self.balance = balance

    def deposit(self, amount):
        """잔액을 amount 만큼 증가"""
        self.balance += amount

    def withdraw(self, amount):
        """잔액을 amount 만큼 감소"""
        if self.balance < amount:
            print("Insufficient balance!")
        else:
            self.balance -= amount

    def add_interest(self):
        """잔액에 이자율을 적용"""
        self.balance *= 1 + BankAccount.interest

타입을 명시하지 않아도 실행 가능하지만, 변수나 메소드의 타입이 명확하지 않음
다른 사람이 사용할 때 어떤 타입을 넣어야 할지 알기 어려움

 

 

타입 힌팅 적용 후 코드

이제 동일한 BankAccount 클래스에 타입 힌팅을 추가해 보겠습니다.

class BankAccount:
    """은행 계좌 클래스"""
    interest = 0.02  # 클래스 변수 (이자율)

    def __init__(self, name: str, balance: float) -> None:
        """이름(name)과 초기 잔액(balance)을 설정"""
        self.name = name
        self.balance = balance

    def deposit(self, amount: float) -> None:
        """잔액을 amount 만큼 증가"""
        self.balance += amount

    def withdraw(self, amount: float) -> None:
        """잔액을 amount 만큼 감소"""
        if self.balance < amount:
            print("Insufficient balance!")
        else:
            self.balance -= amount

    def add_interest(self) -> None:
        """잔액에 이자율을 적용"""
        self.balance *= 1 + BankAccount.interest

타입 힌팅 적용 방식

  • name: str → name은 문자열(str) 타입
  • balance: float → balance는 실수(float) 타입
  • -> None → 메소드가 반환값이 없을 경우(None) 이렇게 표시

 

타입 힌팅이 필요한 이유

이제 BankAccount 클래스를 사용할 때 잘못된 타입을 전달하면 어떻게 될까요?

bank_account = BankAccount("Hong Gildong", "1000")  # balance를 문자열로 전달

print(bank_account.balance)  # "1000" (문자열)
bank_account.deposit("00")  # 문자열을 더하면?
print(bank_account.balance)  # "100000" (문자열 결합)

문제 발생!

  • balance가 float 타입이어야 하는데 문자열("1000")을 전달했음
  • deposit("00")을 호출하면서 숫자가 아닌 문자열이 더해져서 이상한 결과가 나옴

하지만 파이썬은 실행 오류를 발생시키지 않고 그대로 진행!
→ 이런 문제를 방지하기 위해 IDE(예: VS Code, PyCharm)는 "Expected type float, got str instead" 같은 경고 메시지를 보여줍니다.

타입 힌팅이 있으면, 실행 전에 IDE에서 잘못된 타입을 미리 감지할 수 있습니다!

 

 

타입 힌팅의 장점과 단점

장점
✔ 코드의 가독성이 좋아짐 (어떤 타입을 써야 하는지 명확함)
✔ IDE가 자동으로 타입 오류를 감지해 줌 (실행 전에 버그 예방 가능)
✔ 협업 시 함수와 변수를 더 쉽게 이해할 수 있음

 

단점
⚠ 파이썬 3.5 이전 버전에서는 사용할 수 없음
⚠ 동적 타입 언어의 유연함이 줄어든다는 의견도 있음

 

결론

🔹 파이썬은 타입을 미리 지정하지 않는 동적 타입 언어지만,
🔹 **타입 힌팅(Type Hinting)**을 사용하면 더 명확하고 안전한 코드 작성 가능
🔹 IDE에서 잘못된 타입 사용을 미리 감지하여 오류를 예방할 수 있음

타입 힌팅을 잘 활용하면 더욱 안전하고 유지보수하기 쉬운 코드를 만들 수 있습니다! 💡