본문 바로가기

개발관련

파이썬 강좌 9 - 객체지향

728x90
반응형

2024.12.20 - [개발관련] - 파이썬 강좌 8 - 모듈과 패키지

 

파이썬 강좌 8 - 모듈과 패키지

2024.12.20 - [개발관련] - 파이썬 강좌 7 - 예외처리 파이썬 강좌 7 - 예외처리2024.12.20 - [개발관련] - 파이썬 강좌 6 - 파일 입출력 파이썬 강좌 6 - 파일 입출력2024.12.20 - [개발관련] - 파이썬 강좌 5 -

woowonwoo.tistory.com

 

9장: 객체지향 프로그래밍(OOP)

객체지향 프로그래밍(OOP)은 데이터와 **그 데이터를 처리하는 방법(메서드)**을 객체로 묶어 효율적으로 코드를 설계하는 프로그래밍 패러다임입니다.
파이썬은 객체지향 언어로, 클래스와 객체를 쉽게 생성하고 사용할 수 있습니다.


1. 객체지향 프로그래밍의 기본 개념

  1. 클래스(Class)
    객체를 생성하기 위한 설계도입니다. 클래스에는 속성(데이터)과 메서드(기능)가 포함됩니다.
  2. 객체(Object)
    클래스로부터 생성된 인스턴스입니다. 클래스의 실제 구현체입니다.
  3. 속성(Attribute)
    객체가 가지는 데이터입니다.
  4. 메서드(Method)
    객체가 수행할 수 있는 동작(함수)입니다.

2. 클래스 정의와 객체 생성

2.1 클래스 정의

클래스는 class 키워드를 사용하여 정의합니다.

class Person:
    # 클래스 초기화 메서드
    def __init__(self, name, age):
        self.name = name  # 속성
        self.age = age    # 속성

    # 메서드
    def greet(self):
        print(f"안녕하세요, 제 이름은 {self.name}이고, 나이는 {self.age}살입니다.")

2.2 객체 생성

클래스를 통해 객체를 생성합니다.

person1 = Person("바보", 22)  # 객체 생성
person1.greet()             # 출력: 안녕하세요, 제 이름은 바보이고, 나이는 22살입니다.

3. 클래스의 구성 요소

  1. __init__ 메서드 (생성자)
    객체가 생성될 때 자동으로 호출되는 초기화 메서드입니다.
def __init__(self, name, age):
    self.name = name
    self.age = age

 

 

  1. 인스턴스 속성
    self를 사용하여 각 객체에 고유한 값을 부여합니다.
  2. 인스턴스 메서드
    self를 통해 객체의 속성에 접근하거나 동작을 정의합니다.
def greet(self):
    print(f"안녕하세요, {self.name}입니다.")

 

 

  1. 클래스 속성
    모든 객체가 공유하는 속성을 정의합니다.
class Person:
    species = "Homo sapiens"  # 클래스 속성

 


4. 객체지향의 주요 특징

  1. 캡슐화(Encapsulation)
    속성과 메서드를 하나로 묶고, 외부에서 접근을 제한합니다.
class Person:
    def __init__(self, name):
        self.__name = name  # 비공개 속성

    def get_name(self):
        return self.__name  # 공개 메서드

 

  1. 상속(Inheritance)
    기존 클래스의 속성과 메서드를 새로운 클래스에서 물려받는 기능입니다.
class Animal:
    def speak(self):
        print("소리를 냅니다.")

class Dog(Animal):  # Animal 클래스를 상속
    def speak(self):
        print("멍멍!")

 

  1. 다형성(Polymorphism)
    동일한 메서드 이름이 다양한 객체에서 다르게 동작합니다.
class Cat(Animal):
    def speak(self):
        print("야옹!")
  1. 추상화(Abstraction)
    객체의 중요한 속성과 메서드만 외부에 노출하여 복잡성을 줄입니다.

5. 클래스의 고급 기능

5.1 클래스 메서드

클래스 속성을 다루기 위해 사용하며, @classmethod 데코레이터를 사용합니다.

class Person:
    species = "Homo sapiens"

    @classmethod
    def get_species(cls):
        return cls.species

 

5.2 정적 메서드

클래스와 객체에 의존하지 않는 메서드로, @staticmethod 데코레이터를 사용합니다.

class Math:
    @staticmethod
    def add(a, b):
        return a + b

print(Math.add(3, 5))  # 출력: 8

 

5.3 매직 메서드 (Magic Method)

특수한 동작을 정의하는 메서드입니다.

  • __str__: 객체를 문자열로 표현할 때 호출.
  • __add__: + 연산자 동작을 정의.
 
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Point(self.x + other.x, self.y + other.y)

    def __str__(self):
        return f"Point({self.x}, {self.y})"

p1 = Point(2, 3)
p2 = Point(4, 5)
print(p1 + p2)  # 출력: Point(6, 8)
 

6. 연습 문제

  1. 간단한 학생 클래스 만들기
class Student:
    def __init__(self, name, grade):
        self.name = name
        self.grade = grade

    def introduce(self):
        print(f"저는 {self.name}이고, 학년은 {self.grade}학년입니다.")

student = Student("바보", 3)
student.introduce()
  1. 상속 활용
class Vehicle:
    def drive(self):
        print("차량이 달립니다.")

class Car(Vehicle):
    def drive(self):
        print("자동차가 달립니다.")

car = Car()
car.drive()

 

 

  1. 클래스 속성과 메서드 사용
class Circle:
    pi = 3.14

    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return Circle.pi * (self.radius ** 2)

c = Circle(5)
print(c.area())  # 출력: 78.5

 

 


7. 요약

  1. 클래스와 객체: 클래스를 설계도로 하여 객체를 생성.
  2. 객체지향 특징: 캡슐화, 상속, 다형성, 추상화.
  3. 메서드 종류: 인스턴스 메서드, 클래스 메서드, 정적 메서드.
  4. 매직 메서드: 객체의 특수한 동작을 정의하는 메서드.

다음 장에서는 파이썬 웹크롤링과 관련된 내용을 다룹니다! 😊

728x90
반응형