관리 메뉴

Jerry

One Paper: Object Oriented Programming 본문

Front/JavaScript

One Paper: Object Oriented Programming

juicyjerry 2020. 11. 1. 18:03
반응형

1. 객체 지향 프로그래밍이란? 

  • 라이브러리 특정 언어를 지칭하는 것이 아닌 프로그래밍의 철학
  • 객체 지향 프로그래밍에서 모든 것은 self-sustainable 객체로써 그룹화됨 -> 재사용성 
  • 우리가 클래스라고 부르는 것(data model of blueprint)을 코드로 구현한 것

출처: charlieojackson.co.uk/img/js_object.jpg

 

 

 

1-1. 그렇다면 클래스란 무엇인가?

  • 클래스는 객체 생성을 위한 객체의 Blueprint이자 Idea 임
  • 객체는 클래스의 인스턴스
  • 클래스는 객체를 생성하는 constructor를 가지고 있다.

 

 

 

출처: https://exploringjs.com/impatient-js/img-book/61838ddd8244a11d32162fc6ac2d6045aa51b0e0.svg

1-2. 객체지향 프로그래밍의 기본 개념 4가지

  1. 캡슐화

: 캡슐화는 single 단위로 데이터를 wrapping up(뜻: 감싸다) 하는 것으로 정의된다. 이 메커니즘은 코드들을 묶거나 데이터를 조작할 수 있다. 또한, 바깥에서의 접근을 막음으로써 방패 역할을 한다고 볼 수 있다. (data-hiding in class)

- 객체지향 프로그래밍에서 캡슐화는 메서드, 속성과 같은 데이터들의 묶음을 지칭한다.

- 캡슐화는 클래스 안으로 값이나 구조화된 데이터 객체를 숨기거나, 허가되지 않은 집단의 직접적인 접근을 막기 위해 사용된다.

출처: http://www.sitesbay.com/cpp/images/oops/encapsulation.png 

 

  2. 추상화

: 데이터 추상화는 사용자에게 필요한 사항만을 보여주는 속성을 말한다. 사소하거나 중요하지 않은 속성들은 사용자에 보이지 않는다. 예를 들어, 만약 한 사람이 차를 운전한다고 가정해보자. 그 사람은 차를 운전할 때, 가속 페달을 밟는 것을 단순히 속도를 올리는 것이라고 생각하지 페달을 밟음으로써 발생하는 내부 메커니즘을 이해하지는 못한다. 

https://qph.fs.quoracdn.net/main-qimg-d416d714184b5665ff5ae3f231e854f4

  3. 상속

: 상속은 OOP에서 중요한 개념 중 하나이며, 하나의 클래스로부터 다른 클래스에 특징들을 상속하게 해준다. 

http://www.w3programmers.com/wp-content/uploads/2017/11/Inheritance-in-PHP-OOP.png

  • Super class는 특징들을 상속하는 클래스이다. (base class, parent class라고도 불린다)
  • Sub class는 super class의 특징을 상속은 클래스이며 본인 클래스만의 특징을 추가할 수 있다. ( derived class, extended class, child class라고도 불린다)

http://journals.ecs.soton.ac.uk/java/tutorial/java/javaOO/images/inheritance_trans.gif

  • Reusability: 재사용성이라고 부르며,  상속은 재사용성의 개념을 서포트한다? 즉, 우리가 새로운 클래스를 생성할 때나 이미 우리가 원하는 클래스가 있을 경우, 이미 존재하는 클래스를 새로운 클래스로 만들어 사용할 수 있다. 이런 과정으로 우리는 기존에 있는 클래스를 재사용할 수 있게 된다.

 

  4. 다형성

: 다형성은 같은 이름을 가진 entity들을 구별하는 능력을 지칭한다. 객체의 상세한 타입 정보 없이, 동시에 같은 인터페이스에 있는 객체들을 다루는 프로그램 능력을 말한다.

https://cdn.codegym.cc/images/article/39c454f1-7998-4dd4-a812-1fe8d3f9c10b/800.webp

 

1-3. 객체지향 프로그래밍의 보충 설명

객체지향”이라는 개념은 불행히도 명확한 정의가 없는 것이 특징이다. 
우리가 어떠한 개념을 이해하려할 때, 그 개념의 특성(attribute, property)을 통해 이해하는 것처럼 
객체지향도 객체지향의 특성을 통해 이해할 수밖에 없다.

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

객체지향 프로그래밍은 함수들의 집합 혹은 단순한 컴퓨터의 명령어들의 목록이라는 전통적인 절차지향 프로그래밍과는
다른, 관계성있는 객체들의 집합이라는 관점으로 접근하는 소프트웨어 디자인으로 볼 수 있다.

각 객체는 메시지를 받을 수도 있고, 데이터를 처리할 수도 있으며, 또다른 객체에게 메시지를 전달할 수도 있다. 
각 객체는 별도의 역할이나 책임을 갖는 작은 독립적인 기계 또는 부품으로 볼 수 있다.

객체지향 프로그래밍은 보다 유연하고 유지보수하기 쉬우며 확장성 측면에서서도 유리한 프로그래밍을 하도록 
의도되었고, 대규모 소프트웨어 개발에 널리 사용되고 있다.

출처: Poiemaweb

 

참고 자료

 

2.  Javascript에서 Object를 생성하는 여러 가지 방법들은 무엇인가?

About Instantiation Patterns 

: 자바스크립트에서 클래스가 나오기 전에 사용하던 4가지 클래스 선언 방식에 대해 배워보자. 클래스는 하나의 정형화된 모델을 만들어 두고, 그 모델을 기반으로 한 인스턴스(복제품)를 만들기 위해 사용한다. 마치 공장에서 같은 규격의 제품들을 찍어내는 것과 비슷하다. 우리가 알아두어야 할 점은, '찍어 내는 기능'은 함수를 이용해서 표현할 수 있다는 점이다.

  • Functional (1번)

  • Functional Shared (2번)

 

여기서, 1번 Functional과 2번 Functional Shared의 차이점을 살펴보자.

1번은 인스턴스를 생성해줄 때마다 클래스 안에 메서드를 함께 같이 넣어주어야 되는 방면, 2번은 인스턴스를 생성해줄 때 메소드를 같이 넣어주는 대신에, 메소드를 참조하는 방식으로 인스턴스를 생성하게 된다. 이로써, 1번에 비해 2번 방식은 메모리 사용 효율이 증가하게 된다. 상상해보자, 프로젝트 규모가 크게 되면, 인스턴스 개수도 많아진다.

 

 

  • Prototypal (3번)

#1

 

#2

#1 코드와 #2 코드의 차이점은 "let someInstance"가 무엇을 할당했는지를 보여 알 수 있다.

#2 코드에서 Object.create()는 특정 개체를 프로토타입으로 하는 객체를 생성해주는 메서드이다.

 

 

  • Pseudoclassical (4번)

 

- 메서드를 프로토타입으로 작성 후 new 키워드를 이용해서 새로운 객체를 생성합니다.

 

참고 자료

  • codestates 학습 자료

 

3. Javascript에서  Prototype은 무엇이고 왜 사용해야 되는가? 

3-1. prototype은 무엇인가?

  • 프로토타입은 자바스크립트 객체가 다른 객체로부터 특징을 상속받는 메커니즘(원형이라고도 한다)을 말한다. 자바스크립트는 프로토타입 기반 언어라고 한다.  왜냐하면, 자바스크립트에서 객체는 객체끼리 프로토타입을 가진 객체를 상속하게 되는데, 이런 과정들이 붕어빵처럼 찍어내는 듯한 형태로 보이기 때문이다.(template object)
  • 객체의 프로토타입 객체는 또한 프로토타입 객체가 될 수 있다? 
  • 그니깐 객체마다 프로토타입이 있는데, 그 프로토타입 또한 프로토타입 객체가 있다는 미야기다.
  • 이런 것들을 보고 프로토타입 체인이라고 일컫는다. 그리고 프로토타입 체인을 통하여 다른 객체들의 속성과 메서드를 이용할 수 있는지를 설명할 수 있다.
  • 자바스크립에서 링크는 객체 인스턴스와 객체 프로토타입(__proto__ 속성) 사이를 일컫는다. 
  • __proto__ 는 constructor의 프로 토타 팁 속성으로부터 파생되었다.
  • 그리고 __proto__ 체인을 계속 타고 올라가다 보면 상위 객체들의 메서드와 속성을 알아볼 수 있다. (부모 객체와의 연결)

3-2. prototype은 왜 사용해야 하는가?

  • They use less memory.

https://2.bp.blogspot.com/-2iiLW6wtEO0/UGtDX-ZP_oI/AAAAAAAAAfQ/FpSFCEg1k7Q/s640/Javascript+Prototypal+Inheritance+Diagram+-+grand+picture+(3).png

 


http://alanstorm.com/2016/images/javascript-object-hierarchy/js-object-hierarchy.png

 

 

 

참고 자료

 

 

반응형

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

async 예외처리(의 까다로운점?)  (0) 2021.04.15
자바스크립트 원시값?  (1) 2021.04.14
async await 이란?  (0) 2021.04.14
One Paper: Understanding Prototype  (0) 2020.11.07
One Paper: Inheritance Pattern  (0) 2020.11.07