💡 OOP : Object-Oriented Programming의 약자로 객체(Object)를 기반으로 프로그램을 만드는 방법론.
Source : https://velog.io/@gil0127/Object-Oriented-Programming-in-Javascript
OOP는 실제 세상을 표현하고 있는, 여러가지 개념들을 프로그램으로 옮겨서 구현할 수 있기 위한 컨셉의 프로그래밍 패러다임(paradigm)
→ 개념의 추상화(abstraction)
객체(object)라는 개념은 실제 사물 하나하나를 의미할 수 있고, 이러한 사물들이 공유하는 속성을 정의한 것을 클래스(Class)이다.
기존 방식은 데이터(변수, variable)와 데이터를 처리하는 기능(함수, function)이 독립적이었지만, OOP는 이를 하나의 개념(Class)로 묶어서 생각하기 때문에 그 객체가 처리되는 기능을 자연스럽게 정의할 수 있다.
Class에는 Class를 기술하는 정보를 나타내는 변수인 Class variable
과 Class의 특징을 설명하는 기능인 Class method
를 포함한다.
추상적인 개념 Class를 실제로 사용하려면 하나 하나의 개별 사물로 만들어야 하는데, 이를 개별 사물인 객체(object)라고 한다.
→ 개념의 구체화(instantiation)
위와 같은 개념을 살려 프로그램을 만드는 방식은 OOP의 장점은 다음과 같습니다.
Source : https://masterdotnet.com/csharptutorial/csharpinheritance/
클래스는 개념의 추상화이기 때문에, 해당 개념을 계승하는 하위 개념을 만들 수 있다.
상위/하위 개념이 상대적으로 존재하며, 상속하는 클래스는 superclass
, 상속받는 클래스는 subclass
라고 얘기합니다.
subclass는 superclass의 모든 개념을 이어받기 때문에, class variable, class method도 그대로 이어받는다.
# Superclass
class Parent:
<statement>
# Subclass
class Child(Parent):
<statement>
Source : https://codegym.cc/groups/posts/polymorphism-in-java
Polymorphism
이다.Method Overriding
라고 한다.class Animal:
def crying(self):
pass
class Dog(Parent):
def crying(self): # Override
return "Woof"
class Cat(Parent):
def crying(self): # Override
return "Meow"
superclass
를 활용한다는 점에서 유사하다.Override
에 있다.class Country:
#Super Class
name = '국가명'
population = '인구'
capital = '수도'
def show(self):
print('국가 클래스의 메소드입니다.')
def show_capital(self):
print(capital)
class Korea(Country):
"""Sub Class"""
def __init__(self, name):
self.name = name
def show_capital(self): # Override
self.capital = '서울'
print(f"{self.name}의 수도는 {self.capital}입니다.")
def show_name(self):
print(f"국가 이름은 {self.name}입니다.")
a = Korea('대한민국')
a.show() # superclass의 메소드 호출 -> 상속
>>> 국가 클래스의 메소드입니다.
a.show_name() # class 메소드 호출
>>> 국가 이름은 대한민국입니다.
a.capital # superclass 변수 -> 상속
>>> '수도'
a.show_capital() # 다형성
>>> 대한민국의 수도는 서울입니다.
a.capital
>>> '서울'
Source : https://medium.com/javarevisited/why-should-encapsulation-to-be-used-e82a81f5c47c