본문 바로가기
Language/JavaScript

[JS] OOP

by 오우영 2021. 2. 26.

OOP (Object Oriented Programming)

배경

  • 초기의 프로그래밍 언어는 일반적으로 절차적 언어라고 불림 (C, 포트란 등)
  • 절차적 언어는 순차적인 명령의 조합
  • 단순히 별개의 변수와 함수로 순차적으로 작동하는 것을 넘어, 데이터의 접근과, 데이터의 처리 과정에 대한 모형을 만들어 내는 방식으로 바뀜
  • 데이터와 기능이 별개로 취급되지 않고, 한번에 묶어서 처리가 가능해짐

특징과 의미

  • 프로그램 설계 철학
  • 모든 것은 '객체'로 그룹화 됨
  • 재사용성을 얻을 수 있음
  • 사람이 세계를 보고 이해하는 방법을 흉내낸 방법론

클래스와 인스턴스

  • 클래스는 일종의 원형(original form)으로, 객체를 생성하기 위한 청사진
  • 인스턴스는 클래스의 사례
  • 클래스는 객체를 만들기 위한 생성자(constructor) 함수를 포함합니다
  • 생성자를 통해 세부 사항(속성)을 넣어줄 수 있습니다

속성과 메소드

  • 자동차를 예로 든다면 속성은 색상, 가격, 속력과 같은 고유의 값을 말합니다
  • 시작, 후진, 전진, 멈춤과 같이 자동차의 기능이 메소드로 존재합니다

 

OOP Basic Concepts

Encapsulation (캡슐화)

  • 데이터와 기능을 하나의 단위로 묶는 것
  • 은닉 : 구현은 숨기고, 동작은 노출
  • 느슨한 결합(Loose Coupling)에 유리 : 언제든 구현을 수정할 수 있음
  • 절차적 코드의 경우 데이터의 형태가 바뀔 때에 코드의 흐름에 큰 영향을 미치지만, 객체 지향의 경우 객체 내 메소드의 구현만 수정하고, 노출된 메소드를 사용하는 코드 흐름은 바뀌지 않도록 만들 수 있습니다.
  • 코드나 데이터의 은닉에 포커스가 맞춰짐
  • 코드가 복잡하지 않게 만들고, 재사용성을 높임

 

Inheritance (상속)

  • 기본 클래스(base class)의 특징을 파생 클래스(derive class)가 상속 받는 것
  • 공통적으로 가지는 속성과 메소드를 기본 클래스로 정의하여 파생 클래스에 상속, 파생 클래스는 개별적인 속성, 메소드를 추가할 수 있음
  • 불필요한 코드를 줄여 재사용성을 높임

 

Abstraction (추상화)

  • 추상화를 통해 복잡한 내부 동작을 생각하지 않고 실제 사용하는 인터페이스를 단순화 할 수 있음
  • 너무 많은 기능들이 노출되지 않은 덕분에 예기치 못한 사용상의 변화가 일어나지 않도록 만들 수 있음
  • 클래스를 사용하는 사람이 필요하지 않은 메소드 등을 노출시키지 않고 인터페이스를 단순화 시키는 것에 포커스가 맞춰짐
  • 클래스 정의 시, 메소드와 속성만 정의한 것을 인터페이스라고 함 (이것이 추상화의 본질)
  • 코드가 복잡하게 만들지 않고, 단순화된 사용으로 인해 변화에 대한 영향을 최소화

 

Polymorphism (다형성)

  • 같은 기본 클래스를 상속받더라도 메소드가 조금씩 다르게 작동함
  • 다형성을 제공하지 않는다면 기본 클래스에 종류별로 분기시켜 하나하나 다르게 만들어야 함
  • 동일한 메소드에 대해 if/ else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능해짐

 

 

'Language > JavaScript' 카테고리의 다른 글

[JS] ES6 특징  (0) 2021.06.22
[JS] 프로토타입과 클래스  (0) 2021.02.26
[JS] 구조 분해  (0) 2021.02.25
[JS] 화살표함수  (0) 2021.02.24
[JS] 고차함수  (0) 2021.02.24

댓글