파이썬 배우기 - 3주차 : 객체지향 프로그래밍과 예외 처리

파이썬 배우기 - 3주차: 객체지향 프로그래밍과 예외 처리

안녕하세요, 여러분! 😊
어느덧 파이썬 배우기 3주차에 접어들었어요! 이번 주에는 파이썬의 핵심 개념 중 하나인 객체지향 프로그래밍(OOP)예외 처리(Exception Handling)에 대해 배울 거예요! OOP 개념을 이해하면 파이썬을 더 강력하고 체계적으로 활용할 수 있답니다. 또, 예외 처리를 통해 프로그램이 에러로 멈추지 않고 안전하게 실행되도록 하는 방법도 익힐 거예요! 🚀 그럼 이번 주 학습 내용을 함께 살펴볼까요? 😊

객체지향 프로그래밍(OOP) 기본 개념 🏗

객체지향 프로그래밍(OOP, Object-Oriented Programming)객체(Object)를 중심으로 프로그램을 설계하는 방식이에요. 현실 세계의 사물을 프로그래밍에서 객체로 표현하고, 객체 간의 관계를 활용하는 것이 핵심 개념이죠! 😊 파이썬은 대표적인 객체지향 언어이며, 모든 데이터가 객체로 구성되어 있어요.

예를 들어, 자동차를 객체로 표현하면 다음과 같은 속성과 동작을 가질 수 있어요:

속성(Attributes) 행동(Methods)
브랜드 주행하기
색상 멈추기
연료 유형 경적 울리기

클래스와 인스턴스 이해하기 🏛

객체지향 프로그래밍에서 클래스(Class)는 객체를 만들기 위한 틀(설계도)이며, 인스턴스(Instance)는 클래스에서 생성된 실제 객체예요.

🛠 예제를 통해 쉽게 이해해 볼까요?


        # 자동차 클래스 정의
        class Car:
            def __init__(self, brand, color):
                self.brand = brand  # 속성
                self.color = color  # 속성

            def drive(self):
                return f"{self.brand} 자동차가 주행 중입니다!"

        # 인스턴스 생성
        my_car = Car("Hyundai", "Red")

        print(my_car.drive())  # Hyundai 자동차가 주행 중입니다!
    

여기서 Car는 클래스이고, my_car는 Car 클래스에서 생성된 인스턴스예요. 그리고 __init__() 메서드를 통해 객체의 속성을 초기화할 수 있답니다. 😊


다음은 **객체지향 프로그래밍의 주요 특징**에 대해 알아볼게요! 🔑✨ 준비되셨나요? 😊

객체지향 프로그래밍의 주요 특징 🔑

객체지향 프로그래밍(OOP)의 핵심 개념은 다음 4가지로 정리할 수 있어요! 🚀

개념 설명
캡슐화 (Encapsulation) 객체의 데이터(속성)와 메서드(기능)를 하나로 묶어 보호하는 개념
상속 (Inheritance) 부모 클래스의 속성과 메서드를 자식 클래스가 물려받아 사용할 수 있는 개념
다형성 (Polymorphism) 같은 메서드 이름이지만 클래스에 따라 다르게 동작하는 개념
추상화 (Abstraction) 필요한 정보만 노출하고 복잡한 구현은 숨기는 개념

✔ 캡슐화 예제

캡슐화(Encapsulation)는 속성을 private으로 선언하고, 메서드를 통해 접근하는 방식이에요!


        class BankAccount:
            def __init__(self, balance):
                self.__balance = balance  # private 속성

            def deposit(self, amount):
                self.__balance += amount
                return f"입금 완료! 현재 잔액: {self.__balance}원"

            def get_balance(self):
                return f"현재 잔액: {self.__balance}원"

        account = BankAccount(10000)
        print(account.get_balance())  # 현재 잔액: 10000원
        print(account.deposit(5000))  # 입금 완료! 현재 잔액: 15000원
    

__balance 속성은 직접 접근할 수 없고, get_balance() 같은 메서드를 통해서만 확인할 수 있어요! 🔒


✔ 상속 예제

상속(Inheritance)을 활용하면 기존 클래스(부모 클래스)의 기능을 확장하여 새로운 클래스를 만들 수 있어요!


        class Animal:
            def sound(self):
                return "소리를 냅니다!"

        class Dog(Animal):  # Animal 클래스를 상속받음
            def sound(self):
                return "멍멍!"

        my_dog = Dog()
        print(my_dog.sound())  # 멍멍!
    

Dog 클래스는 Animal 클래스를 상속받았기 때문에, sound() 메서드를 오버라이딩(재정의)해서 고유의 기능을 가질 수 있어요! 🐶


다음은 **예외 처리의 중요성과 활용법**에 대해 알아볼게요! ⚠️✨ 준비되셨나요? 😊

예외 처리의 중요성과 활용법 ⚠️

프로그램을 실행하다 보면 예기치 못한 에러가 발생할 수 있어요. 예를 들어, 존재하지 않는 파일을 열거나, 숫자가 아닌 값을 입력받는 경우 에러가 발생할 수 있죠. 이때 예외 처리(Exception Handling)를 사용하면 프로그램이 갑자기 멈추는 것을 방지할 수 있습니다! 🚀

✔ try-except 기본 구조

파이썬에서는 try-except 구문을 사용하여 에러를 처리할 수 있어요!


        try:
            num = int(input("숫자를 입력하세요: "))
            result = 10 / num
            print(f"결과: {result}")
        except ZeroDivisionError:
            print("❌ 0으로 나눌 수 없어요!")
        except ValueError:
            print("❌ 올바른 숫자를 입력해주세요!")
        finally:
            print("✅ 프로그램이 정상적으로 종료되었습니다.")
    

- 사용자가 0을 입력하면 "0으로 나눌 수 없어요!" 메시지가 출력됩니다. - 숫자가 아닌 문자를 입력하면 "올바른 숫자를 입력해주세요!"가 출력되죠! - finally 블록은 예외 발생 여부와 관계없이 항상 실행됩니다. 💡


✔ 여러 개의 예외 처리

여러 종류의 에러를 한 번에 처리하고 싶다면 except (예외 유형) as e 를 사용할 수 있어요.


        try:
            file = open("non_existent_file.txt", "r")
        except (FileNotFoundError, PermissionError) as e:
            print(f"❌ 오류 발생: {e}")
    

FileNotFoundErrorPermissionError가 발생하면 해당 오류 메시지를 출력합니다! 📂


다음은 **실전 예외 처리 및 오류 디버깅**에 대해 알아볼게요! 🔍✨ 준비되셨나요? 😊

실전 예외 처리 및 오류 디버깅 🔍

코드를 작성할 때 예외 처리를 제대로 해두면 프로그램이 예상치 못한 오류로 멈추는 것을 방지할 수 있어요. 이번에는 실전에서 유용한 예외 처리 방법과 디버깅(오류 수정) 팁을 알아볼게요! 🚀

✔ 실전 예제: 안전한 입력 처리

사용자가 입력하는 값이 숫자가 아닐 경우, 오류를 방지하는 코드를 작성해 볼까요?


        def get_number():
            while True:
                try:
                    num = int(input("숫자를 입력하세요: "))
                    return num
                except ValueError:
                    print("❌ 숫자를 입력해야 합니다! 다시 시도해 주세요.")

        number = get_number()
        print(f"입력한 숫자는 {number}입니다!")
    

사용자가 잘못된 값을 입력해도 while 루프 덕분에 다시 입력할 수 있도록 설계했어요! 💡


✔ 오류를 쉽게 찾는 디버깅 팁

코드에 오류가 발생했을 때 당황하지 말고 이 방법을 활용해 보세요!

print() 활용: 코드의 중간에 print()를 넣어 변수 값을 확인하세요.
try-except로 감싸기: 오류가 발생할 가능성이 있는 코드를 감싸고 예외 메시지를 확인하세요.
파이썬 디버거(pdb) 사용: 코드 실행 중 특정 위치에서 멈추고 값을 확인할 수 있어요.


        import pdb

        def buggy_function():
            a = 5
            b = 0
            pdb.set_trace()  # 디버거 실행 (여기서 코드 멈춤)
            return a / b  # ZeroDivisionError 발생

        buggy_function()
    

pdb.set_trace()를 사용하면 코드 실행을 중간에 멈추고 변수를 직접 확인할 수 있어요! 🔍


자주 묻는 질문 (FAQ) ❓

객체지향 프로그래밍(OOP)이 왜 중요한가요?

OOP를 사용하면 코드 재사용성이 높아지고, 유지보수가 쉬워집니다! 🚀

예외 처리를 꼭 해야 하나요?

예외 처리를 하지 않으면, 프로그램이 예기치 않게 멈출 수 있어요. 안전한 실행을 위해 반드시 필요합니다! 💡

OOP를 더 연습하고 싶다면?

간단한 프로그램을 직접 만들어 보세요! 예를 들어, 도서 관리 시스템이나 은행 계좌 시스템을 구현해 보면 좋아요. 📚


마무리 인사 😊

와! 벌써 파이썬 배우기 3주차 학습이 끝났어요! 🎉 이번 주에는 객체지향 프로그래밍(OOP)과 예외 처리의 중요성을 배웠어요. OOP를 잘 활용하면 더 체계적인 코드 작성을 할 수 있고, 예외 처리는 프로그램을 더욱 안정적으로 만들어 줍니다. 🚀 혹시 궁금한 점이 있거나 함께 공부하고 싶은 주제가 있다면 댓글로 알려 주세요! 😊💬


📌 태그: 파이썬, Python, 객체지향 프로그래밍, OOP, 예외 처리, 프로그래밍, 코딩, 디버깅, 개발자, 초보자 코딩