Object-Oriented programming (OOP - 객체지향 프로그래밍)
객체지향 프로그래밍은 객체(Object)를 중심으로 프로그램을 구성하는 프로그래밍 패러다임입니다.
- 객체는 데이터와 이를 처리하는 메서드(method)를 포함하는 하나의 단위입니다.
- OOP의 주요 개념은 추상화, 캡슐화, 상속, 다형성입니다.
주요 개념
Abstraction (추상화)
추상화는 중요한 정보만을 표현하고 불필요한 세부 사항을 숨기는 것입니다.
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
Escapsluation (캡슐화)
캡슐화는 데이터와 메서드를 하나의 단위로 묶고 외부로부터 숨기는 것입니다.
class Person:
def __init__(self, name, age):
self.__name = name # 프라이빗 변수
self.__age = age # 프라이빗 변수
def get_name(self):
return self.__name
def set_name(self, name):
self.__name = name
def get_age(self):
return self.__age
def set_age(self, age):
if age > 0:
self.__age = age
Inheritance (상속)
상속은 기존 클래스(부모 클래스)를 기반으로 새로운 클래스(자식 클래스)를 정의하는 것입니다.
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
Polymorphism (다형성)
다형성은 동일한 인터페이스를 사용하여 서로 다른 데이터 타입의 객체를 다룰 수 있는 것입니다.
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
def make_animal_speak(animal):
print(animal.speak())
dog = Dog()
cat = Cat()
make_animal_speak(dog) # Output: Woof!
make_animal_speak(cat) # Output: Meow!
객체지향 프로그래밍 (OOP)의 장점
- 코드 재사용성: 기존 코드를 재사용하여 새로운 프로그램을 쉽게 개발할 수 있습니다.
- 코드 유지보수성: 모듈화된 코드 구조로 인해 유지보수가 용이합니다.
- 확장성: 새로운 기능 추가 시 기존 코드를 수정하지 않고 확장할 수 있습니다.
Class (클래스)
클래스는 객체를 정의하는 데 사용되는 청사진입니다.
- 클래스는 속성(attributes)과 메서드(methods)로 구성되며, 객체지향 프로그래밍(OOP)의 기본 단위입니다.
- 클래스는 코드의 재사용성, 확장성, 유지보수성을 높이는 데 중요한 역할을 합니다.
- Class Example.
class Person:
def __init__(self, name, age):
self.name = name # 속성
self.age = age # 속성
def greet(self):
return f"Hello, my name is {self.name} and I am {self.age} years old." # Method
Instance (인스턴스)
Instance(인스턴스)는 Class(클래스)의 실제 예제입니다.
- Class(클래스)는 객체를 생성하기 위한 템플릿 역할을 하며, Instance(인스턴스)는 이 템플릿을 사용하여 생성된 실제 객체입니다.
- Class(클래스)를 사용하여 여러 객체를 효율적으로 생성하고 관리할 수 있습니다.
- Instance(인스턴스)는 Class(클래스)이름 뒤에 괄호를 사용하여 생성합니다.
# Person 클래스의 인스턴스 생성
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)
# 인스턴스 메서드 호출
print(person1.greet()) # Output: Hello, my name is Alice and I am 30 years old.
print(person2.greet()) # Output: Hello, my name is Bob and I am 25 years old.
Class (클래스) & OOP (객체지향 프로그래밍)
앞에서 상속 & 다형성에 데하여 설명을 간단하게 했지만 여기서 자세하게 한번 설명해 보겠습니다.
Interitance (상속)
상속은 기존 클래스(부모 클래스)를 기반으로 새로운 클래스(자식 클래스)를 정의하는 것을 의미합니다.
상속을 통해 코드의 재사용성을 높이고, 계층적 관계를 명확히 할 수 있습니다.
자식 클래스는 부모 클래스의 속성과 메서드를 상속받아 사용할 수 있으며, 필요에 따라 이를 확장하거나 재정의할 수 있습니다.
- 부모 클래스(Parent Class): 다른 클래스에 상속되는 클래스.
- 자식 클래스(Child Class): 부모 클래스를 상속받아 정의되는 클래스.
기본 문법
class Parent:
# 부모 클래스의 코드
pass
class Child(Parent):
# 자식 클래스의 코드
pass
Example
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("Subclass must implement abstract method")
class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"
class Cat(Animal):
def speak(self):
return f"{self.name} says Meow!"
# 인스턴스 생성 및 메서드 호출
dog = Dog("Buddy")
cat = Cat("Whiskers")
print(dog.speak()) # Output: Buddy says Woof!
print(cat.speak()) # Output: Whiskers says Meow!
상속의 장점
- 코드 재사용성: 공통된 코드를 부모 클래스에 정의하고, 이를 여러 자식 클래스에서 재사용할 수 있습니다.
- 계층적 관계 명확화: 클래스 간의 관계를 명확히 하여, 코드의 구조를 이해하기 쉽게 만듭니다.
Polymorphism (다형성)
다형성은 동일한 인터페이스를 사용하여 서로 다른 데이터 타입의 객체를 다룰 수 있는 능력을 의미합니다.
다형성은 주로 메서드 오버라이딩과 인터페이스를 통해 구현됩니다.
- 메서드 오버라이딩(Method Overriding): 자식 클래스가 부모 클래스에서 상속받은 메서드를 재정의하는 것 입니다.
Example
class Animal:
def speak(self):
raise NotImplementedError("Subclass must implement abstract method")
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
def make_animal_speak(animal):
print(animal.speak())
# 서로 다른 객체를 동일한 인터페이스로 다룸
dog = Dog()
cat = Cat()
make_animal_speak(dog) # Output: Woof!
make_animal_speak(cat) # Output: Meow!
다형성의 장점
- 유연성: 동일한 인터페이스를 통해 다양한 객체를 처리할 수 있어, 코드의 유연성을 높입니다.
- 확장성: 새로운 데이터 타입의 객체를 추가할 때 기존 코드를 수정하지 않고도 기능을 확장할 수 있습니다.
'⌨️ Python & Algorithm' 카테고리의 다른 글
[Python] Database - 데이터베이스 (0) | 2024.07.15 |
---|---|
[Python] 파일 입출력 (0) | 2024.07.15 |
[Python] Generator, Iterator, Yield (제너레이터, 이터레이터, Yield) (0) | 2024.07.15 |
[Python] Python - Function (함수) (0) | 2024.07.14 |
[Python] Python - 변수와 자료형, 연산, 조건, 반복문 (0) | 2024.07.14 |