# OOP

# 객체 지향 프로그래밍(OOP)

프로그래밍은 여러가지 방식을 통해 구조를 선택하고 해당 구조에 따른 스타일을 통해 구현한다. 프로그래밍을 진행하는 구조는 절차지향, 객체지향, 함수형 등 많은 방식이 있다. 객체지향은 어떠한 프로그래밍 페러다임이고 해당 구조는 어떠한 장점과 단점을 가지고 있으며 어떤 구조로 만들어지는지 확인해본다.

대표적인 객체지향 프로그래밍 언어는 Java, C++ 등이 있다. 객체 지향은 모든 기능들을 객체라고 하는 하나의 추상적인 상태로 정하여 객체를 기반으로 하여 다른 기능들을 파생하여 생성하게 된다.

# 객체 지향의 중요 요소

객체 지향은 기본적으로 4가지의 규칙을 가지고 구현하게 된다.

  1. 캡슐화(은닉화)
  2. 상속
  3. 추상화
  4. 다형성

# 캡슐화

외부에서는 객체 내부의 정보를 알 수 없는 상태를 보장해야 한다. 일반적인 Class내부의 데이터는 외부에서 접근 가능한 여부를 조정 할 수 있으며, 필요에 의해 기능을 할 수 있도록 합니다.

private, static, public, readonly등의 타입스크립트 keyword를 통해서 해당 기능을 구현할 수 있습니다.

# 상속

javascript는 Prototype과 class를 통해서 상속을 구현 할 수 있습니다. 부모 객체로부터 필요한 내부 값과 method를 말 그대로 상속 받아 이용할 수 있으며, 상속 과정에서 기능을 변경하여 선언할 수 있습니다.

# 추상화

객체는 특정한 케이스에 맞춰서 생성하기 보다 같은 범주에 속하는 객체들을 공통의 기능에 맞추어 추상화해 생성하는 것이다. 추상화된 객체는 일괄적인 기능을 보장할 수 있으며, 개발자가 해당 객체가 어떠한 동작을 요구하는지 유추하고, 이후 유지보수를 하는데 큰 도움을 준다.

# 다형성

다형성은 추상화된 객체에서 쉽게 사용할 수 있는 특성으로, 포유류라고 하는 객체를 통해 강아지, 고양이등 여러가지 다형성을 가진 객체를 생성할 수 있다. 모두 포유류의 공통적인 특징을 가지고 있지만, 울음소리나 습성등 각 객체가 가진 특성적 차이를 구현하는것이 다형성이라고 할 수 있다.