1. ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น
๋์ด์ ์ฐ์ด์ง ์๋ ์๋ธํด๋์ค์ ๋ง์ฃผํ๋ ํ๋ก๊ทธ๋๋จธ๋ ๊ฐ์น ์๋ ๊ฒ์ ์ดํดํ๋๋ผ ์๋์ง๋ฅผ ๋ญ๋นํ ๊ฒ์ด๋ค.
์ด๋ฐ ์ ๋๊น์ง ๋๋ฉด ์๋ธํด๋์ค๋ฅผ ์ํผํด๋์ค์ ํ๋๋ก ๋์ฒดํด ์ ๊ฑฐํ๋ ๊ฒ ์ต์ ์ด๋ค.
๋ถํ์ํ ์๋ธ ํด๋์ค๋ฅผ ์ ๊ฑฐํ๊ณ , ๋์ ์ ์ธ๋ถ์์ ์ ํ ์ ํ์์๋ ๋ด๋ถ๋ก์ง๋ค์ ์ ์บก์ํํด๋๊ณ ,
์ธ๋ถ์์ ์ฌ์ฉํ๊ธฐ ์ฝ๊ฒ create๋ผ๋ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ๊ณตํด์ฃผ๊ณ , ๊ธฐํ ํ์ํ ๋ฉ์๋๋ฅผ ์ ์ฑ๊ฒจ์ฃผ๋๋ก ํ์.
2. ์ ์ฐจ
(1) ์๋ธํด๋์ค์ ์์ฑ์๋ฅผ ํฉํฐ๋ฆฌ ํจ์๋ก ๋ฐ๊พผ๋ค.
-> ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ ์ธก์์ ๋ฐ์ดํฐ ํ๋๋ฅผ ์ด์ฉํด ์ด๋ค ์๋ธํด๋์ค๋ฅผ ์์ฑํ ์ง ๊ฒฐ์ ํ๋ค๋ฉด ๊ทธ ๊ฒฐ์ ๋ก์ง์ ์ํผํด๋์ค์ ํฉํฐ๋ฆฌ ๋ฉ์๋์ ๋ฃ๋๋ค.
(2) ์๋ธํด๋์ค์ ํ์ ์ ๊ฒ์ฌํ๋ ์ฝ๋๊ฐ ์๋ค๋ฉด ๊ทธ ๊ฒ์ฌ ์ฝ๋์ ํจ์ ์ถ์ถํ๊ธฐ์ ํจ์ ์ฎ๊ธฐ๊ธฐ๋ฅผ ์ฐจ๋ก๋ก ์ ์ฉํ์ฌ ์ํผํด๋์ค๋ก ์ฎ๊ธด๋ค. ํ๋ ๋ณ๊ฒฝํ ๋๋ง๋ค ํ ์คํธํ๋ค.
(3) ์๋ธํด๋์ค์ ํ์ ์ ๋ํ๋ด๋ ํ๋๋ฅผ ์ํผํด๋์ค์ ๋ง๋ ๋ค.
(4) ์๋ธํด๋์ค๋ฅผ ์ฐธ์กฐํ๋ ๋ฉ์๋๊ฐ ๋ฐฉ๊ธ ๋ง๋ ํ์ ํ๋๋ฅผ ์ด์ฉํ๋๋ก ์์ ํ๋ค.
(5) ์๋ธํด๋์ค๋ฅผ ์ง์ด๋ค.
(6) ํ ์คํธํ๋ค.
3. ๋ฆฌํฉํ ๋ง ์ ์ ์ฒด ์ฝ๋
class Person {
#name;
constructor(name) {
this.#name = name;
}
get name() {
return this.#name;
}
get genderCode() {
return 'X';
}
}
class Male extends Person {
get genderCode() {
return 'M';
}
}
class Female extends Person {
get genderCode() {
return 'F';
}
}
function loadFromInput(data) {
const result = [];
data.forEach((record) => {
let person;
switch (record.gender) {
case 'M':
person = new Male(record.name);
break;
case 'F':
person = new Female(record.name);
break;
default:
person = new Person(record.name);
}
result.push(person);
});
return result;
}
const people = loadFromInput([
{ name: '์ํ', gender: 'F' },
{ name: '์ ๋น', gender: 'F' },
{ name: '์ง์ฐ', gender: 'M' },
{ name: 'ํํ', gender: 'M' },
{ name: 'ํ์ฐ', gender: 'F' }
]);
์ถ๋ ฅ๊ฐ
4. ๋ฆฌํฉํ ๋ง ํ ์ ์ฒด ์ฝ๋
class Person {
#name;
#genderCode;
constructor(name, genderCode) {
this.#name = name;
this.#genderCode = genderCode;
}
get name() {
return this.#name;
}
get genderCode() {
return this.#genderCode;
}
get isMale() {
return this.#genderCode === 'M';
}
static create(record) {
switch (record.gender) {
case 'M':
return new Person(record.name, 'M');
break;
case 'F':
return new Person(record.name, 'F');
break;
default:
return new Person(record.name, 'X');
break;
}
}
}
const people = loadFromInput([
{ name: '์ํ', gender: 'F' },
{ name: '์ ๋น', gender: 'F' },
{ name: '์ง์ฐ', gender: 'M' },
{ name: 'ํํ', gender: 'M' },
{ name: 'ํ์ฐ', gender: 'F' }
]);
function loadFromInput(data) {
const result = [];
data.forEach((element) => {
result.push(Person.create(element));
});
return result;
}
const numberOfMales = people.filter((p) => p.isMale).length;
console.log(numberOfMales);
์ถ๋ ฅ๊ฐ