Achievement Goals
정의
컴퓨터 프로그래밍 패러다임중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
클래스
어떤 문제를 해결하기 위한 데이터를 만들기기 위해 추상화를 거쳐 집단에 속하는 속성(attribute)과 행위(behavior)를 변수와 메서드로 정의한 것
클래스를 만드는 암묵적인 규칙으로, 보통 클래스는 대문자, 그리고 일반명사로 만듭니다.
function Car(color) {}
클래스; ES 5/ES 6 (최근에는 ES 6 방법을 주로 사용합니다.)
<ES 5>
function Car(brand, name, color) {
//인스턴스가 만들어질 때 실행되는 코드
}
<ES 6>
class Car {
constructor(brand, name, color) {
// 인스 턴스가 만들어질 때 실행되는 코드
}
}
객체지향 프로그래밍에서 생성자(constructor) 함수는 return값이 없습니다.
클래스 속성의 정의; ES 5/ES 6 (최근에는 ES 6 방법을 주로 사용합니다.)
<ES 5>
function Car(brand, name, color) {
this.brand = brand;
this.name = name;
this.color = color;
//인스턴스가 만들어질 때 실행되는 코드
}
<ES 6>
class Car {
constructor(brand, name, color) {
this.brand = brand;
this.name = name;
this.color = color;
// 인스 턴스가 만들어질 때 실행되는 코드
}
}
this (실행 context)
new 키워드로 인스턴스를 생성했을 때에, 해당 인스턴스가 바로 this의 값이 됩니다.
클래스 메소드의 정의; ES 5/ES 6 (최근에는 ES 6 방법을 주로 사용합니다.)
<ES 5>
function Car(brand, name, color) {
this.brand = brand;
this.name = name;
this.color = color;
//인스턴스가 만들어질 때 실행되는 코드
}
Car.prototype.refuel = function(){
return this.name + '가 주유합니다.'
// 연료공급을 구현하는 코드
}
Car.prototype.drive = function(){
return this.name + '가 운전합니다.'
// 운전을 구현하는 코드
}
**텍스트**
<ES 6>
class Car {
constructor(brand, name, color) {
this.brand = brand;
this.name = name;
this.color = color;
// 인스 턴스가 만들어질 때 실행되는 코드
}
refuel(){
return this.name + '가 주유합니다.'
}
drive(){
return this.name + '가 운전합니다.'
}
}
인스턴스(객체)
클래스에서 정의한 것을 토대로 실제 메모리상에 할당된 것으로 실제 프로그램에서 사용되는 데이터
let avante = new Car('hyundai', 'avante', 'black');
let mini = new Car('bmw', 'mini', 'white');
let beetles = new Car('volkswagen', 'beetles', 'red');
let avante = new Car('hyundai', 'avante', 'black');
avante.color; // 'black'
avante.drive();// 'avante가 운전합니다.'
let mini = new Car('bmw', 'mini', 'white');
mini.brand; // 'bmw'
mini.refuel() // 'mini가 주유합니다.'
용어 정리
<생성자로 사용될 함수>
function Asia(name, place, GDP) {
this.name = name;
this.place = place;
this.GDP = GDP;
//인스턴스가 만들어질 때 실행되는 코드
}
<생성자 함수 프로토 타입안에는 그 함수에서 정의 한 함수가 객체로 정의되어 있다.>
Asia.prototype //
{constructor: ƒ}
constructor: ƒ Asia(name, place, GDP)
[[Prototype]]: Object
<생성자 함수의 프로토타입안에 다른 객체를 추가해보자.>
Asia.prototype.GDPgrowth = function(){
return this.name +'은'+ this.GDP +'만큼 성장하였습니다.'
}
<프로토타입안에 다른 함수 객체를 추가 한후에 프로토타입>
Asia.prototype//
{GDPgrowth: ƒ, constructor: ƒ}
GDPgrowth: ƒ ()
constructor: ƒ Asia(name, place, GDP)
[[Prototype]]: Object
<Korea의 인스턴스를 만들어 보자>
let korea = new Asia('S.Korea', 'East Asia', '50%');
korea.GDPgrowth();// 'S.Korea은50%만큼 성장하였습니다.'
-> 결과적으로 보면 프로토타입을 통해서 인스턴스에서 함수를 가져다가 쓰는 것을 볼수가 있다.
출처 : 코드스테이츠 / 생활코딩