
해당 벨로그는 드림코딩의 자바스크립트 기초 강의 (ES5+) 를 보고 작성한 글입니다.
자판기를 예시로 getter & setter 를 생각해보자.
class → 자판기
method → 동전 넣기. 커피 만들기
커피 개수를 -1이라고 설정하면 안되니까, 이때 getter 와 setter 가 필요하다.
setter → 커피 개수를 0 으로 만들어준다.
캡슐화 → 관리자외 타인이 커피 개수 설정을 건드리지 못하도록 private 으로 만든다.
get → 이 키워드를 통해 값을 return 한다.
set → set 을 통해 값을 설정한다. set 은 값을 설정하기 때문에 값(value) 을 받아와야한다.
age 라는 getter 를 정의하는 순간, this.age 는 메모리에 올라온 값을 읽어오는 것이 아니라,
getter 를 1순위로 호출한다.
age 라는 setter 를 정의하는 순간, age 라는 값을 this.age 에 할당할 때, 바로 메모리의 값을 할당하는 것이 아니라 setter 를 호출하게 된다. → 전달된 value 를 this.age 에 할당할 때, 메모리의 값을 업데이트 하는 것이 아니라 setter 를 호출하게 된다. 그래서 무한 루프에 빠지게 된다.
⇒ 그래서 무한 루프를 방지하기 위해 this.age 와는 다른 이름을 getter & setter 에 사용해야 한다. 보통 _ 로 차이점을 두어서 this._age 이렇게 사용한다. (하단 이미지 참조)
하단 이미지
그래서 변수는 firstName, lastName, this._age 이렇게 총 3개가 존재한다.
setter 로 age 가 0보다 작은 경우 에러메시지를 출력하도록 설정한다.
오브젝트, 데이터와 상관없이 클래스가 가지고 있는 고유한 값과 데이터와 상관없이 동일하게 반복적으로 사용되는 메소드가 있을 수 있다. 이런 것들을 static 이라는 키워드로 붙이면, 오브젝트와 상관없이 클래스 자체에 연결되어 있게된다.
article1, article2 라는 오브젝트를 생성한다.
static 을 사용하지 않았다면, article1.publisher 를 출력했을 때, 가능한 일이었다.
하지만 article1.publisher 출력 결과는 undefined 다.
즉, 결과 undefined는 ‘오브젝트 안의 publisher 는 값이 지정되지 않았다’ 라는 의미이다.
static 의 사용은 메모리 사용을 줄이는 효율적인 방법이다.
중복되는 속성값을 재사용한다면 메모리를 더 효율적으로 사용할 수 있다. 유지 보수도 더 쉬워진다.
extends 라는 코드를 통해 자식이 부모를 상속받을 수 있다.
extends, 상속을 통해서 부모의 있던 모든 코드들이 자식에 포함된다.
다른 클래스에서 메소드를 오버라이딩 해서 다형성을 이용한다.
클래스 Shape 에서 정의된 메소드 getArea() 를 Triangle 에서 Shape 를 상속받아, getArea() 를 오버라이딩(재정의) 해서 삼각형 넓이 공식을 사용해 넓이를 구할 수 있게 되었다.
오버라이딩(재정의) 하게되면, 부모 클래스의 동명 클래스는 더 이상 사용할 수 없다.
부모 클래스도 사용하고 추가적으로 코드를 작성해 오버라이딩하고 싶다면 super 를 사용하면 된다.