๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Javascript

๐Ÿ˜Œ DIP

by frontChoi 2026. 5. 11.
๋ฐ˜์‘ํ˜•

๐Ÿง 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

๋Œ“๊ธ€