목차
프로토 타입
- 객체지향 프로그래밍은 무엇을 의미하나요?
- 객체지향 프로그래밍의 특징에 대해 말해볼 수 있나요?
- 자바스크립트는 객체지향 프로그래밍 언어인가요?
- 프로토타입이 뭔가요?
프로토 타입
1. 객체지향 프로그래밍은 무엇을 의미하나요?
객체지향 프로그래밍(Object-Oriented Programming)
- 프로그램 설계 방법론의 일종
- 속성과 메소드를 하나의 객체(class)에 묶어서 청사진을 만들고 그 청사진을 바탕으로 인스턴스 객체(instance object)를 만드는 것
- 객체지향 프로그래밍은 보다 유연하고 유지보수하기 쉬우며 확장성 측면에서도 유리한 프로그래밍을 하도록 의도됨
- 대규모 소프트웨어 개발에 널리 사용됨
- 절차 지향 프로그래밍과 다르게 데이터와 기능을 한 곳에 묶어서 처리하기 때문에 강한 응집력(Strong Cohesion)을 가짐
클래스 간에 독립적인 디자인을 함으로써 약한 결합력(Weak Coupling)을 가진다는 장점
**여기서의 객체는 JS 내장 객체(object)와 다르며 클래스(class)라고 부름
2. 객체지향 프로그래밍의 특징에 대해 말해볼 수 있나요?
캡슐화(Encapsulation)
- 데이터와 기능을 하나의 단위로 묶는 것(데이터와 기능들이 느슨하게 결합됨 <- 코드만 보고도 인스턴스 객체의 기능을 상상할 수 있게 작성함)
- 데이터를 은닉(Hiding)을 할 수 있음(필요한 메소드만 노출함)
- 은닉(Hiding) : 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것
- 하나의 단위로 묶음으로써 (클래스 간의 독립적인 디자인을 함으로써) 약한 결합력(Weak Coupling)을 가짐
- 복잡성 줄이고 재사용성을 높임
추상화(Abstraction)
- 복잡한 내부 구현을 숨기고, 노출되는 부분(interface)은 단순하게 만든다는 개념
- 필요하지 않은 메소드 등을 노출시키지 않고 단순한 이름으로 정의함
- 복잡성을 줄이고, 변화에 대한 영향을 줄임
상속(Inheritance)
- 기본 클래스(base class)의 특징을 파생 클래스(derive class)가 상속 받는 것(= 부모 클래스의 속성을 자식 클래스가 물려 받는 것)
- 반복되는 코드를 없도록 함
다형성(Polynorphism)
- Polymorphism이라는 단어의 poly는 “많은”, 그리고 morph는 “형태”라는 뜻 즉, 다형성이란 다양한 형태를 가질 수 있다는 것
- 동일한 메소드라고 하더라도 개별 인스턴스에 따라 다양한 형태를 가질 수 있음
- switch 문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능
3. 자바스크립트는 객체지향 프로그래밍 언어인가요?
객체지향 언어 패러다임에 대한 공식적인 문서가 없기 때문에 자바스크립트가 객체지향 프로그래밍인지 정확하게 말할수는 없음.
사람에 따라 주장이 다름(최신 자바스크립트는 클래스 문법을 제공하기 시작하여 최근에는 객체지향 프로그래밍이 맞다는 의견이 우세함)
객체지향 프로그래밍이 아니다
- 자바스크립트는 class 개념이 없는 언어(class를 만들 수는 있음)이고, 프로포타입 기반 언어이기 때문에 객체지향 언어가 아니라고 할 수 있음
- 자바스크립트는 class 개념이 없는 언어(class를 만들 수는 있음)이고, 프로포타입 기반 언어이기 때문에 객체지향 언어가 아니라고 할 수 있음
객체지향 프로그래밍이 맞다(포스팅 참고)
- 자바스크립트가 class 개념이 없는 것은 맞지만 자바스크립트 언어를 사용하여 객체지향 프로그래밍의 기본 특징을 구현할 수 있기때문에 자바스크립트는 객체지향 프로그래밍이라고 할 수 있음
- 객체지향 프로그래밍이 되기 위해서는 오브젝트(classes)의 특징과 원칙들이 요구되는 것이지, 추상적인 클래스가 필수 요구 조건이 아님
- 추상적인 클래스가 없다고 해서 객체지향 프로그래밍이 아니라고 할 수 없음
4. 프로토타입이 뭔가요?
자바스크립트의 모든 객체는 프로토타입(prototype)이라는 객체
를 가지고 있음- 모든 객체는 그들의 프로토 타입으로부터 프로퍼티와 메소드를 상속받음
- 이처럼 자바스크립트의 모든 객체는 최소한 하나 이상의 다른 객체로부터 상속을 받으며 이때 상속되는 정보를 제공하는 객체를 프로토타입이라고 함
자바스크립트는 결과적으로 class라는 개념이 존재하지 않기 때문에 프로토타입이라는 객체를 활용하여 이를 class 처럼 표현하기위해 사용함
- __proto__ : 자신을 만들어낸 객체의 원형
- constructor : 생성자를 뜻하며 자신을 만들어낸 객체
- prototype : 자신을 원형으로 만들어진 새로운 객체
총 정리
프로토 타입
1. 객체지향 프로그래밍은 무엇을 의미하나요?
- 속성과 메소드를 하나의 객체(class)로 묶어 해당 객체(class)를 바탕으로 인스턴스 객체를 만듬(instance object)
2. 객체지향 프로그래밍의 특징에 대해 말해볼 수 있나요?
- 크게 4가지의 특징이 있다
- 캡슐화 : 데이터와 기능을 하나의 단위로 묶어서 사용함
- 상속 : 부모 클래스의 속성을 자식 클래스가 물려받음
- 다형성 : 다양한 형태를 가질 수 있음
- 추상화 : 복잡한 내부 구현을 숨기고 노출되는 부분은 단순하게 만듬
3. 자바스크립트는 객체지향 프로그래밍 언어인가요?
- 객체지향 프로그래밍이 맞다.
- 자바스크립트가 class 개념이 없는 것은 맞지만 최신 자바스크립트에서는 class 문법을 제공하기 시작했고, 자바스크립트 언어를 사용하여 객체지향 프로그래밍의 기본 특징을 구현할 수 있기때문에 자바스크립트는 객체지향 프로그래밍이라고 할 수 있음
4. 프로토타입이 뭔가요?
- 자바스크립트의 모든 객체는 최소한 하나 이상의 다른 객체로부터 상속을 받으며 이때 상속되는 정보를 제공하는 객체를 프로토타입이라고 함
출처