객체지향 프로그래밍

황혜빈·2020년 9월 2일
0

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

2. 클래스 기반과 프로포타입 기반의 차이점

3. 생성자 함수와 인스턴스의 생성

4. 프로토타입 체인과 메소드의 정의

5. 상속(Inheritance)

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

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

객체지향 프로그래밍은 함수들의 집합 혹은 단순한 컴퓨터의 명령어들의 목록이라는 전통적인 절차지향 프로그래밍과는 다르게 유기적으로 객체가 연결되어 있고 이것을 중점으로 디자인한 소프트웨어다.

객체지향 프로그래밍은 보다 유연하고 유지보수하기 쉬우며 확장성 측면에서도 유리한 프로그래밍을 하도록 의도되었고, 많은 프로그래밍언어(Python,C#,C++,Ruby등)에서 지원한다.

※요약: 유연하고 유지보수가 쉬워 많은 프로그래밍언어에서 사용하고 있으며 객체의 개념을 이용해 프로그래밍하는것을 말한다.

2. 클래스 기반과 프로토타입의 차이점

1). 클래스 기반

클래스 기반 언어(Java,Python등)는 클래스로 객체의 자료구조와 기능을 정의하고 생성자를 통해 인스턴스를 생성한다.

클래스란 같은 종류의 집단을 묶어놓은 것으로 객체지향 프로그램의 기본적인 데이터타입이라고 할 수 있다. 즉, 클래스는 객체 생성에 사용되는 패턴이며 new연산자를 통한 인스턴스화 과정을 필요로 한다.

즉,클래스기반은 클래스라는 데이터타입을 이용해 객체를 생성하는 것이다.

*인스턴스 : 클래스로 생성된 오브젝트

2). 프로토타입

자바스크립트는 멀티-패러다임 언어로 명령형,함수형,프로토타입 기반 객체지향 언어이다.

프로토타입 기반인 자바스크립트는 클래스 개념이 없고 별도의 객체 생성 방법이 존재한다.

  • 객체 리터럴
  • Object()생성자 함수
  • 생성자 함수

3. 생성자 함수와 인스턴스의 생성

자바스크립트는 생성자 함수와 new 연산자를 통해 인스턴스를 생성할 수 있다. 이때 생성자 함수는 생성자의 역할을 한다.

위에 예제처럼 Person 생성자 함수로 인스턴스를 생성할 수 있다.
하지만 위에 같이 Person 생성자 함수로 인스턴스를 여러개를 생성한다면 메소드 setName, getName 이 중복되어 생성된다. 각 메소드가 동일한 메소드를 소유하므로 이메모리를 낭비하게 된다.

이 문제를 해결하기 위해서는 프로토 타입을 사용해야 한다.

4. 프로토타입 체인과 메소드의 정의

  • 모든 객체는 프로토타입이라는 다른 객체를 가리키는 내부 링크를 가지고 있다. 즉, 프로토타입을 통해 직접 객체를 연결할 수 있는데 이를 프로토타입 체인이라고 한다.

Person 생성자 함수의 prototype 프로퍼티가 가리키는 프로토타입 객체로 이동시킨 setName. getName 메소드는 프로토타입 체인에 의해 모든 인스턴스가 참조할 수 있다. 프로토타입 객체는 상속할 것들이 저장되는 장소이다.

5. 상속(Inheritance)

상속은 코드의 재사용의 관점에서 중요하며 새롭게 정의할 코드가 기존의 코드와 유사한점이 많다면 , 상속을 통해 다른점만 구현하면 된다.

클래스기반 언어에서 클래스는 다른 클래스로 상속될 수 있다. 하지만 자바스크립트는 프로토타입을 통해 상속을 구현한다.

프로토타입 상속

프로토타입 패턴 상속은 Object.create 함수를 사용하여 객체에서 다른 객체로 직접 상속을 구현하는 방식이다.

Object.create 함수는 매개변수에 프로토타입으로 설정할 객체 또는 인스턴스를 전달하고 이를 상속하는 새로운 객체를 생성한다.Object.create 함수는 표준에 비교적 늦게 추가되어 IE9 이상에서 정상적으로 동작한다.

참고:
https://poiemaweb.com/js-object-oriented-programming

0개의 댓글