๋ฐ์ํ
๐ง DIP๋
๊ณ ์์ค ๋ชจ๋์ ์ ์์ค ๋ชจ๋์ ์์กดํ๋ฉด ์ ๋๊ณ ,
๋ ๋ค ์ถ์ํ์ ์์กดํด์ผ ํ๋ค.
โ “๊ตฌํ์ฒด๋ฅผ ์ง์ ์ฌ์ฉํ์ง ๋ง๊ณ ”
โ
“๊ท์น(์ธํฐํ์ด์ค/์ถ์ํ)์ ์์กดํ์”
๐ฅฒ DIP๋ฅผ ์ฌ์ฉํ์ง ์๋ ์์
class MySqlDataBase {
save(data) {
console.log("MY SQL ์ ์ฅ๋จ", data);
}
}
class UserService {
constructor() {
// MySqlDataBase์ ์์กด ๋ฌธ์ ์๊น
// OracleDataBase์ด๋ฉด new OracleDataBase() ์ผ๋ก ๋ณ๊ฒฝ
this.db = new MySqlDataBase();
}
save() {
this.db.save();
}
}
const userService = new UserService();
userService.save({ name: "๊น์๋ฌด๊ฐ" });
์์ ๊ฐ์ด ์์ฑํ ๊ฒฝ์ฐ this.db๊ฐ MySqlDataBase์ ์์กด์ ์ธ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
OracleDataBase์ด๋ฉด? this.db = new OracleDataBase() ์ผ๋ก ๋ณ๊ฒฝ ํด์ค์ผ ํ๋ค
DIP๋ ์ง์ ์ ์ธ ์ ๊ทผ์ด ์๋ ์ธํฐํ์ด์ค๋ก ์ ๊ทผํ๊ฒ ํ๋ค
๐ DIP์ผ๋ก ์ ๊ทผํ๊ธฐ
class DataBase {
save() {
throw new Error("save๋ฅผ ํธ์ถํ ์๋ ์์ต๋๋ค");
}
}
class MySqlDataBase extends DataBase {
save(data) {
console.log("MY SQL ์ ์ฅ๋จ", data);
}
}
class OracleDataBase extends DataBase {
save(data) {
console.log("ORACLE SQL ์ ์ฅ๋จ", data);
}
}
class UserService {
/**
*
* @param {DataBase} db
*/
constructor(db) {
this.db = db;
}
save(data) {
this.db.save(data);
}
}
const mySqlDataBase = new MySqlDataBase();
const oracleDataBase = new OracleDataBase();
const userService = new UserService(oracleDataBase);
userService.save({ name: "๊น์๋ฌด๊ฐ" });
์ง๊ธ์ DataBase๋ฅผ ๋ง๋ค์ด์ Mysql,Oracle์ด ์์๋ฐ๋๋ก ํ์๋ค.
๊ทธ๋ฆฌ๊ณ UserService์์ db๋ก ์ธ์๋ก ๋ฐ๋๋ก ํ์๋ค.
๊ทธ๋ฌ๋ฉด ์ธํฐํ์ด์ค๋ฅผ ํธ์ถํ๋๋ก ๋ณ๊ฒฝํ๊ฒ์ด๋ค
์์ฑ๋ ์ธ์คํด์ค ๊ธฐ์ค์ผ๋ก UserService์ ์ธ์๋ก ์ฃผ์ ํ๋ค
๋ฐ์ํ
'Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Web-Client DIP(Dependency inversion principle) (0) | 2026.05.15 |
|---|---|
| Queue์ผ๋ก ์์ ์คํ (0) | 2025.05.19 |
| ๐ฟ ์ํ ํจํด (0) | 2024.11.25 |
| โ๏ธ ์ ๋ต ํจํด (1) | 2024.11.19 |
| โ๏ธ ์ปค๋ง (0) | 2024.05.29 |
๋๊ธ