본문 바로가기
IT & AI/AI 지식

파이썬 활용 (1): 클래스, 모듈, 패키지, 예외처리

by 빛나는해커 2024. 11. 14.

1. 클래스

  • 클래스는 데이터와 기능을 하나의 논리적인 단위로 묶기 위해 필요하다.
  • 객체 지향 프로그래밍에서 데이터를 구조화하고 관련 메서드를 함께 정의하여 코드의 재사용성과 유지보수를 쉽게 만든다.
  • 클래스는 객체의 설계도이다.
  • 클래스는 여러 개의 객체를 생성할 수 있는 틀 역할을 한다.
  • 객체는 클래스에 의해 생성된 구체적인 인스턴스를 말한다.
# 클래스와 객체 예시
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

my_dog = Dog("Buddy", 3)
print(my_dog.name)  # 출력: Buddy
  • 생성자(__init__ 메서드)는 객체가 생성될 때 자동으로 호출되는 메서드이다.
  • 객체의 초기 상태를 설정하는 역할을 한다.
# 생성자 예시
class Car:
    def __init__(self, brand, model):
        self.brand = brand
        self.model = model

my_car = Car("Toyota", "Corolla")
print(my_car.brand)  # 출력: Toyota
  • 상속은 기존 클래스의 속성과 메서드를 새로운 클래스에서 사용할 수 있게 해 준다.
  • 이를 통해 코드를 재사용하고 클래스 간의 관계를 쉽게 표현할 수 있다.
# 클래스 상속 예시
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        return "Woof!"

dog = Dog("Rex")
print(dog.speak())  # 출력: Woof!
  • 메서드 오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것이다.
  • 이를 통해 자식 클래스에서 부모 클래스와 다른 동작을 구현할 수 있다.
# 메서드 오버라이딩 예시
class Bird(Animal):
    def speak(self):
        return "Chirp!"

bird = Bird("Tweety")
print(bird.speak())  # 출력: Chirp!
  • 클래스 변수는 클래스 자체에 속한 변수로, 모든 인스턴스가 공유한다.
  • 인스턴스 변수와는 달리, 클래스 전체에서 공통적으로 사용되는 데이터를 정의할 때 사용한다.
# 클래스 변수 예시
class Student:
    school_name = "ABC High School"

    def __init__(self, name, grade):
        self.name = name
        self.grade = grade

student1 = Student("Alice", 10)
student2 = Student("Bob", 11)
print(student1.school_name)  # 출력: ABC High School
print(student2.school_name)  # 출력: ABC High School

 


2. 모듈

  • 모듈은 파이썬 파일(.py)로, 관련된 함수나 클래스를 모아둔 것이다.
  • 다른 파이썬 파일에서 쉽게 가져다 쓸 수 있다.
# my_module.py

def greet(name):
    return f"Hello, {name}!"
  • if __name__ == "__main__"
  • 이 구문은 모듈이 직접 실행될 때와 다른 파일에서 import 될 때의 동작을 구분하기 위해 사용한다.
  • 모듈이 직접 실행될 때만 특정 코드가 실행되도록 한다.
# my_module.py
if __name__ == "__main__":
    print(greet("Alice"))
  • 모듈은 함수뿐만 아니라 클래스와 변수를 포함할 수 있다.
# my_module.py
class Car:
    def __init__(self, brand, model):
        self.brand = brand
        self.model = model

year = 2023
  • 모듈을 가져오려면 import 키워드를 사용한다.
  • 모듈을 불러와 그 안의 함수나 클래스를 사용할 수 있다.
# main.py
import my_module

print(my_module.greet("Bob"))
  • 다른 디렉터리에 있는 모듈을 불러오려면 해당 디렉터리를 파이썬 경로에 추가해야 한다.
  • 이를 위해 sys 모듈을 사용할 수 있다.
# main.py
import sys
sys.path.append("/path/to/module")
import my_module

3. 패키지

  • 패키지는 여러 모듈을 묶은 것이다.
  • 패키지는 디렉터리로 표현되며, 해당 디렉터리에는 __init__. py 파일이 포함되어야 한다.
# 디렉터리 구조
my_package/
    __init__.py
    module1.py
    module2.py
  • 패키지 안에 있는 모듈의 함수를 실행하려면 import를 통해 접근할 수 있다.
# main.py
from my_package import module1

module1.some_function()
  • __init__.py 파일은 해당 디렉터리가 패키지의 일부임을 파이썬에 알리는 역할을 한다.
  • 파일 내에서 초기화 코드나 패키지 수준의 변수를 정의할 수도 있다.
  • 패키지 내부에서 상대 경로를 사용해 다른 모듈을 불러올 수 있다.
  • .이나.. 을 사용하여 현재 또는 부모 디렉터리를 나타낸다.
# module2.py
from . import module1

4. 예외 처리

  • 프로그래밍 중 예기치 않은 상황에서 오류가 발생한다.
  • 예를 들어, 존재하지 않는 파일을 열거나 0으로 나누려 할 때 오류가 발생한다.
  • tryexcept를 사용해 오류를 처리할 수 있다.
  • 오류가 발생하더라도 프로그램이 강제 종료되지 않게 한다.
# 예외 처리 예시
try:
    result = 10 / 0
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
  • 특정 상황에서 오류를 무시하고 넘어가고자 할 때 pass 키워드를 사용할 수 있다.
# 오류 회피 예시
try:
    result = 10 / 0
except ZeroDivisionError:
    pass
  • raise 키워드를 사용해 의도적으로 오류를 발생시킬 수 있다.
# 오류 발생 예시
raise ValueError("잘못된 값입니다.")
  • 사용자 정의 예외를 만들려면 Exception 클래스를 상속받아 새로운 예외 클래스를 정의한다.
# 사용자 정의 예외 예시
class MyError(Exception):
    def __init__(self, message):
        self.message = message

try:
    raise MyError("이것은 사용자 정의 예외입니다.")
except MyError as e:
    print(e)
 

파이썬 활용 및 심화 소개 이미지