목차
프로그램을 공부하다 보면 자주 접하는 용어 중에 하나가 객체지향입니다. 제가 처음 프로그램을 배울 때에는 이러한 개념이 없었으며, 그때는 한 땀 한 땀 코딩을 했습니다. 반복적으로 사용하는 로직의 경우 함수 정의를 통해 사용하긴 했으나, 클래스라는 탬플릿을 만들고, 이를 붕어빵 찍어내듯이 사용하는 방식은 아직도 생소하기만 합니다. 파이썬을 사용하다 보면 pd.plot()과 같이 '.' 다음에 함수를 사용하곤 합니다. 객체지향은 잘 모르지만 어느샌가 오브젝트를 생성한 후 매소드를 사용하고 있는 겁니다. 오늘은 조금은 어렵지만 한 번쯤은 짚고 넘어가야 하는 객체지향 프로그래밍의 주요 개념을 정리하려고 합니다.
1. 객체 지향 프로그래밍이란?
객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 소프트웨어 개발 방법 중 하나로, 현실 세계의 객체(Object)를 모델링하여 프로그램을 구성하는 개념입니다. 파이썬은 객체 지향 프로그래밍을 지원하는 언어로, 클래스(Class)와 객체(Object)를 사용하여 객체 지향 개념을 구현할 수 있습니다.
객체는 데이터와 해당 데이터를 처리하는 메서드(Method)로 구성됩니다. 데이터는 객체의 상태(State)를 나타내며, 메서드는 객체의 행위(Behavior)를 정의합니다. 클래스는 객체의 템플릿(Template)으로, 객체의 공통적인 특징(속성)과 동작(메서드)을 정의합니다. 객체는 클래스의 인스턴스로, 클래스로부터 생성됩니다.
2. 객체 지향 프로그래밍의 주요 개념 5가지
2-1 클래스(Class)
클래스는 객체의 템플릿(Template)으로, 객체의 속성(변수)과 동작(메서드)을 정의합니다. 클래스는 객체를 생성하는 데 사용되며, 객체들은 동일한 클래스에 속합니다.
class Item:
def __init__(self, name, price):
self.name = name
self.price = price
def display_info(self):
print("이름: {}, 가격: {} 원".format(self.name, self.price))
위의 예시 코드는 Item이라는 클래스를 정의하는 예입니다. Item 클래스는 물건의 이름과 가격을 속성으로 갖고 있고, display_info라는 메서드를 갖고 있습니다.
2-2 객체(Object)
객체는 클래스의 인스턴스(Instance)로, 클래스로부터 생성됩니다. 객체는 클래스에서 정의된 속성(변수)을 가지며, 클래스에서 정의된 메서드를 호출하여 동작을 수행할 수 있습니다.
item1 = Item("사과", 1000)
item2 = Item("바나나", 800)
위의 예시 코드는 Item 클래스의 객체인 item1과 item2를 생성하는 예입니다. item1과 item2는 각각 "사과"와 "바나나"라는 이름과 1000원, 800원이라는 가격을 가진 물건을 나타냅니다.
2-3 상속(Inheritance)
상속은 클래스가 다른 클래스의 속성과 메서드를 상속받는 개념입니다. 상속을 통해 코드의 재사용성이 높아지며, 코드의 중복을 줄일 수 있습니다.
classDiscountedItem(Item):
def__init__(self, name, price, discount_rate):
super().__init__(name, price)
self.discount_rate = discount_rate
def display_info(self):
print("이름: {}, 가격: {} 원, 할인율: {}%".format(self.name, self.price,
self.discount_rate))
위의 예시 코드는 Item 클래스를 상속하여 DiscountedItem이라는 새로운 클래스를 정의하는 예입니다. DiscountedItem 클래스는 Item 클래스의 속성과 메서드를 상속받고, 추가적으로 할인율(discount_rate)이라는 속성과 display_info 메서드를 가지고 있습니다.
2-4 다형성(Polymorphism)
다형성은 동일한 인터페이스를 가지고 다양한 객체를 처리할 수 있는 개념입니다. 다양한 클래스의 객체를 동일한 방식으로 다룰 수 있어 코드의 유연성을 높입니다.
def print_info(item):
item.display_info()
item1 = Item("사과", 1000)
item2 = DiscountedItem("바나나", 800, 10)
print_info(item1) # 이름: 사과, 가격: 1000 원
print_info(item2) # 이름: 바나나, 가격: 800 원, 할인율: 10%
위의 예시 코드는 print_info라는 함수를 정의하는 예입니다. 이 함수는 Item 클래스의 객체나 DiscountedItem 클래스의 객체를 인자로 받아 display_info 메서드를 호출하여 정보를 출력합니다. 이렇게 동일한 인터페이스(display_info 메서드)를 가진 다양한 객체를 동일한 방식으로 처리할 수 있어 다형성을 나타냅니다.
2-5 캡슐화(Encapsulation)
캡슐화는 객체의 상태와 동작을 외부로부터 보호하는 개념입니다. 클래스는 객체의 내부 구현을 숨기고, 외부에서는 객체의 인터페이스만 사용할 수 있도록 합니다.
class Item:
def__init__(self, name, price):
self._name = name
self._price = price
def get_name(self):
return self._name
def get_price(self):
return self._price
def set_name(self, name):
self._name = name
def set_price(self, price):
self._price = price
def display_info(self):
print("이름: {}, 가격: {} 원".format(self._name, self._price))
위의 예시 코드는 `Item` 클래스의 속성들을 private으로 설정하고, getter와 setter 메서드를 사용하여 외부에서 접근을 제한하는 예입니다. 이렇게 객체의 속성을 캡슐화하여 객체 내부에서 속성에 대한 접근과 수정을 제어할 수 있습니다.
3. 마치며
객체 지향 프로그래밍은 복잡한 시스템을 모듈화 하고, 코드의 재사용성을 높이며, 코드의 유지 보수성을 향상시킬 수 있는 장점이 있습니다. 파이썬은 객체 지향 프로그래밍을 지원하며, 클래스와 객체를 활용하여 다양한 기능을 구현할 수 있습니다. 위에서는 파이썬에서의 객체 지향 프로그래밍의 5개의 주요 개념인 클래스, 객체, 상속, 다형성, 캡슐화를 코드 예시를 통해 설명해 보았습니다. 실제 코드에서는 더 복잡하게 구현을 하겠지만 개념을 잘 이해한다면 충분히 응용이 가능할 겁니다.
댓글