SEB FE 42_TIL

[JavaScript] 객체 지향 프로그래밍 (OOP)

김피치 2022. 11. 18. 14:29
  • 객체 지향 프로그래밍

- 데이터의 접근과, 데이터의 처리 과정에 대한 모형을 만들어 내는 방식

- 사람이 세계를 보고 이해하는 방법과 매우 흡사

- 현대의 언어들은 대부분 객체 지향의 특징을 갖고 있음

   ex. Java, C++, C#

   cf. JavaScript: 객체 지향으로 작성 가능

- OOP의 모든 것은 "객체"로 그룹화됩니다.

- OOP 4가지 주요 개념(캡슐화/추상화/상속/다형성)을 통해 재사용성을 얻음

 

 

  • 캡슐화

1. 데이터와 기능을 (하나의 객체 안에 넣어) 하나의 단위로 묶는 것

 

2. 은닉(hiding): 구현은 숨기고, 동작은 노출시킴

  • 내부 데이터나 내부 구현이 외부로 노출되지 않게, 객체 외부에서 필요한 동작(메서드)만 노출
  • 엄격한 클래스의 경우 속성의 직접적 접근을 막고 설정하는 함수(setter)와 불러오는 함수(getter)를 철저히 분리 

3. 느슨한 결합(Loose Coupling)에 유리

  • 언제든 구현을 수정할 수 있되, 노출된 메서드를 사용하는 코드 흐름은 바뀌지 않게
  • 코드 실행 순서가 아닌 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합

4. 코드가 복잡하지 않게 만들고, 재사용성을 높임

 

 

  • 추상화

1. 인터페이스의 단순화 -> 너무 많은 기능들이 노출되어 예기치 못한 사용상의 변화가 일어나지 않도록 

* 인터페이스 : 클래스 정의 , 메서드와 속성만 정의한 

2. 클래스를 사용하는 사람이 필요하지 않은 메서드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스

  • 내부 구현은 아주 복잡한데, 실제로 노출되는 부분은 단순하게 만듬
  • 코드가 복잡하지 않게 만들고, 단순화된 사용으로 변화에 대한 영향을 최소화

 

 

  • 상속
  • 부모 클래스(기본 클래스base class)의 특징을 자식 클래스(파생 클래스derived class)가 물려 받음
  • 부모 클래스에 이미 구현된 속성과 메소드를 다시 코드로 구현하지 않고, 상속을 이용해 자식 클래스가 속성과 메소드를 물려받음 -> 효율성 ⬆️ 
  • 불필요한 코드를 줄여 재사용성을 높임

 

  • 다형성
  • Poly "많은" + morph "형태" = 다양한 형태를 가진다
  • 동일한 메서드에 대해 if/else if 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능
  • 같은 이름을 가진 메서드라도 다른 방식으로 구현될 수 있음

       Ex. HTMLElement 클래스의 render 메서드를 TextBox, Select, CheckBox 클래스가 상속받아도 각기 다르게 작동(네모 상자와 커서 / 박스를 눌렀을 선택지 표출 / 체크박스 표출)