💡 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