본문 바로가기

Programming

파이썬(Python) 기초 : 객체지향 프로그래밍과 예외 처리



객체지향 프로그래밍은 코드를 객체(object)라는 단위로 구조화하여 작성하는 방법을 의미하며, 예외 처리는 프로그램 실행 중 발생할 수 있는 오류를 처리하는 방법을 의미합니다.

객체지향 프로그래밍


파이썬은 객체지향 프로그래밍을 지원하며, 클래스(class)와 객체(object)를 이용하여 코드를 작성합니다. 

클래스는 객체를 생성하기 위한 템플릿으로, 객체는 클래스의 인스턴스입니다.

클래스 ( class ) 와 객체 ( object )

 

파이썬에서도 클래스를 정의할 때는 'class' 키워드를 사용합니다.

기본적인 클래스의 구조는 아래와 같습니다.

class ClassName:
    # 클래스 변수 및 메서드 정의
    pass

 

'ClassName' 은 클래스의 이름을 나타냅니다.

클래스 내부에는 변수와 메서드가 정의될 수 있습니다.

변수는 클래스 변수와 인스턴스 변수로 나눌 수 있습니다.

클래스 변수는 클래스 전체에서 공유되는 변수이고, 인스턴스 변수는 각 객체마다 별도로 유지되는 변수입니다.

 

클래스를 사용하여 객체를 생성하고, 그 객체는 클래스에서 정의한 속성과 메서드를 사용할 수 있습니다.

클래스를 기반으로 객체를 생성할 때는 생성자 메서드인 '__init__()' 메서드를 사용합니다.

'__init()__' 메서드는 객체가 생성될 때 자동으로 호출되며, 객체의 초기화를 담당합니다.

class Phone:
    def __init__(self, brand, model, color, storage):
        """
        휴대폰 클래스를 초기화합니다.

        Parameters:
            brand (str): 휴대폰의 브랜드 (예: "Samsung", "Apple" 등)
            model (str): 휴대폰의 모델 (예: "Galaxy S24", "iPhone 15" 등)
            color (str): 휴대폰의 색상 (예: "Black", "White", "Gold" 등)
            storage (str): 휴대폰의 저장 용량 (예: "256GB", "512GB" 등)
        """
        self.brand = brand  # 휴대폰의 브랜드를 저장하는 속성
        self.model = model  # 휴대폰의 모델을 저장하는 속성
        self.color = color  # 휴대폰의 색상을 저장하는 속성
        self.storage = storage  # 휴대폰의 저장 용량을 저장하는 속성
        self.power_on = False  # 전원 상태를 나타내는 속성. 초기값은 꺼진 상태(False).

    def power_button(self):
        """
        전원 버튼을 누를 때 호출되는 메서드입니다.
        전원 상태를 토글(toggle)하여 전원을 켜거나 끕니다.
        """
        if self.power_on:
            print("전원을 끕니다.")
            self.power_on = False  # 전원을 끕니다.
        else:
            print("전원을 켭니다.")
            self.power_on = True  # 전원을 켭니다.

    def make_call(self, number):
        """
        전화를 걸 때 호출되는 메서드입니다.
        전원이 켜져 있을 때만 전화를 걸 수 있습니다.
        
        Parameters:
            number (str): 전화를 걸고자 하는 전화번호
        """
        if self.power_on:
            print(f"{number}로 전화를 겁니다.")
        else:
            print("전원을 먼저 켜주세요.")

    def send_message(self, number, message):
        """
        메시지를 보낼 때 호출되는 메서드입니다.
        전원이 켜져 있을 때만 메시지를 보낼 수 있습니다.
        
        Parameters:
            number (str): 메시지를 보낼 상대방의 전화번호
            message (str): 보낼 메시지 내용
        """
        if self.power_on:
            print(f"{number}로 메시지를 보냅니다: {message}")
        else:
            print("전원을 먼저 켜주세요.")

 

__init__() 메서드를 사용하여 객체를 초기화합니다.

첫 번째 매개변수인 self 는 파이썬에서 객체를 지칭하는 데 사용되는 관용적인 표현입니다.

파이썬에서 일반적인 메서드의 경우 첫 번째 매개변수로 'self' 를 사용합니다.

이를 통해서 현재 인스턴스(객체)를 가르킬 수 있습니다.

# 객체 생성
my_phone = Phone("Samsung", "Galaxy S24", "Black", "512GB")

# 전원 켜기
my_phone.power_button()

# 전화 걸기
my_phone.make_call("010-1234-5678")

# 메시지 보내기
my_phone.send_message("010-1234-5678", "Hello Python~!")

 

인스턴스(객체)를 통해 호출되는 메서드인 인스턴스 메서드는 첫 번째 매개변수로 'self' 를 가져야 합니다.

'self' 를 통해 메서드가 호출된 객체에 접근할 수 있습니다.


예외 처리


파이썬에서도 예외 처리를 위한 try, except 문을 제공합니다. 
파이썬 예외 처리는 프로그램 실행 중에 발생할 수 있는 오류나 예외 상황을 처리하는 기능을 말합니다. 

예외 처리를 통해 프로그램이 오류 상황에서 안정적으로 실행될 수 있도록 하고, 예외가 발생했을 때 사용자에게 적절한 메시지를 제공할 수 있습니다.

try:
    # 예외가 발생할 가능성이 있는 코드 블록
    # 예외가 발생하면 해당 블록이 실행되다가 중단됩니다.
    # 예외가 발생하지 않으면 except 블록은 실행되지 않습니다.
    # 만약 예외가 발생하지 않으면 else 블록이 실행됩니다.
    # finally 블록은 예외 발생 여부와 상관없이 항상 실행됩니다.
    
except 예외종류1 as 변수1:
    # 예외 처리 코드 블록
    # 예외 종류1이 발생했을 때 실행됩니다.
    
except 예외종류2 as 변수2:
    # 다른 종류의 예외에 대한 처리 코드 블록
    # 예외 종류2가 발생했을 때 실행됩니다.
    
except (예외종류3, 예외종류4) as 변수3:
    # 여러 종류의 예외에 대한 처리 코드 블록
    # 예외 종류3 또는 예외 종류4가 발생했을 때 실행됩니다.
    
except 예외 as 변수:
    # 모든 예외에 대한 처리 코드 블록
    # 어떤 예외가 발생했을 때도 실행됩니다.
    
else:
    # 예외가 발생하지 않았을 때 실행됩니다.
    
finally:
    # 예외 발생 여부와 상관없이 항상 실행됩니다.

 

파이썬의 예외 처리는 try, except, finally, else 키워드를 사용하여 구성됩니다.

  • try: 예외가 발생할 수 있는 코드를 감싸는 블록입니다.
  • except: 예외를 처리하는 블록으로, 예외가 발생했을 때 실행됩니다.
  • finally: 예외 발생 여부와 관계없이 항상 실행되는 블록입니다.
  • else: 예외가 발생하지 않았을 때 실행되는 블록입니다.
예외 처리의 종류


1. 특정 예외 처리: 특정 예외에 대한 처리를 지정할 수 있습니다.

try:
    # 예외가 발생할 수 있는 코드
except 예외종류 as 예외변수:
    # 특정 예외에 대한 처리 코드


2. 여러 예외 처리: 여러 종류의 예외를 한 번에 처리할 수 있습니다.

try:
    # 예외가 발생할 수 있는 코드
except (예외종류1, 예외종류2) as 예외변수:
    # 여러 종류의 예외에 대한 처리 코드


3. 일반 예외 처리: 모든 예외에 대한 일반적인 처리를 지정할 수 있습니다.

try:
    # 예외가 발생할 수 있는 코드
except Exception as e:
    # 모든 예외에 대한 처리 코드
try:
    x = int(input("정수를 입력하세요: "))
    result = 10 / x
except ZeroDivisionError as e:
    print("0으로 나눌 수 없습니다.")
except ValueError as e:
    print("정수를 입력해야 합니다.")
else:
    print("결과:", result)
finally:
    print("프로그램을 종료합니다.")

 

사용자로부터 정수를 입력받아 해당 정수로 나누는 연산을 수행합니다.

입력된 값이 0이거나 정수가 아닌 경우에 대해 각각 ZeroDivisionError와 ValueError 예외를 처리하고, 그 외의 경우에는 연산 결과를 출력합니다. 마지막으로 finally 블록에서 프로그램을 종료하는 메시지를 출력합니다.

 

이러한 예외 처리는 프로그램의 안정성을 높이고 사용자와의 상호작용에서 발생할 수 있는 예외 상황에 대비할 수 있도록 도와줍니다.