본문 바로가기
Javascript/Javascript 객체지향

[생활코딩] Javascript - 객체 만들기 / this / constructor

by 닉우 2020. 7. 30.

<객체 만들어보기>

 

객체를 포함해서 함수를 표현할때는 함수라는 말 대신에 메소드라는 말을 많이 쓴다.

(객체에 소속되어 있을 때)

 

객체라고 하는것은 서로 연관된 변수와 함수들을 그룹핑해서 이름을 붙인것이다.

객체를 안쓰면 MyMath_PI = Math.PI 이렇게 이름 앞에 접두사를 붙이는 것을 통해서 이름이 충돌하는 것을 방지한다.

파일이 1억개라고 가정했을 때 디렉토리를 만들면 연관되어 있는 것들을 모아서 깔끔하게 정리하듯

객체도 저렇게 수학과 관련된 변수와 함수를 그룹핑함으로써 깔끔하게 정리하는것이다.

 


<this>

 

인간에게도 각자 이름이 있다. 그리고 이름을 대신하는 자기 자신을 가리키는 대명사라는 것이 있다.

프로그래밍에서도 자기 자신을 가리키는 표현이 있는데, 그게 this이다.

 

어떤 사람이 게임을 두 판 했는데 첫 게임 10점, 두 번째 게임을 20점 맞았다고 했을 때,

이 사람이 두 번한 게임의 합계를 구하는 함수를 만들어보겠다.

 

kim이라고 하는 객체는 이미 내부적으로 10, 20점이라는 정보를 가지고 있다.

그런데 sum이라고 하는것을 호출하면서 kim.first, kim.second 이런식으로 또 한번 언급하고 있다.

이런 부분을 개선해보자.

이렇게 해도 문제는 없지만 유연함이 떨어진다.

객체 이름을 k로 변경하면 더이상 kim.first는 없기 때문에 에러가 난다.

그럼 저 부분도 k.first , k.second를 바꿔야한다.

 

그래서 이런 경우 때문에 객체지향을 만든 사람들은 메소드, 함수가 있으면 

그 메소드가 자신이 속해있는 객체를 가리키는 특수한 키워드를 만들기로 약속한다.

그것이 this이다.

this는 메소드가 속해있는 객체를 가르키도록 약속된 특수한 예약어이다.

이렇게 this가 가르키는 객체를 함수에서 참조할 수 있기 때문에 깔끔하게 함수의 이름을 호출할수 있게 되었다.

 


<constructor>

 

 

constructor의 필요성

객체를 찍어내는 공장이 있어서 양산체계를 가질 수가 있다.

third 같은 어떤 속성을 추가하는 수정작업을 객체 모두에게 적용해야 된다고 생각해보자.

만약 1억개라고 했을 때 하나하나 다 바꾸어주려면 많이 힘들다.

그래서 이러한 객체 형태를 양산 해주는 공장을 만들거다.

 

 

 

constructor의 사례

var d1 = new Date('2020-07-30');

d1이라는 새로운 객체가 만들어지게 된다.

우리가 kim, lee 객체를 만들었을때는 설계도가 보이지만,

Date객체는 어떤 설계도를 가지고 있는지 보이지 않는다.

하지만 우리는 d1이라는 객체를 쓸 수가 있다.

var d1 = new Date('2020-07-30');

console.log(d1.getFullYear()); //연도를 나타낸다.
console.log(d1.getMonth()+1);
//월을 나타낸다. month는 0부터 카운팅해서 + 1을 해줘야된다.

Datenew라는것 사용해서 우리에게 객체를 return해주고 있다.

그리고 우리의 객체도 저런식으로 공장을 만든다면 코드도 깔끔해지고,

공장을 통해서 수정하면 그 공장을 사용중인 모든 객체도 자동으로 다르게 생산될것이다.

 

 

 

constructor 만들기

 

저 부분은 함수를 호출하는것과 비슷하다.

그것은 저 Date가 함수이기 때문이다.

native code(내장)이다.

undefined 에러가 나오는데,

그때 new 를 사용하면 함수가 완전 다른 존재가 된다.

constructor 함수
Person이라는 객체가 만들어졌다.

함수를 그냥 호출하면 말 그대로 함수지만,

new라는 키워드를 붙이면 일반적인 함수가 아니라 객체를 생성하는 생성자가 된다.

 

이전에는 중괄호를 통해서 객체를 만들때마다 그 객체를 다시 정의해줘야 했는데,

consturctor function을 만들게 되면 앞에 예약어 new를 사용함으로써 객체를 양산할수있게 되었다. 

 


 

 

 

 

 

 

 

 

 

 

※ 본 포스팅은 개인 공부 기록을 목적으로 남긴 글이며 본 사실과 다른 부분이 있다면 과감하게 지적 부탁드립니다.

댓글