프로그램을 실제 세상에 가깝게 모델링하는 기법이다. 실제 세상에 가깝게 모델링한다는 것은 무슨 뜻일까. 데이터(data)를 추상화시켜 상태(속성)와 행위(methods)를 가진 객체(object)로 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직(흐름)을 구성하는 프로그래밍 방법이라 할 수 있다
class
어떤 문제를 해결하기 위한 데이터를 만들기 위해 OOP 원칙에 따라 집단(현실 세계)에 속하는 속성과 행위(methods)를 변수와 메서드로 정의한 설계도와 같다
instance (object)
class에서 정의한 것(설계도)을 토대로 실제 메모리상에 할당된 것(실제 사물, object)으로 실제 프로그램에서 사용되는 데이터이다.
하나의 class로 만들어진 여러 instance(object)는 각각 독립적이다.
객체로 정의되면 메모리에 올라가고, 각 객체 내에서 일어나는 수정은 다른 객체에 영향을 주지 않는다
추상적으로 개념들만 늘어놓았는데, 이를 맛보기로 직접 짜보자. 맛보기라고 한 이유는 OOP의 원칙을 아직 다 반영하지는 않고, 설계도인 class에 속성과 기능을 정의해서 구현하고, 이를 객체로 정의하는 것에 초점을 두고 실습하려하기 때문이다.
사칙연산을 수행하는 계산기의 설계도를 프로그래밍 언어로 작성하여, 이후에 새로운 두 수에 대한 계산이 가능한 계산기 객체를 효율적으로 정의하고 싶다고 가정하자. 계산기는 계산의 대상이 되는 두 수를 속성 (attribute) 으로 가지며, 사칙연산을 네가지 기능으로 가진다. 아래는 이를 구현한 코드이다.
계산기의 설계도에 속성인 두 수 a, b 와 기능인 add, sub, mul, div 에 해당하는 사칙연산을 정의한다. 그리고 계산이 필요한 두 수에 대해 효율적으로 계산기 객체를 정의해서 원하는 계산의 결과값을 출력할 수 있다.
class Calculator:
def __init__(self, a, b):
self.a = a
self.b = b
def add(self):
return a + b
def sub(self):
return a - b
def mul(self):
return a * b
def div(self):
return a / b
cal1 = Calculator(1, 2)
cal2 = Calculator(3.5, 4.5)
print(cal1.add()) # 3
print(cal1.sub()) # -1
print(cal2.mul()) # 15.75
print(cal2.add()) # 8
Object Oriented Programming 원칙 (4) - 다형성(polymorphism) (0) | 2022.05.20 |
---|---|
Object Oriented Programming 원칙 (3) - 상속(inheritance) (0) | 2022.05.20 |
Object Oriented Programming 원칙 (2) - 캡슐화(encapsulation) (0) | 2022.05.18 |
Object Oriented Programming 원칙 (1) - 추상화 (abstraction) (0) | 2022.05.18 |
데코레이터 (Decorator) - 개념, 장단점, 예시 (0) | 2022.05.10 |
댓글 영역