객체 지향 프로그래밍(OOP) 소개
객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그래밍 방법론 중 하나로 실세계의 사물이나 개념을 프로그램 내의 객체
로 표현하고, 이들 객체 간의 상호작용을 통해 소프트웨어를 개발하는 방식입니다.
OOP의 핵심 개념
OOP는 데이터(속성, Property)와 데이터를 처리하는 기능(메소드, Method)을 '객체'로 묶는 개념입니다. 주요 구성 요소는 다음과 같습니다:
-
객체(Object)
: 객체는 데이터(속성)와 그 데이터에 대한 조작을 수행하는 함수(메서드)를 결합한 것입니다. 예를 들어, '자동차'라는 객체는 '색상', '모델', '속도' 등의 속성과 '가속하기', '정지하기' 등의 메서드를 가질 수 있습니다. -
클래스(Class)
: 클래스는 객체를 생성하기 위한 '템플릿' 또는 '틀'입니다. 클래스는 특정 유형의 객체들이 공유하는 속성과 메서드를 정의합니다. 클래스로부터 생성된 객체를 인스턴스(Instance)라고 합니다. -
상속(Inheritance)
: 한 클래스(부모 클래스)의 속성과 메서드를 다른 클래스(자식 클래스)가 받아 사용할 수 있습니다. -
캡슐화(Encapsulation)
: 객체의 데이터(속성)를 외부로부터 숨기고, 객체의 메서드만을 통해 이 데이터에 접근할 수 있게 하는 것입니다. 이를 통해 외부로부터 객체를 보호합니다. -
다형성(Polymorphism)
: 다형성은 같은 이름의 메서드가 다른 클래스에서 다른 행동을 할 수 있게 하는 특성입니다. 이를 통해 코드의 유연성과 재사용성을 증가시킬 수 있습니다.
클래스와 객체 사이의 관계는 '자동차 설계도'와 '자동차', '요리 레시피'와 '요리'와 같이 생각할 수 있습니다.
간단히 말하면 '인스턴스(Instance)'는 특정 클래스(Class)가 '구현된 것'를 의미하며, 이렇게 구현된 것이 바로 '객체'(Object)입니다.
OOP 사용 예시
class Animal: # Animal 클래스 정의
def __init__(self, name): # 생성자 메서드
self.name = name # name 속성 정의
def speak(self): # speak 메서드 정의
pass
class Dog(Animal): # Dog 클래스 정의
def speak(self): # speak 메서드 재정의
return f"{self.name}가 멍멍!" # name 속성 사용
# 객체 생성 및 사용
my_dog = Dog("바둑이")
print(my_dog.speak()) # 출력: 바둑이가 멍멍!