ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python 기초 : 클래스와 모듈
    BootCamp/FastCampus x Upstage AI Lab 6기 2024. 11. 19. 14:32

    객체 지향 프로그래밍 소개

    객체 지향 프로그래밍(Object Oriented Programming, OOP)은 프로그램을 객체라는 독립적인 단위로 나누어 설계하는 방법론이다.

    OOP의 주요 특징:

    • 코드 재사용 용이: 이미 작성된 코드를 재사용할 수 있어 효율적이다.
    • 유지보수 용이: 프로그램의 수정 및 관리가 용이하다.
    • 대형 프로젝트 적합: 대규모 소프트웨어 개발에 적합하다.

    OOP의 단점:

    • 실행 속도가 느림: 객체가 많아질수록 실행 속도가 저하될 수 있다.
    • 프로그램 용량 증가: 객체 수가 많아지면 프로그램의 용량이 커진다.
    • 설계 시간 소요: 초기 설계에 많은 시간이 필요하다.

    클래스와 객체의 개념

    • 클래스(Class)는 동일한 유형의 객체를 생성하기 위한 설계 도면이다.
    • 예를 들어, 곰돌이 젤리를 만드는 틀로 비유할 수 있다.
    • 객체(Object)는 클래스에 의해 생성된 모든 것을 의미한다.
    • 각 객체는 고유한 성질을 가지며, 동일한 클래스에서 생성된 객체들은 서로 영향을 주지 않는다.
    class TeddyBearJelly:  # 클래스 선언
        def __init__(self, color, taste):
            self.color = color  # 속성 설정
            self.taste = taste  # 속성 설정

    클래스 선언 및 인스턴스

    • 클래스 선언은 class 키워드를 사용하여 이루어진다.
    • 인스턴스(Instance)는 클래스 기반으로 만들어진 객체를 의미하며, 특정 객체가 어떤 클래스의 객체인지를 설명할 때 사용된다.
    • 인스턴스를 생성하는 방법:
    # 인스턴스 생성
    yellow_jelly = TeddyBearJelly("yellow", "sweet")
    red_jelly = TeddyBearJelly("red", "sour")
    
    # 객체의 속성 출력
    print("노란색 젤리 맛:", yellow_jelly.taste)
    print("빨간색 젤리 맛:", red_jelly.taste)
    # 실행 결과
    # 노란색 젤리 맛: sweet
    # 빨간색 젤리 맛: sour

    메소드와 생성자 설명

    • 메소드(Method)는 클래스가 가지고 있는 함수를 의미하며, 클래스 내부의 함수는 첫 번째 매개변수로 반드시 self를 입력해야 한다.
    • self는 호출한 객체 자신을 나타내며, 메소드를 정의할 때 사용된다.
    • 생성자(Constructor)는 인스턴스가 생성될 때 자동으로 실행되는 함수로, __init__이라는 이름을 가진다.
    • 생성자는 인스턴스의 생성과 동시에 필요한 정보를 입력받도록 구현된다.
    # 2. 메소드와 생성자
    class TeddyBearJelly:
        def __init__(self, color, taste):
            self.color = color
            self.taste = taste
    
        def describe(self):
            return f"This jelly is {self.color} and tastes {self.taste}."
    
    # 인스턴스 생성 및 메소드 호출
    blue_jelly = TeddyBearJelly("blue", "berry-flavored")
    print(blue_jelly.describe())
    # 실행 결과
    # This jelly is blue and tastes berry-flavored.

    상속의 개념과 활용

    • 상속(Inheritance)은 새로운 클래스를 만들 때 기존 클래스의 기능을 물려받는 것을 의미한다.
    • 부모 클래스(Parent Class)와 자식 클래스(Child Class) 개념:
    • 부모 클래스는 상위 클래스, 자식 클래스는 하위 클래스를 의미한다.
    • 상속의 장점:
      • 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경할 수 있다.
    • 메소드 오버라이딩(Method Overriding):
      • 자식 클래스에서 부모 클래스의 메소드를 재정의하는 것을 의미한다.
      • super() 키워드를 사용하여 부모 클래스의 메소드를 호출할 수 있다.
    # 3. 상속의 개념과 활용
    class Animal:  # 부모 클래스
        def speak(self):
            return "I make a sound."
    
    class Dog(Animal):  # 자식 클래스
        def speak(self):  # 메소드 오버라이딩
            return "Woof!"
            
    # 인스턴스 생성 및 메소드 호출
    generic_animal = Animal()
    dog = Dog()
    print("Animal:", generic_animal.speak())
    print("Dog:", dog.speak())
    # 실행 결과
    # Animal: I make a sound.
    # Dog: Woof!

    모듈의 이해와 사용법

    • 모듈은 여러 변수와 함수를 포함하는 집합으로, 파이썬에 기본적으로 내장된 내부 모듈과 외부에서 제공되는 외부 모듈이 있다.
    • 내부 모듈 예시:
      • math, random, datetime 등 다양한 기능을 제공하는 모듈이 있다.
    • import 구문:
      • import는 모듈 전체를 가져올 때 사용하며, from은 필요한 것만 선택하여 가져올 때 사용한다.
    # 4. 모듈의 이해와 사용법
    import math
    from random import randint
    
    # math 모듈 활용
    radius = 5
    area = math.pi * (radius ** 2)
    print(f"원의 넓이 (반지름 {radius}): {area:.2f}")
    
    # random 모듈 활용
    random_number = randint(1, 10)
    print("랜덤 숫자:", random_number)
    # 실행 결과
    # 원의 넓이 (반지름 5): 78.54
    # 랜덤 숫자: (1부터 10 사이의 임의의 숫자)

    예외 처리 기법

    • 오류는 프로그램 실행 전에 발생하는 구문 오류와 실행 중에 발생하는 예외로 나뉜다.
    • 예외 처리는 try와 except 구문을 사용하여 이루어진다.
    • try 문 안에는 예외가 발생할 가능성이 있는 코드를 삽입하고, except 문 안에는 예외 발생 시 실행할 코드를 삽입한다.
    • 예외 처리 기법:
      • try - except 구문
      • try - except - else 구문
      • try - except - finally 구문
    # 5. 예외 처리 기법
    try:
        num = int(input("숫자를 입력하세요: "))  # 숫자로 변환 시도
        print("입력된 숫자:", num)
    except ValueError:  # 예외 발생 시 처리
        print("유효하지 않은 입력입니다. 숫자를 입력해야 합니다.")
    finally:
        print("프로그램 종료.")
    # 실행 결과 (예: 사용자가 "abc"를 입력한 경우)
    # 숫자를 입력하세요: abc
    # 유효하지 않은 입력입니다. 숫자를 입력해야 합니다.
    # 프로그램 종료.
Designed by Tistory.