문제
데이터
<여기에 class를 작성하세요.>
const x = new Wizard(545, 210, 10);
console.log(x.health, x.mana, x.armor);
x.attack();
출력
545 210 10
파이어볼
정답
const Wizard = class Wizard {
constructor (health, mana, armor){
this.health = health;
this.mana = mana;
this.armor = armor;
}
attack(){
console.log('파이어볼');
}
}
const x = new Wizard(545, 210, 10);
console.log(x.health, x.mana, x.armor);
x.attack();
class 수업때 이해가 안되었는데
역시나 정답을 봐도 이해가 안되 이렇게 기록으로 남기며 다시 되새겨본다.
constructor (health, mana, armor){
this.health = health;
this.mana = mana;
this.armor = armor;
}
const x = new Wizard(545, 210, 10);
console.log(x.health, x.mana, x.armor);
·constructor는 객체가 생성될 때 처음 실행되는 메서드
·객체의 초기화를 담당
·여기서 health, mana, armor는 객체가 가지는 속성(property)이며,
this 키워드를 통해 해당 객체의 속성으로 설정
이부분을 요약하면 객체의 속성들을 미리 정의하고 초기화하는 역할이라는 것이다.
그리고 x라는 새로운 변수를 지정하여 각 속성마다 새로운 값을 입력하여 출력해줄 수 있다.
이런것이 '재사용율'을 위한 코드를 말하는거 아닌가? ㅎ;;;
attack(){ //Wizard클래스의 일부 메서드
console.log('fire ball');
}
x.attack();
·attack() 메서드는 Wizard 클래스의 일부로 정의된 메서드
·x라는 인스턴스를 통해 attack() 메서드가 실행
·클래스에서 정의된 메서드는 해당 클래스의 인스턴스에서만 호출할 수 있다.
·따라서 인스턴스를 생성한 후에는 해당 인스턴스를 통해
클래스의 메서드를 호출해야 한다
·이는 객체 지향 프로그래밍의 특징 중 하나인 캡슐화에 관련된 개념으로,
클래스 내부에 있는 메서드는 해당 클래스의 인스턴스에만 영향을 미치도록
설계되어있다.
this.health = 1;
const x = new Wizard(545, 210, 10);
x.health = 300;
this.health = 1; 이처럼 클래스 내부에서 속성에 값이 있고 외부에서 값을 변경하고싶다면 const x = new Wizard(545, 210, 10); 이렇게 선언문만으로는 값이 바뀌지 않는다.
이럴때에는 x.health = 300; 이런식으로 value값을 새로 지정해주면 값 변경이 가능해진다.
this._health = health;
이런식으로
클래스에서 _(underscore)가 사용되는경우가 있는데 이는 관례적으로
해당 변수가 클래스 내부에서만 사용되어야 함을 나타냅니다.
JS에서는 실제로 변수에 대한 접근제한이 없어 외부에서 접근은 가능하지만
실수로 변수를 변경하지 않도록 경고하는 용도로 사용이 되기도 한다.
출처 : https://obsidian-scene-3ac.notion.site/JS-100-94d97d294dd14c9b911a02c840fa9f2d
도움 : chatGPT