1. ์ํผํด๋์ค๋ฅผ ์์์ผ๋ก ๋ฐ๊พธ์ด์ผ ํ ๋
๊ธฐ๋ฅ์ ์จ์ ํ ์ฌ์ฉํ ์ ์๊ณ ์ด์ธ๋ฆฌ์ง ์์ ํด๋์ค๋ฅผ ์์ํ์ ๋,
์์์ ๋จผ์ ์ ์ฉํ๋ค๊ฐ ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋
๊ฐ์ฒด ์งํฅ์์ ์์์ด ํผ๋๊ณผ ๋ณต์ก๋๋ฅผ ํค์ธ ์๋ ์๋ค.
์์์ ์๋ชป ์ ์ฉํ ์๋ก๋ ์๋ฐ์ ์คํ ํด๋์ค๊ฐ ์ ๋ช ํ๋ค. ์๋ฐ์ ์คํ์ ๋ฆฌ์คํธ๋ฅผ ์์ํ๊ณ ์๋๋ฐ,
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์กฐ์ํ๋ ๋ฆฌ์คํธ์ ๊ธฐ๋ฅ์ ์ฌํ์ฉํ๊ฒ ๋ค๋ ์๊ฐ์ด ์ด๋ํ ๊ฒฐ๊ณผ๋ค.
์ต์ ์
๋ฆฌ์คํธ(์ํผํด๋์ค)์ ์ฐ์ฐ ์ค ์คํ(์๋ธํด๋์ค)์๋ ์ ์ฉ๋์ง ์๋ ๊ฒ ๋ง์์๋ ๊ทธ ๋ชจ๋ ์ฐ์ฐ์ด ์คํ ์ธํฐํ์ด์ค์ ๊ทธ๋๋ก ๋ ธ์ถ๋๋ค๋ ๊ฒ
๋ฆฌ์ค์ฝํ ์นํ ์์น : ์๋ธ ํด๋์ค๋ ์ํผ ํด๋์ค ์๋ฆฌ๋ฅผ ๋์ฒดํ๋๋ผ๋ ์ ๋์ํด์ผ ํ๋ค. |
์๋ฐ์ ์คํ์ฒ๋ผ, ์ํผํด๋์ค์ ๊ธฐ๋ฅ๋ค์ด ์๋ธํด๋์ค์ ์ด์ธ๋ฆฌ์ง ์๋๋ค๋ฉด ๊ทธ ๊ธฐ๋ฅ๋ค์ ์์์ ํตํด ์ด์ฉํ๋ฉด ์๋๋ค๋ ์ ํธ๋ค.
์ด๋ค.
์ ๋๋ก ๋ ์์์ด๋ผ๋ฉด ์๋ธํด๋์ค๊ฐ ์ํผํด๋์ค์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํจ์ ๋ฌผ๋ก , ์๋ธํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ํผํด๋์ค์ ์ธ์คํด์ค๋ก๋ ์ทจ๊ธํ ์ ์์ด์ผ ํ๋ค.
๋ฐ๋ผ์, ์คํ์์ ๋ฆฌ์คํธ ๊ฐ์ฒด๋ฅผ ํ๋์ ์ ์ฅํด๋๊ณ ํ์ํ ๊ธฐ๋ฅ๋ง ์์ํ๋ค
๋ฉด ๋ ๋ฉ์ก์ ๊ฒ์ด๋ค.
์ํผ/์๋ธ ํด๋์ค๋ ๊ฐํ๊ฒ ๊ฒฐํฉ๋ ๊ด๊ณ๋ผ์ ์ํผํด๋์ค๋ฅผ ์์ ํ๋ฉด ์๋ธํด๋์ค๊ฐ ๋ง๊ฐ์ง๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ ์์์ผ๋ก ๋ฐ๊พธ๊ธฐ๋ ํ๋ค.
๋ค๋ง, ์์์ ๋จ์ ์ ์์์ ๊ธฐ๋ฅ์ ์ด์ฉํ ํธ์คํธ์ ํจ์ ๋ชจ๋๋ฅผ ์ ๋ฌ ํจ์๋ก ๋ง๋ค์ด์ผ ํ๋ค๋ ์ ์ด๋ค. ์ ๋ฌ ํจ์๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋งค์ฐ ์ง๋ฃจํ์ง๋ง ์์ฃผ ๋จ์ํด์ ๋ฌธ์ ๊ฐ ์๊ธธ ๊ฐ๋ฅ์ฑ์ ์ ๋ค.
2. ์ ์ฐจ ๋ฐ ํจ๊ณผ
(1) ์ํผ ํด๋์ค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ํ๋๋ฅผ ์๋ธํด๋์ค์ ๋ง๋ ๋ค.(์ํผ ํด๋์ค๊ฐ ์์ ๊ฐ์ฒด๊ฐ ๋ ๊ฒ์ด๋ฏ๋ก ์ด ํ๋๋ฅผ '์์์ฐธ์กฐ'๋ผ ๋ถ๋ฅด์)
(2) ์ํผ ํด๋์ค์ ๋์ ๊ฐ๊ฐ์ ๋์ํ๋ ์ ๋ฌ ํจ์๋ฅผ ์๋ธํด๋์ค์ ๋ง๋ ๋ค(๋ฌผ๋ก ์์ ์ฐธ์กฐ๋ก ์ ๋ฌํ๋ค) ์๋ก ๊ด๋ จ๋ ํจ์๋ผ๋ฆฌ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด ์งํํ๋ฉฐ, ๊ทธ๋ฃน์ ํ๋์ฉ ๋ง๋ค ๋๋ง๋ค ํ ์คํธํ๋ค.
Before
class List {//...}
class Stack extends Lists {//...}
After
class Stack {
constructor(){
this._storage = new List();
}
//์ด๋ ๊ฒ ํ๋ฉด ์ด์ Stack์ List์ ์๊ด์์ด ์ํ๋ Api๋ค์ ์ธ๋ถ์ ๋
ธ์ถํ ์ ์๋ค.
pop(){//...}
push(){//...}
}
class List {//...}
์์์ ์ด์ฉํ์ฌ ๊ธฐ๋ฅ์ ์ผ๋ถ๋ง ๋น๋ ค์ค๊ณ , ์๋ก ๋ณ๊ฐ์ธ ๊ฐ๋ ์์ด ๋ช ํํด์ง๋ค.
3. ์์
์์์ ๋๊ณ ํ์ ํด๋์ค์์ ์์์ ๋ฐ์ผ๋ ค๋ฉด ์์ ํด๋์ค ๋ฐ์ ๋ณ์๋ฅผ ํ๋๊ฐ์ผ๋ก ์ ์ธํ๋ฉด ๋๋ค.]
๊ทธ๋ฆฌ๊ณ ์์ฑ์์์ ์ด๊ธฐํํด์ค๋ค.
<1> ๋ฆฌํฉํ ๋ง ์
class CatalogItem {
constructor(id, title, tags) {
this._id = id;
this._title = title;
this._tags = tags;
}
get id() {
return this._id;
}
get title() {
return this._title;
}
}
class Scroll extends CatalogItem {
constructor(id, title, tags, dateLastCleaned) {
super(id, title, tags);
this._lastCleaned = dateLastCleaned;
}
needsCleaning(targetDate) {
const threshold = this.hasTag('revered') ? 700 : 1500;
return this.daysSinceLastCleaning(targetData) > threshold;
}
}
<2> ๋ฆฌํฉํ ๋ง ํ
class CatalogItem {
constructor(id, title, tags) {
this._id = id;
this._title = title;
this._tags = tags;
}
get id() {
return this._id;
}
get title() {
return this._title;
}
}
class Scroll {
#catalogItem;
constructor(id, dateLastCleaned, catalogId, , catalog) {
this._id = id;
this._catalogItem = catalog.get(catalogId); //Repository ํจํด
this._lastCleaned = dateLastCleaned;
}
get id() {
return this.id;
}
get title() {
return this._catalogItem.title;
}
needsCleaning(targetDate) {
const threshold = this.hasTag('revered') ? 700 : 1500;
return this.daysSinceLastCleaning(targetData) > threshold;
}
}
์ ๋ฆฌ
- ์์์ ๋์ผ๋ ค๋ฉด ์์์ ์ฌ์ฉํ์!
- ๋ถ๋ชจ ํด๋์ค๋ฅผ ํ๋๊ฐ์ ์ ์ธํ์!
์ฐธ๊ณ ๋ฌธํ : https://m.blog.naver.com/fbfbf1/222892773497