반응형

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 객체의 모든 것 (11) | 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 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
캐어랩