
class Idol {
name;
year;
// 생성자 => 위에서 name, year 를 따로 정의하지 않아도 괜찮음 (속성 정의는 optional)
constructor(name, year) {
this.name = name;
this.year = year;
}
// 메소드 정의
sayName(){
return `안녕하세요. 저는 ${this.name} 입니다.`;
}
}
const yujin = new Idol('안유진',2003);
console.log(yujin);
console.log(yujin.sayName());
const liz = new Idol('리즈',2004);
console.log(liz);
console.log(liz.name);
console.log(liz.year);
console.log(liz.sayName());
objectconsole.log(typeof Idol);
console.log(typeof liz);
private값 : 실제로 값은 갖고 있으나, 외부에서 엑세스하지 못하는 값
=> getter 이용해 가져옴
class Idol {
name;
year;
constructor(name, year) {
this.name = name;
this.year = year;
}
// getter
get nameAndYear() {
return `${this.name} - ${this.year}`;
}
// setter
set name(name) {
this.name = name;
}
}
const yujin = new Idol('안유진', 2003);
console.log(yujin);
console.log(yujin.nameAndYear);
yujin.name = '가나다';
console.log(yujin);
class Idol2 {
#name;
year;
constructor(name, year) {
this.#name = name;
this.year = year;
}
get name() {
return this.#name;
}
set name(name) {
this.#name = name;
}
}
const liz = new Idol2('리즈', 2004);
console.log(liz);
console.log(liz.name);
liz.name = '가나다';
console.log(liz.name)
class Idol {
name;
year;
static groupName;
constructor(name, year) {
this.name = name;
this.year = year;
}
static returnGroupName() {
return '아이브';
}
}
const yujin = new Idol('안유진', 2003);
console.log(yujin);
console.log(Idol.groupName);
console.log(Idol.returnGroupName());
class Idol2 {
name;
year;
static groupName;
constructor(name, year) {
this.name = name;
this.year = year;
}
static fromObject(object) {
return new Idol2(
object.name,
object.year
);
}
static fromList(list) {
return new Idol2(
list[0],
list[1],
)
}
}
const yujin2 = Idol2.fromObject({
name: '안유진',
year: 2003
});
console.log(yujin2);
const liz2 = Idol2.fromList(
[
'리즈',
2004,
]
);
console.log(liz2);
extends 키워드 사용class Idol {
name;
year;
constructor(name, year) {
this.name = name;
this.year = year;
}
};
class FemaleIdol extends Idol {
dance() {
return `${this.name}이 춤을 춥니다.`
}
};
class MaleIdol extends Idol {
sing() {
return `${this.name}이 노래를 부릅니다.`
}
};
const yujin = new FemaleIdol('안유진', 2003);
console.log(yujin);
console.log(yujin.name);
console.log(yujin.dance());
const jimin = new MaleIdol('지민', 1995);
console.log(jimin);
console.log(jimin.name);
console.log(jimin.sing());
console.log(yujin instanceof Idol);
console.log(yujin instanceof FemaleIdol);
console.log(yujin instanceof MaleIdol);
class Idol {
name;
year;
constructor(name, year) {
this.name = name;
this.year = year;
}
sayHello() {
return `안녕하세요! ${this.name} 입니다.`
}
}
class FemaleIdol extends Idol {
part;
constructor(name, year, part) {
super(name, year); // 부모클래스 것을 받아옴; super 키워드 사용
this.part = part;
}
sayHello() {
return `${super.sayHello()} ${this.part}를 맡고 있습니다.`
}
};
const yujin = new FemaleIdol('안유진', 2003, '보컬');
console.log(yujin);
console.log(yujin.sayHello());
const liz = new Idol('리즈', 2004);
console.log(liz);
console.log(liz.sayHello());
class Country {
name;
idolGroups;
constructor(name, idolGroups) {
this.name = name;
this.idolGroups = idolGroups;
}
}
class IdolGroup {
name;
members;
constructor(name, members) {
this.name = name;
this.members = members;
}
}
class Idol {
name;
year;
constructor(name, year) {
this.name = name;
this.year = year;
}
}
class MaleIdol extends Idol {
sing() {
return `${this.name}이 노래를 합니다.`
}
}
class FemaleIdol extends Idol {
dance() {
return `${this.name}이 춤을 춥니다.`
}
}
const cIveMembers = iveMembers.map(
(x) => new FemaleIdol(x['name'], x['year'])
);
console.log(cIveMembers);
const cBTS = btsMembers.map(
(x) => new MaleIdol(x['name'], x['year'])
);
console.log(cBTS);
const IVE = new IdolGroup(
'아이브',
cIveMembers,
)
console.log(IVE);
const BTS = new IdolGroup(
'BTS',
cBTS,
)
console.log(BTS);
const korea = new Country(
'대한민국',
[
IVE,
BTS
],
);
console.log(korea);
📒 코드팩토리 - <9시간만에 끝내는 코드팩토리의 Javascript> https://inf.run/8E6Q