본문으로 건너뛰기
실습하기

캡슐화와 다형성, 객체지향 프로그래밍의 핵심 개념

캡슐화(Encapsulation)다형성(Polymorphism) 역시 객체지향 프로그래밍의 핵심 개념입니다.

이번 수업에서는 캡슐화와 다형성의 개념을 소개하고, 파이썬에서 어떻게 활용하는지 알아보겠습니다.


캡슐화란?

캡슐화는 객체의 상태를 외부에서 직접 접근하지 못하도록 보호하는 것을 뜻합니다.

객체 내부의 데이터는 외부에서 직접 접근할 수 없으며, 공개된 메서드를 통해서만 조작할 수 있습니다.

이를 통해 데이터 무결성(데이터의 정확성과 일관성)을 보장하고, 객체의 상태를 안전하게 유지합니다.

캡슐화 예시
class Car:
def __init__(self, speed):
self.__speed = speed # speed 속성을 비공개로 설정, __는 비공개 속성을 의미

def get_speed(self):
return self.__speed # 캡슐화된 속성 반환

def set_speed(self, speed):
if speed > 0:
self.__speed = speed # 캡슐화된 속성 변경

my_car = Car(50)

# 출력: 50
print(my_car.get_speed())

위 예제에서 __speed 속성은 캡슐화되어 비공개 상태이기 때문에 외부에서 직접 접근할 수 없습니다.

'__speed' 속성은 get_speedset_speed 메서드를 통해서만 조작 가능합니다.

my_car.__speed와 같이 속성에 직접 접근하면 오류가 발생하므로, 데이터의 무결성을 보장할 수 있습니다.


다형성이란?

다형성은 동일한 메서드가 여러 객체에서 다르게 동작할 수 있는 것을 뜻합니다.

이를 통해 코드의 유연성과 확장성이 크게 향상됩니다.

부모 클래스에서 정의한 메서드를 자식 클래스에서 재정의하는 메서드 오버라이딩은 다형성의 대표적인 예시입니다.

다형성 예시
class Animal:
def speak(self):
return "소리를 낸다"

class Dog(Animal):
def speak(self):
return "멍멍"

class Cat(Animal):
def speak(self):
return "야옹"

animals = [Dog(), Cat()]

for animal in animals:
# Dog 클래스와 Cat 클래스에서 오버라이딩한 speak 메서드 호출
print(animal.speak())
# 출력: 다른 줄에 '멍멍'과 '야옹'이 출력됨

위 예제에서 Animal 클래스에 정의된 speak 메서드는 DogCat 클래스에서 각각 다르게 동작합니다.

이는 다형성을 통해 같은 메서드 호출이 객체에 따라 다른 결과를 반환할 수 있습니다.

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!