객체지향 프로그래밍(OOP)은 다양한 속성과 개념을 포함하며, 그 중에서도 추상화, 상속, 다형성, 캡슐화는 주요 OOP 속성입니다. 이들을 간단한 설명과 파이썬 코드 예제를 통해 설명하겠습니다.
추상화 (Abstraction):
추상화는 복잡한 시스템이나 개체를 단순화하고 핵심 기능에만 집중하도록 도와주는 개념입니다. 추상화를 통해 세부 사항을 숨기고 중요한 기능에만 집중할 수 있습니다. 구축한 클래스와 세부함수를 외부 파이썬 파일로 빼고 라이브러리 import방식으로 배포하면 기능을 구현할 인터페이스는 제공하되 어떤 식으로 코딩이 되었는지는 알 수 없습니다.
파이썬 코드 예시:
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius * self.radius
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
# 추상화를 사용하여 도형의 면적을 계산
circle = Circle(5)
rectangle = Rectangle(4, 6)
print("Circle Area:", circle.area())
print("Rectangle Area:", rectangle.area())
상속 (Inheritance):
상속은 이미 존재하는 클래스의 속성과 메서드를 새 클래스에서 재사용할 수 있게 하는 개념입니다. 부모 클래스(슈퍼 클래스)의 특성을 자식 클래스(서브 클래스)에서 확장하거나 변경할 수 있습니다.
파이썬 코드 예시:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
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()) # "Buddy says Woof!"
print(cat.speak()) # "Whiskers says Meow!"
다형성 (Polymorphism):
다형성은 객체지향 프로그래밍에서 상속과 관련하여 발생하는 중요한 개념 중 하나로, 동일한 메서드 이름을 가진 다양한 클래스에서 서로 다른 동작을 수행할 수 있는 능력을 나타냅니다. 이를 통해 코드 재사용성을 증가시키고 유연성을 제공합니다.
다형성의 핵심 아이디어는 다음과 같습니다:
- 메서드 이름 일치: 여러 클래스(부모 및 자식 클래스)는 동일한 메서드 이름을 사용합니다. 이 메서드를 가리키는 이름은 동일하며 메서드 시그니처(매개변수 및 반환 값)도 동일해야 합니다.
- 서로 다른 구현: 각 클래스는 동일한 메서드 이름을 사용하더라도 해당 메서드를 다르게 구현할 수 있습니다. 이것이 다형성의 핵심입니다. 각 클래스는 자신만의 고유한 동작을 정의합니다.
- 상속을 통한 활용: 다형성은 상속 관계에서 주로 활용됩니다. 자식 클래스는 부모 클래스로부터 메서드를 상속받고, 필요에 따라 메서드를 재정의(오버라이드)하여 자신만의 동작을 정의합니다.
파이썬 코드로 다형성을 더 자세히 설명하겠습니다. 아래는 다형성의 예시 코드입니다:
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
class Duck(Animal):
def speak(self):
return "Quack!"
# Animal 타입의 리스트에 다양한 동물 객체 저장
animals = [Dog(), Cat(), Duck()]
# 모든 동물들의 소리 출력
for animal in animals:
print(animal.speak())
이 코드에서 Animal 클래스는 speak 메서드를 정의하고, 각 동물 클래스인 Dog, Cat, Duck는 이 메서드를 오버라이드하여 자신만의 소리를 반환합니다. 이렇게 서로 다른 클래스의 인스턴스가 동일한 메서드 이름을 사용하면서 각자의 동작을 수행하고, 이것이 다형성의 핵심 아이디어입니다.
위의 코드를 실행하면 각 동물이 자신만의 소리를 출력하며, 동일한 메서드를 호출함에도 불구하고 다양한 동작이 이루어지는 것을 볼 수 있습니다. 이것이 다형성의 강력한 특징 중 하나입니다.
캡슐화 (Encapsulation):
캡슐화는 객체의 상태와 행동을 하나의 단위로 묶어 외부에서 직접 접근하지 못하도록 제한하는 개념입니다. 이를 통해 객체의 내부 데이터를 보호하고 오용을 방지할 수 있습니다. __로 시작하는 변수는 외부에서 접근할 수 없습니다. 본 클래스를 외부 파일로 쓰고 import한다면 외부인은 해당 변수에 접근할 수 없고 별도의 함수 등을 통해서 변수에 대한 정보 제공여부를 결정할 수 있습니다.
파이썬 코드 예시:
class BankAccount:
def __init__(self, balance):
self.__balance = balance # __로 시작하는 변수는 비공개
def deposit(self, amount):
if amount > 0:
self.__balance += amount
def withdraw(self, amount):
if amount > 0 and amount <= self.__balance:
self.__balance -= amount
else:
print("Insufficient funds!")
def get_balance(self):
return self.__balance
account = BankAccount(1000)
account.deposit(500)
account.withdraw(200)
print("Balance:", account.get_balance()) # "Balance: 1300"
위의 코드 예제에서, 각 OOP 속성이 파이썬에서 어떻게 구현될 수 있는지 보여주었습니다. 추상화, 상속, 다형성 및 캡슐화는 객체지향 프로그래밍의 핵심 개념이며, 이들을 활용하여 코드를 더 효과적으로 관리하고 유지보수할 수 있습니다.
'기술면접' 카테고리의 다른 글
기술면접 - 프로그래밍의 기본 (0) | 2023.10.19 |
---|---|
기술면접 - 검색엔진 최적화(SEO) (0) | 2023.10.19 |
기술면접 - 객체지향 1 (0) | 2023.10.17 |
기술면접 - GIT & GITHUB (0) | 2023.10.16 |
프론트엔드 기술면접 - 쿠키, 세션, 토큰 설명 (3) | 2023.10.16 |