반응형
1. Class Keyword
/**
* Class Keyword
*/
class IdolModel {
name;
year;
constructor(name, year) {
this.name = name;
this.year = year;
}
sayName(){
return `안녕하세요 저는 ${this.name}입니다.`;
}
}
// constructor - 생성자
const yuJin = new IdolModel('안유진', 2003);
console.log(yuJin);
const gaeul = new IdolModel('가을', 2002);
console.log(gaeul);
const ray = new IdolModel('레이', 2004);
console.log(ray);
const wonYoung = new IdolModel('장원영', 2004);
console.log(wonYoung);
const liz = new IdolModel('리즈', 2004);
console.log(liz);
const eseo = new IdolModel('이서', 2007);
console.log(eseo);
console.log(yuJin.name);
console.log(yuJin.year);
console.log(yuJin.sayName());
console.log(wonYoung.sayName());
console.log(typeof IdolModel);
console.log(typeof yuJin);
2. Getter and Setter
/**
* Getter and Setter
*/
class IdolModel{
name;
year;
constructor(name, year){
this.name = name;
this.year = year;
}
/**
* 1) 데이터를 가공해서 새로운 데이터를 반환할때
* 2) private한 값을 반환할때
*/
get nameAndYear(){
return `${this.name}-${this.year}`;
}
set setName(name){
this.name = name;
}
}
const yuJin = new IdolModel('안유진', 2003);
console.log(yuJin);
console.log(yuJin.nameAndYear);
yuJin.setName = '장원영';
console.log(yuJin);
class IdolModel2{
#name;
year;
constructor(name, year){
this.#name = name;
this.year = year;
}
get name(){
return this.#name;
}
set name(name){
this.#name = name;
}
}
const yuJin2 = new IdolModel2('안유진', 2003);
console.log(yuJin2);
console.log(yuJin2.name);
yuJin2.name = '코드팩토리';
console.log(yuJin2.name);
3. Static Keyword
/**
* Static Keyword
*/
// class IdolModel {
// name;
// year;
// static groupName = '아이브';
// constructor(name, year) {
// this.name = name;
// this.year = year;
// }
// static returnGroupName(){
// return '아이브';
// }
// }
// const yuJin = new IdolModel('안유진', 2003);
// console.log(yuJin);
// console.log(IdolModel.groupName);
// console.log(IdolModel.returnGroupName());
/**
* factory constructor
*/
class IdolModel{
name;
year;
constructor(name, year){
this.name = name;
this.year = year;
}
static fromObject(object){
return new IdolModel(
object.name,
object.year,
);
}
static fromList(list){
return new IdolModel(
list[0],
list[1],
);
}
}
const yuJin2 = IdolModel.fromObject({
name: '안유진',
year: 2003,
});
console.log(yuJin2);
const wonYoung = IdolModel.fromList(
[
'장원영',
2003,
]
);
console.log(wonYoung);
4. Inheritance
/**
* Inheritance
*/
class IdolModel{
name;
year;
constructor(name, year){
this.name = name;
this.year = year;
}
}
class FemaleIdolModel extends IdolModel {
dance(){
return '여자 아이돌이 춤을 춥니다.';
}
}
class MaleIdolModel extends IdolModel{
sing(){
return '남자 아이돌이 노래를 부릅니다.';
}
}
const yuJin = new FemaleIdolModel('안유진', 2003);
console.log(yuJin);
const jiMin = new MaleIdolModel('지민', 1995);
console.log(jiMin);
console.log(yuJin.dance());
console.log(yuJin.name);
console.log(jiMin.sing());
console.log(jiMin.year);
const cf = new IdolModel('코드팩토리', 1992);
console.log(cf);
console.log(cf.name);
console.log(yuJin instanceof IdolModel); //true
console.log(yuJin instanceof FemaleIdolModel); //true
console.log(yuJin instanceof MaleIdolModel); //false
console.log('----------');
console.log(jiMin instanceof IdolModel); //true
console.log(jiMin instanceof FemaleIdolModel); //false
console.log(jiMin instanceof MaleIdolModel); //true
console.log('-------------');
console.log(cf instanceof IdolModel); // true
console.log(cf instanceof FemaleIdolModel); //false
console.log(cf instanceof MaleIdolModel); //false
5. Super and Override
/**
* Super and Override
*/
class IdolModel{
name;
year;
constructor(name, year){
this.name = name;
this.year = year;
}
sayHello(){
return `안녕하세요 ${this.name}입니다.`;
}
}
class FemaleIdolModel extends IdolModel{
// 노래 / 춤
part;
constructor(name, year, part){
super(name, year);
this.part = part;
}
sayHello(){
// return `안녕하세요 ${this.name}입니다. ${this.part}를 맡고있습니다.`;
return `${super.sayHello()} ${this.part}를 맡고있습니다.`;
}
}
const yuJin = new FemaleIdolModel('안유진', 2003, '보컬');
console.log(yuJin);
const wonYoung = new IdolModel('장원영', 2002);
console.log(wonYoung);
console.log(wonYoung.sayHello());
console.log(yuJin.sayHello());
6. 클래스 강의를 끝낸기념 문제 - 실행 결과는 코드 아래에 있어요.
/**
* 클래스 강의를 끝낸기념 문제
*
* 1) Country 클래스는 나라 이름과 나라에 해당되는 아이돌 그룹정보를
* 리스트로 들고있다. (name 프로퍼티, idolGroups 프로퍼티)
* 2) IdolGroup 클래스는 아이돌 그룹 이름과 멤버 정보를 리스트로 들고있다.
* (name 프로퍼티, members 프로퍼티)
* 3) Idol 클래스는 아이돌 이름과 출생년도 정보를 들고있다.
* (name 프로퍼티, year 프로퍼티)
* 4) MaleIdol 클래스는 Idol 클래스와 동일하게
* name, year 프로퍼티가 존재한다
* 추가로 sing() 함수를 실행하면 ${이름}이 노래를 합니다.
* 라는 스트링을 반환해준다.
* 5) FemaleIdol 클래스는 Idol 클래스와 동일하게
* name, year 프로퍼티가 존재한다.
* 추가로 dance() 함수를 실행하면 ${이름}이 춤을 춥니다.
* 라는 스트링을 반환해준다.
*
* 아래 정보가 주어졌을때 위 구조로 데이터를 형성해보라.
* map() 함수를 잘 활용하면 좋다.
*/
// 아이브는 한국 아이돌이고
// 아이브라는 이름의 걸그룹이다.
// 아이브는 여자 아이돌이다.
const iveMembers = [
{
name: '안유진',
year: 2003,
},
{
name: '가을',
year: 2002,
},
{
name: '레이',
year: 2004,
},
{
name: '장원영',
year: 2004,
},
{
name: '리즈',
year: 2004,
},
{
name: '이서',
year: 2007,
},
]
// BTS는 한국 아이돌이고
// 방탄소년단이라는 이름의 보이그룹이다.
// BTS는 남자 아이돌이다.
const btsMembers = [
{
name: '진',
year: 1992,
},
{
name: '슈가',
year: 1993,
},
{
name: '제이홉',
year: 1994,
},
{
name: 'RM',
year: 1994,
},
{
name: '지민',
year: 1995,
},
{
name: '뷔',
year: 1995,
},
{
name: '정국',
year: 1997,
},
]
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 FemaleIdol extends Idol{
sing(){
return `${this.name}이 노래를 합니다.`;
}
}
class MaleIdol extends Idol{
dance(){
return `${this.name}이 춤을 춥니다.`;
}
}
const cIveMembers = iveMembers.map(
(x) => new FemaleIdol(x['name'], x['year']),
);
console.log(cIveMembers);
const cBtsMembers = btsMembers.map(
(x) => new MaleIdol(x['name'], x['year']),
);
console.log(cBtsMembers);
const iveGroup = new IdolGroup(
'아이브',
cIveMembers,
)
console.log(iveGroup);
const btsGroup = new IdolGroup(
'BTS',
cBtsMembers,
);
console.log(btsGroup);
const korea = new Country(
'대한민국',
[
iveGroup,
btsGroup,
],
);
console.log(korea);
const allTogether = new Country(
'대한민국',
[
new IdolGroup(
'아이브',
iveMembers.map(
(x) => new FemaleIdol(x['name'], x['year']),
),
),
new IdolGroup(
'방탄소년단',
btsMembers.map(
(x) => new MaleIdol(x['name'], x['year']),
),
),
],
);
console.log(allTogether);
실행 결과
[Running] node "d:\dev-javascript\inflearn\javascript-full-tutorial-2023-main\2_class_and_oop\6_class_problem.js"
[
FemaleIdol { name: '안유진', year: 2003 },
FemaleIdol { name: '가을', year: 2002 },
FemaleIdol { name: '레이', year: 2004 },
FemaleIdol { name: '장원영', year: 2004 },
FemaleIdol { name: '리즈', year: 2004 },
FemaleIdol { name: '이서', year: 2007 }
]
[
MaleIdol { name: '진', year: 1992 },
MaleIdol { name: '슈가', year: 1993 },
MaleIdol { name: '제이홉', year: 1994 },
MaleIdol { name: 'RM', year: 1994 },
MaleIdol { name: '지민', year: 1995 },
MaleIdol { name: '뷔', year: 1995 },
MaleIdol { name: '정국', year: 1997 }
]
IdolGroup {
name: '아이브',
members: [
FemaleIdol { name: '안유진', year: 2003 },
FemaleIdol { name: '가을', year: 2002 },
FemaleIdol { name: '레이', year: 2004 },
FemaleIdol { name: '장원영', year: 2004 },
FemaleIdol { name: '리즈', year: 2004 },
FemaleIdol { name: '이서', year: 2007 }
]
}
IdolGroup {
name: 'BTS',
members: [
MaleIdol { name: '진', year: 1992 },
MaleIdol { name: '슈가', year: 1993 },
MaleIdol { name: '제이홉', year: 1994 },
MaleIdol { name: 'RM', year: 1994 },
MaleIdol { name: '지민', year: 1995 },
MaleIdol { name: '뷔', year: 1995 },
MaleIdol { name: '정국', year: 1997 }
]
}
Country {
name: '대한민국',
idolGroups: [
IdolGroup { name: '아이브', members: [Array] },
IdolGroup { name: 'BTS', members: [Array] }
]
}
Country {
name: '대한민국',
idolGroups: [
IdolGroup { name: '아이브', members: [Array] },
IdolGroup { name: '방탄소년단', members: [Array] }
]
}
반응형
'개발자 > Web' 카테고리의 다른 글
윅스(Wix) 홈페이지 만들기 상세 자료 (3) | 2025.01.05 |
---|---|
자바스크립트 기본 문법 강의 6 Async Programming (3) | 2024.10.17 |
자바스크립트 기본 문법 강의 5 객체의 모든 것 (3) | 2024.10.16 |
소스 코드가 포함된 50개의 자바스크립트 프로젝트 (3) | 2024.10.16 |
모든 자바스크립트 개발자가 알아야 할 33가지 기본 사항 (12) | 2024.10.15 |
50일 동안 50개의 프로젝트 - HTML/CSS 및 자바스크립트 (3) | 2024.10.01 |
모든 자바스크립트 개발자가 알아야 하는 33가지 개념 (8) | 2024.09.29 |
자바스크립트 기본 문법 강의 3 (3) | 2024.09.29 |
더욱 좋은 정보를 제공하겠습니다.~ ^^