Home Java Script | Prototype
Post
Cancel

Java Script | Prototype

목차

프로토 타입

  1. 객체지향 프로그래밍은 무엇을 의미하나요?
  2. 객체지향 프로그래밍의 특징에 대해 말해볼 수 있나요?
  3. 자바스크립트는 객체지향 프로그래밍 언어인가요?
  4. 프로토타입이 뭔가요?



프로토 타입

1. 객체지향 프로그래밍은 무엇을 의미하나요?

객체지향 프로그래밍(Object-Oriented Programming)

  • 프로그램 설계 방법론의 일종
  • 속성과 메소드를 하나의 객체(class)에 묶어서 청사진을 만들고 그 청사진을 바탕으로 인스턴스 객체(instance object)를 만드는 것
  • 객체지향 프로그래밍은 보다 유연하고 유지보수하기 쉬우며 확장성 측면에서도 유리한 프로그래밍을 하도록 의도됨
  • 대규모 소프트웨어 개발에 널리 사용됨
  • 절차 지향 프로그래밍과 다르게 데이터와 기능을 한 곳에 묶어서 처리하기 때문에 강한 응집력(Strong Cohesion)을 가짐
  • 클래스 간에 독립적인 디자인을 함으로써 약한 결합력(Weak Coupling)을 가진다는 장점

    **여기서의 객체는 JS 내장 객체(object)와 다르며 클래스(class)라고 부름

    image


2. 객체지향 프로그래밍의 특징에 대해 말해볼 수 있나요?

  1. 캡슐화(Encapsulation)

    • 데이터와 기능을 하나의 단위로 묶는 것(데이터와 기능들이 느슨하게 결합됨 <- 코드만 보고도 인스턴스 객체의 기능을 상상할 수 있게 작성함)
    • 데이터를 은닉(Hiding)을 할 수 있음(필요한 메소드만 노출함)
    • 은닉(Hiding) : 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것
    • 하나의 단위로 묶음으로써 (클래스 간의 독립적인 디자인을 함으로써) 약한 결합력(Weak Coupling)을 가짐
    • 복잡성 줄이고 재사용성을 높임

  2. 추상화(Abstraction)

    • 복잡한 내부 구현을 숨기고, 노출되는 부분(interface)은 단순하게 만든다는 개념
    • 필요하지 않은 메소드 등을 노출시키지 않고 단순한 이름으로 정의함
    • 복잡성을 줄이고, 변화에 대한 영향을 줄임

  3. 상속(Inheritance)

    • 기본 클래스(base class)의 특징을 파생 클래스(derive class)가 상속 받는 것(= 부모 클래스의 속성을 자식 클래스가 물려 받는 것)
    • 반복되는 코드를 없도록 함

  4. 다형성(Polynorphism)

    • Polymorphism이라는 단어의 poly는 “많은”, 그리고 morph는 “형태”라는 뜻 즉, 다형성이란 다양한 형태를 가질 수 있다는 것
    • 동일한 메소드라고 하더라도 개별 인스턴스에 따라 다양한 형태를 가질 수 있음
    • switch 문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능


3. 자바스크립트는 객체지향 프로그래밍 언어인가요?

  • 객체지향 언어 패러다임에 대한 공식적인 문서가 없기 때문에 자바스크립트가 객체지향 프로그래밍인지 정확하게 말할수는 없음.

  • 사람에 따라 주장이 다름(최신 자바스크립트는 클래스 문법을 제공하기 시작하여 최근에는 객체지향 프로그래밍이 맞다는 의견이 우세함)

  1. 객체지향 프로그래밍이 아니다

    • 자바스크립트는 class 개념이 없는 언어(class를 만들 수는 있음)이고, 프로포타입 기반 언어이기 때문에 객체지향 언어가 아니라고 할 수 있음

  2. 객체지향 프로그래밍이 맞다(포스팅 참고)

    • 자바스크립트가 class 개념이 없는 것은 맞지만 자바스크립트 언어를 사용하여 객체지향 프로그래밍의 기본 특징을 구현할 수 있기때문에 자바스크립트는 객체지향 프로그래밍이라고 할 수 있음
    • 객체지향 프로그래밍이 되기 위해서는 오브젝트(classes)의 특징과 원칙들이 요구되는 것이지, 추상적인 클래스가 필수 요구 조건이 아님
    • 추상적인 클래스가 없다고 해서 객체지향 프로그래밍이 아니라고 할 수 없음

4. 프로토타입이 뭔가요?

  • 자바스크립트의 모든 객체는 프로토타입(prototype)이라는 객체를 가지고 있음
  • 모든 객체는 그들의 프로토 타입으로부터 프로퍼티와 메소드를 상속받음
  • 이처럼 자바스크립트의 모든 객체는 최소한 하나 이상의 다른 객체로부터 상속을 받으며 이때 상속되는 정보를 제공하는 객체를 프로토타입이라고 함
  • 자바스크립트는 결과적으로 class라는 개념이 존재하지 않기 때문에 프로토타입이라는 객체를 활용하여 이를 class 처럼 표현하기위해 사용함

    image
    image

    • __proto__ : 자신을 만들어낸 객체의 원형
    • constructor : 생성자를 뜻하며 자신을 만들어낸 객체
    • prototype : 자신을 원형으로 만들어진 새로운 객체



총 정리


프로토 타입

1. 객체지향 프로그래밍은 무엇을 의미하나요?

  • 속성과 메소드를 하나의 객체(class)로 묶어 해당 객체(class)를 바탕으로 인스턴스 객체를 만듬(instance object)

2. 객체지향 프로그래밍의 특징에 대해 말해볼 수 있나요?

  • 크게 4가지의 특징이 있다
  • 캡슐화 : 데이터와 기능을 하나의 단위로 묶어서 사용함
  • 상속 : 부모 클래스의 속성을 자식 클래스가 물려받음
  • 다형성 : 다양한 형태를 가질 수 있음
  • 추상화 : 복잡한 내부 구현을 숨기고 노출되는 부분은 단순하게 만듬

3. 자바스크립트는 객체지향 프로그래밍 언어인가요?

  • 객체지향 프로그래밍이 맞다.
  • 자바스크립트가 class 개념이 없는 것은 맞지만 최신 자바스크립트에서는 class 문법을 제공하기 시작했고, 자바스크립트 언어를 사용하여 객체지향 프로그래밍의 기본 특징을 구현할 수 있기때문에 자바스크립트는 객체지향 프로그래밍이라고 할 수 있음

4. 프로토타입이 뭔가요?

  • 자바스크립트의 모든 객체는 최소한 하나 이상의 다른 객체로부터 상속을 받으며 이때 상속되는 정보를 제공하는 객체를 프로토타입이라고 함






출처

객체지향 프로그래밍
객체지향 프로그래밍
자바스크립트는 객체 지향 프로그래밍일까?
프로토 타입

This post is licensed under CC BY 4.0 by the author.