Coding/OOP Paradigm

[OOP Paradigm] 파이썬객체지향: Everything in Python is an object (4)

# 객체지향프로그래밍이란?

앞서 파이썬의 모든 것이 객체라고 정의한 바 있습니다. 우리가 일반적으로 사용했던 숫자나 리스트, 튜플 등 모든 자료형이 어떤 클래스의 인스턴스입니다. 코드로 본 바와 같이 인스턴스들은 특정 클래스에 속해있고 그 클래스들은 특정 속성(Attribute)와 기능(Method)를 가짐을 알 수 있습니다. 클래스들의 속성과 기능을 미리 정의한 부분을 통해 볼 수 있듯이 객체 지향프로그래밍은 클래스를 구성하기 위해 관련된 속성이나 동작을 개별 객체로 묶음으로써 구조화된 프로그램을 구성하는 방법입니다. 예를 들어, 객체는 이름, 나이, 주소와 같은 속성(Attribute)와 걷기,말하기, 호흡하기, 달리기와 같은 행동(Method)을 가진 사람을 나타낼 수 있습니다. , 객체 지향 프로그래밍은 자동차와 같은 구체적이고 실제적인 사물 뿐만 아니라 회사와 직원, 학생과 교사 등과 같은 사물 간의 관계를 모델링하는 접근 방식입니다.

이렇게 클래스로 구성하여 객체를 불러내는 형식으로 이용되어 문제를 쉽고 자연스럽게 프로그램화(모델링)할 수 있다는 장점을 가집니다. 이 때 객체들이 완전한 독립성이 유지되는 방식으로 진행되며, 프로그램 모듈이 모두 재사용 가능합니다. 이덕분에 (전 방식에 속하는 절차 지향 패러다임에 비해) 매우 효율적이며 직관적인 코드 구성이 가능해집니다.

 객체지향프로그래밍의 기능성 확장하기

OOP 패러다임의 가장 큰 특징 중 하나는 함수를 통한 기능성 확장이 가능하다는 점입니다. 기능성 확장으로 불필요한 코드 작업을 줄여 효율적인 코드 작성, 효율적인 메모리 관리가 가능합니다. 대표적인 특징인 상속 (inheritance)와 다형성 (Polymorphism)을 예시들을 통해 확인해보겠습니다.

1. 상속(Inheritance)
상속은 이미 부모 클래스 용으로 작성된 클래스를 바탕으로 자식 클래스 코드를 작성하는 방법입니다. 예를 들어,

부모 클래스인 Car 클래스의 일부 속성은 자식 클래스인 Bus, Truck 등의 클래스와 동일합니다. 상속 특성을 통해 자식 클래스는 부모 클래스의 기능을 확장할 수 있다는 장점이 있습니다. , 자식 클래스는 부모의 모든 속성과 메서드를 상속하지만 자신에게 고유한 속성과 메서드를 지정할 수 있습니다.

2. 다형성(Polymorphism)

자식 클래스와 부모 클래스의 inheritance 관계를 통해 자식 클래스는 메서드를 재정의할 수 있습니다. 다형성은 다양한 형태를 취할 수 있는 능력을 의미합니다. 이러한 다형성은 메서드 오버라이딩 (Method Overriding)과 메서드 오버로딩(Method Overloading) 으로 존재합니다. 위에서 서술된 개 클래스를 바탕으로, 오버라이딩된 다음 예제를 확인해보겠습니다.

class GoldenRetriever(Dog):
	def speak(self, sound="Bark"):
		return super().speak(sound)

개의 품종 중 하나인 GoldenRetriever 에 대한 자식 클래스입니다. 개 품종마다 짖는 소리가 약간 다르기 때문에 부모 클래스에 나온 .speak() 함수를 재정의해야 합니다. GoldenRetriever 클래스에서는 부모 클래스인 Dog 의 메서드를 상속하여 그대로 사용 가능합니다. 자식 클래스에 대한 객체를 생성해보고 함수를 실행한 결과를 보겠습니다.

>>> jim = GoldenRetriever(“Jim”, 5) 
>>> jim.speak()
‘Jim says Bark’

코드 실행 시Jim라는 5살 된 골든 리트리버 품종의 개 인스턴스가 생성됩니다. 메서드 오버라이딩을 통해, 이전에 Dog 객체에서 speak 함수를 부를 때 sound 파라미터를 넣을 필요없이 품종에 따라 바로 함수가 작동됨을 알 수 있습니다.

객체지향패러다임의 대표적인 특징들을 예시와 함께 살펴보았습니다. 상속을 통해 기능성이 확장되면서 응집력이 강화하여 효율적이며 직관적인 코드를 가능케 합니다. 다형성으로 클래스 간에 독립적으로 디자인하여 결합력을 약하게 할 수 있다는 면이 존재합니다.