<객체 만들어보기>
객체를 포함해서 함수를 표현할때는 함수라는 말 대신에 메소드라는 말을 많이 쓴다.
(객체에 소속되어 있을 때)
객체라고 하는것은 서로 연관된 변수와 함수들을 그룹핑해서 이름을 붙인것이다.
객체를 안쓰면 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가 가르키는 객체를 함수에서 참조할 수 있기 때문에 깔끔하게 함수의 이름을 호출할수 있게 되었다.
<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을 해줘야된다.
Date는 new라는것 사용해서 우리에게 객체를 return해주고 있다.
그리고 우리의 객체도 저런식으로 공장을 만든다면 코드도 깔끔해지고,
공장을 통해서 수정하면 그 공장을 사용중인 모든 객체도 자동으로 다르게 생산될것이다.
constructor 만들기
저 부분은 함수를 호출하는것과 비슷하다.
그것은 저 Date가 함수이기 때문이다.
undefined 에러가 나오는데,
그때 new 를 사용하면 함수가 완전 다른 존재가 된다.
함수를 그냥 호출하면 말 그대로 함수지만,
new라는 키워드를 붙이면 일반적인 함수가 아니라 객체를 생성하는 생성자가 된다.
이전에는 중괄호를 통해서 객체를 만들때마다 그 객체를 다시 정의해줘야 했는데,
consturctor function을 만들게 되면 앞에 예약어 new를 사용함으로써 객체를 양산할수있게 되었다.
※ 본 포스팅은 개인 공부 기록을 목적으로 남긴 글이며 본 사실과 다른 부분이 있다면 과감하게 지적 부탁드립니다.
'Javascript > Javascript 객체지향' 카테고리의 다른 글
[생활코딩] 객체지향 - super / 객체상속 (0) | 2020.08.01 |
---|---|
[생활코딩] 객체지향 - 메소드 구현 / 상속 (0) | 2020.07.31 |
[생활코딩] 객체지향 - Classes (0) | 2020.07.31 |
[생활코딩] 객체지향 - prototype (0) | 2020.07.31 |
[생활코딩] 객체의 기본 / 반복문 (0) | 2020.07.30 |
댓글