[파이썬] 예외 처리와 패턴 구현

예외 처리와 패턴 구현은 소프트웨어 개발에서 중요한 부분입니다. 예외 처리는 프로그램이 예상치 못한 상황에서 발생하는 오류를 처리하는 방법을 말하며, 패턴 구현은 특정한 동작을 반복해서 사용하는 경우에 유용한 방법을 제공합니다. Python은 예외 처리와 패턴 구현을 위한 강력한 기능을 제공합니다.

예외 처리 (Exception Handling)

예외 처리는 코드 실행 중에 발생하는 예외 상황을 처리하는 방법입니다. 이를 통해 프로그램의 정상적인 실행 흐름을 유지하고, 예외 상황을 적절하게 처리할 수 있습니다. Python에서는 try, except, finally 구문을 사용하여 예외 처리를 구현할 수 있습니다.

예를 들어, 파일을 열고 읽어오는 과정에서 예외가 발생할 수 있습니다. 다음은 try-except 구문을 사용하여 예외를 처리하는 예시 코드입니다.

try:
    file = open("file.txt", "r")
    content = file.read()
    file.close()
except FileNotFoundError:
    print("File not found!")
except:
    print("An error occurred!")

위의 코드는 file.txt 파일을 읽어오는 도중 발생하는 FileNotFoundError와 다른 모든 예외 상황에 대해 예외 처리를 수행합니다. try 블록 내에서 예외가 발생하면, 해당 예외에 해당하는 except 블록이 실행됩니다.

패턴 구현 (Pattern Implementation)

패턴 구현은 특정한 동작을 반복해서 사용하는 경우에 유용합니다. Python에서는 다양한 패턴을 구현할 수 있는 다양한 기능을 제공합니다. 일부 전형적인 예시를 살펴보겠습니다.

싱글톤 패턴 (Singleton Pattern)

싱글톤 패턴은 단 하나의 인스턴스만을 생성하여 사용하는 패턴입니다. 이는 전역 변수의 사용을 제한하고, 객체 생성 및 초기화에 관한 제약을 가지는 등의 특징을 가지고 있습니다. 다음은 싱글톤 패턴을 구현하는 예시 코드입니다.

class Singleton:
    __instance = None

    @staticmethod
    def getInstance():
        if Singleton.__instance is None:
            Singleton()
        return Singleton.__instance

    def __init__(self):
        if Singleton.__instance is not None:
            raise Exception("This class is a singleton!")
        else:
            Singleton.__instance = self

위의 코드에서 getInstance() 메소드를 통해 싱글톤 객체를 얻을 수 있습니다. 이를 통해 어디서든 동일한 인스턴스에 접근할 수 있습니다.

팩토리 메소드 패턴 (Factory Method Pattern)

팩토리 메소드 패턴은 객체 생성을 서브 클래스에 위임하는 패턴입니다. 이를 통해 객체 생성 코드의 중복을 피하고, 유연한 구조를 유지할 수 있습니다. 다음은 팩토리 메소드 패턴을 구현하는 예시 코드입니다.

from abc import ABC, abstractmethod

class Product(ABC):
    @abstractmethod
    def use(self):
        pass

class ConcreteProductA(Product):
    def use(self):
        return "Using Product A"

class ConcreteProductB(Product):
    def use(self):
        return "Using Product B"

class Creator(ABC):
    def create(self):
        product = self.factory_method()
        return product

    @abstractmethod
    def factory_method(self):
        pass

class ConcreteCreatorA(Creator):
    def factory_method(self):
        return ConcreteProductA()

class ConcreteCreatorB(Creator):
    def factory_method(self):
        return ConcreteProductB()

위의 코드에서 Product는 생성될 객체의 추상 클래스를 나타내며, ConcreteProductAConcreteProductB는 구체적인 상품을 구현한 클래스입니다. Creator는 추상 팩토리 메소드를 가진 추상 클래스이며, ConcreteCreatorAConcreteCreatorB는 이를 구현하는 클래스입니다.

마무리

Python은 예외 처리와 패턴 구현을 위한 다양한 기능을 제공하여 코드의 안정성과 유연성을 높여줍니다. 앞서 소개한 예외 처리와 패턴 구현의 개념과 예시 코드를 참고하여, 효율적인 프로그래밍을 할 수 있도록 연습해보세요!