OOP란?

sangminnn·2020년 4월 1일
0

글로 정리하는 JS

목록 보기
1/5

갑자기 왜 ..?

Javascript 개념에 대해서 전체적으로 다시 공부하는 과정에서 단순하게 글을 읽고 이해하는 것도 좋지만,
이렇게 글로 남기면서 한번 더 리마인드 할 수 있고, 아무래도 공부하고서 남는(?) 게 있으면 좋겠다는 생각으로 정리하기 시작!

Javascript 의 언어적 특징 ?

  1. 객체 기반
  2. 동적 ( 타입 명시할 필요 x )
  3. 객체 지향형 프로그래밍과 함수형 프로그래밍을 모두 표현할 수 있습니다.

OOP

(JS 하면 아무래도 객체 지향형 언어라고 할 수 있겠다.)

그래서 OOP란 ..?

객체지향 프로그래밍은 실세계에 존재하고 인지하고 있는 객체(Object)를 소프트웨어의 세계에서 표현하기 위해 객체의 핵심적인 개념 또는 기능만을 추출하는 추상화(abstraction)를 통해 모델링하려는 프로그래밍 패러다임을 말한다. 다시 말해, 우리가 주변의 실세계에서 사물을 인지하는 방식을 프로그래밍에 접목하려는 사상을 의미한다.

(From. poiemaweb)

여기서

다시 말해, 우리가 주변의 실세계에서 사물을 인지하는 방식을 프로그래밍에 접목하려는 사상을 의미한다.

이 정의가 내가 생각하는 OOP에 가장 가깝다.

여기서 조금만 더 보태자면

실생활에서 사물을 인지하는 방식처럼 사물의 특징과 기능 등을 인지하고 같은 혹은 비슷한 기능을 하는 사물이나 어떠한 것들을 집단화, 분류화(categorizing) 하려는 우리의 인지 방식을 프로그래밍에 접목한 것이라고 생각한다.

그렇기 때문에 해당 패러다임의 특징으로 캡슐화 , 상속, 다형성 등이 나타난다고 생각한다.

여기서 캡슐화는 관련있는 멤버 변수와 메소드를 클래스와 같은 집단을 정의할 수 있는 하나의 틀 안에 담고 외부에 공개될 필요가 없는 정보는 숨기는 것을 말하며 다른 말로 정보 은닉(information hiding)이라고 한다.

Class 기반 언어라면 Class 내에 있는 private와 같은 접근 지정자(?)를 활용하여 방금 언급한 캡슐화, 정보 은닉을 실현시킬 수 있는데, prototype 기반 언어인 Javascript는 private와 같은 접근 지정자가 존재하지 않기 때문에, Javascript 의 실행 컨텍스트 개념을 활용한 Closure 패턴을 사용한다. ( 이 개념은 다음 글에서 다루겠음. )

그렇다면 Javascript에서 어떻게 이를 구현할 수 있을까 ?

다른 객체 지향형 언어들에서는 이러한 집단 정의도구로 Class 를 사용하지만, Javascript에서는 prototype을 사용한다.

보통은 어떠한 함수에 생성자 new를 붙히게 된다면 이에 대한 내용을 상속 시킬수 있지만, 이렇게 상속할 경우에 매 상속 시에 동일한 상속값들이 계속해서 생성되어 메모리 낭비가 발생함

So, 이러한 상속 방식 대신에 Prototype방식을 사용하여 해당 생성자로 사용될 함수의 prototype 값에 프로퍼티 및 메서드를 할당해 준다면 이 값에 대해서는 이후 상속에서 매 상속시에 재 할당 되지 않고, 상속된 함수에서는 모두 부모의 prototype 객체를 공유하기 때문에 prototype에 접근하여 상속받은 값을 사용할 수 있다.


++) 대부분의 내용은 poiemaWeb을 통해 배운 내용입니다. (Thanks to PoiemaWeb)

profile
생각하며 코딩하려고 노력하는 개발자가 되겠습니다.

0개의 댓글