๐Ÿ”ฎ ์˜ค๋ธŒ์ ํŠธ์™€ ์˜์กด๊ด€๊ณ„

์Šคํ”„๋ง์€ ์˜ค๋ธŒ์ ํŠธ์— ๊ด€ํ•œ ์„ค๊ณ„์™€ ๋™์ž‘ ๊ฒ€์ฆ, ๊ตฌ์กฐ๋ฅผ ์ง€์†์ ์œผ๋กœ ๊ฐœ์„ ํ•˜๋Š” ํ…Œ์ŠคํŠธ๋“ฑ์˜ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ง€์‹์ด ์š”๊ตฌ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ์จ ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ ๊ด€์‹ฌ๊ณผ ๊ฐ์ฒด์ง€ํ–ฅ ๊ธฐ์ˆ  ์ด ์ œ๊ณตํ•˜๋Š” ํ˜œํƒ๊ณผ ๋ชฉ์ ์„ฑ์„ ๊ฐ•์กฐํ•œ๋‹ค.

๐Ÿ˜–๋‚œ๊ฐํ•œ DAO

๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ „๋‹ดํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ์ด๋‹ค. ์ž๋ฐ” ๋นˆ ๊ฐ์ฒด๋ฅผ DB๋ผ๊ณ  ๋ดค์„๋•Œ ๊ทธ ๊ฐ์ฒด์— ๊ด€ํ•œ CRUD๊ฐ™์€ DB๊ด€๋ จ ๊ธฐ๋Šฅ๋“ค์„ ์ •์˜ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ์ด๋‹ค.

โœ”๏ธ JavaBean : ๋””ํดํŠธ ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๊ณ , getter/setter ํ”„๋กœํผํ‹ฐ๋ฅผ ์†Œ์œ ํ•œ ์˜ค๋ธŒ์ ํŠธ

๐Ÿ”Œ JDBC

  1. ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ (JDBC Load)
    • Class.forName(“๋“œ๋ผ์ด๋ฒ„ Path”)
      • Class ํด๋ž˜์Šค๊ฐ€ ํด๋ž˜์Šค์˜ ์ •๋ณด(ํ•„๋“œ, ๋ฉ”์„œ๋“œ ํด๋ž˜์Šค์˜ ์ข…๋ฅ˜)๋ฅผ ๋‹ด๋Š” ๋ฉ”ํƒ€ ํด๋ž˜์Šค์ด๊ณ  JVM์€ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ๋กœ๋“œํ•œ๋‹ค.
  2. DB ์—ฐ๊ฒฐ Connection
    • DriverManager.getConnection(url, ID, PWD)
      • Connection ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œํ›„
      • DriverManager์—์„œ ์‹œ์Šคํ…œ ํ”„๋กœํผํ‹ฐ “jdbc.drivers"์— ์ฐธ์กฐ๋œ ๋“œ๋ผ์ด๋ฒ„ ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•œ๋‹ค.
      • ์ดํ›„ Connection ๊ฐ์ฒด์— ํ• ๋‹น
  3. ์ฟผ๋ฆฌ ์ƒ์„ฑ ๋ฐ ์งˆ์˜
    
    PreparedStatement psmt = null;
    psmt = conn.prepareStatement("SQL๋ฌธ");
    
    
    Statement stmt = null;
    stmt = conn.createStatement("SQL๋ฌธ");
    

    โœ”๏ธ PreparedStatement`๋Š” ์ฟผ๋ฆฌ์— ?๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•„ ์‹คํ–‰ ๊ฐ€๋Šฅ

  4. ์ฟผ๋ฆฌ ์‹คํ–‰
    • psmt.executeUpdate()
      • INSERT UPDATE DELETE ๊ฐ™์€ ๊ฐ’์„ ๋ฐ›์•„์˜ค์ง€ ์•Š๋Š” ์ฟผ๋ฆฌ๋ฌธ์€ psmt.executeUpdate()๋กœ ์‹คํ–‰
    • psmt.executeQuery()
      • SELECT ์ฒ˜๋Ÿผ ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”์ด ํ•„์š”ํ•œ ์ฟผ๋ฆฌ๋ฌธ์€ ์ฟผ๋ฆฌ ์‹คํ–‰ ์ด์ „์— ResultSet๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œํ›„ psmt.executeQuery()๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
  5. ResultSet ์ฒ˜๋ฆฌ
    while(rs.next()) {
        int i=1;
        int id = rs.getInt(i++);
        String name = rs.getString(i++);
        String addr = rs.getString(i++);
     }
    

    `

  1. Close()
    if (rs!=null) {
       try {
          rs.close();
       } catch (SQLException e) {
       }
    }
    
    if(stmt!=null) {
       try {
          stmt.close();
       } catch (SQLException e) {
       }
    }
    
    if(conn!=null) {
       try {
          conn.close();
       } catch (SQLException e) {
       }
    }
    

    ` โœ”๏ธ Openํ•œ ๊ฐ์ฒด๋“ค์˜ ์—ญ์ˆœ์œผ๋กœ close ์‹œํ‚จ๋‹ค.

๐Ÿ’” DAO์˜ ๋ถ„๋ฆฌ

์œ„์˜ 6๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ DAO๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ ์ฒ˜๋ฆฌ ๊ณผ์ •์€ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ํŠน์ง•๊ณผ๋Š” ์–ด๊ธ‹๋‚˜์žˆ๋Š” ์ ์ด ๋งŽ๋‹ค. ๊ฐœ๋ฐœ์—๊ฒŒ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์˜ ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐํ•จ ์„ ๊ณ ๋ คํ•œ ์„ค๊ณ„๊ฐ€ ์š”๊ตฌ๋˜๋ฉฐ ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๋“ค์— ๋Œ€ํ•œ ๊ด€์‹ฌ์‚ฌ์˜ ๊ตฌ๋ถ„ ์ด ์ ์ ˆํ•˜๊ฒŒ ๋‚˜๋ˆ„์–ด ์งˆ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค.

  • Connection ์ƒ์„ฑ ๊ณผ์ •์˜ ์ค‘๋ณต ๐Ÿ‘‰ ๋…๋ฆฝ์ ์ธ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋ถ„๋ฆฌ : ๊ณตํ†ต์˜ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋กœ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ๋ฆฌํŒฉํ† ๋ง์—์„œ๋Š” ๋ฉ”์†Œ๋“œ ์ถ”์ถœ์ด๋ผ ํ•œ๋‹ค.

๊ณตํ†ต๊ธฐ๋Šฅ์„ ๋…๋ฆฝ์‹œํ‚ค๊ธฐ

์œ„์—์„œ ๋ฆฌํŒฉํ† ๋งํ•œ DAO๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ Connection์˜ ์ค‘๋ณต์€ ์ œ๊ฑฐ๋˜์—ˆ์ง€๋งŒ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์œ ์—ฐํ•œ ํŠน์ง•์€ ๋ฐœํœ˜๋˜์ง€ ์•Š์•˜๋‹ค. DAO๋ฅผ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ์ด์šฉํ• ๋•Œ์˜ ๋ถ€๋ถ„์ ์ธ ์ˆ˜์ •์ด ์ด๋ฃจ์–ด ์ง€๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์กด์žฌํ•œ๋‹ค.

์ƒ์†์„ ํ†ตํ•œ ํ™•์žฅ

๊ตฌํ˜„ํ•ด๋†“์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”์ƒํ™” ์‹œํ‚ค๊ณ  DAO ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค. ์ฆ‰, ํด๋ž˜์Šค์˜ ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ ๋‚˜๋ˆ„์–ด ๋ถ„๋ฆฌ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

โœ”๏ธ ์œ„์™€๊ฐ™์ด ํด๋ž˜์Šค๋ฅผ ์ถ”์ƒํ™” ์‹œํ‚จํ›„ ๊ฐ๊ฐ์˜ ์„œ๋ธŒํด๋ž˜์Šค๋“ค๋กœ๋ถ€ํ„ฐ ๋ถ€๋ถ„์ ์ธ ์ฝ”๋“œ๋ฅผ ์›ํ•˜๋Š”๋Œ€๋กœ ๊ฐ๊ฐ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ‘ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ ํŒจํ„ด’ ์ด๋ผ๊ณ  ํ•œ๋‹ค.

โ— ์ƒ์†์„ ์ด์šฉํ•œ ํ™•์žฅ์€ ๊ฐ„๋‹จํ•˜๋ฉด์„œ๋„ ํšจ๊ณผ์ ์ด์ง€๋งŒ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์—†๋‹ค๋Š” ์  โ— ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด ์งˆ ๊ฒฝ์šฐ ์ ํ•ฉ์„ฑ์ด ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค.

DAO์˜ ํ™•์žฅ

์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋กœ์ง(๋ถ„๋ฆฌ)๊ณผ DB์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•˜๋Š”๊ฒƒ(์ƒ์†)์€ ๋‹ค๋ฅธ ๋ณ€ํ™”์˜ ์„ฑ๊ฒฉ์„ ๋„๊ณ ์žˆ๋‹ค. ์ด ๋ง์€ ๊ฐ๊ฐ์˜ ๋ฐฉ๋ฒ•์ด ์–ด๋Š ํ•œ ๊ด€์‹ฌ์‚ฌ์— ์ง‘์ค‘๋œ ์ƒํƒœ๋กœ ๊ทธ ๊ด€์‹ฌ์‚ฌ(์ฝ”๋“œ์˜ ์ค‘๋ณต, ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์œ ์—ฐํ•จ)๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๋ง์ด๋‹ค.

์ฆ‰, DAO์— ๊ด€ํ•œ ๋‹ค๋ฅธ ๊ด€์ ์ด ์ƒ๊ธด๋‹ค๋ฉด ๊ทธ ๋ถ€๋ถ„์œผ๋กœ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ๋ฐ”๋€”์ˆ˜ ์žˆ๊ณ  ์•ž์„œ ์–ธ๊ธ‰ํ•œ ๊ฐ๊ฐ์˜ ๋ฐฉ๋ฒ• ์™ธ์— ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์™„์ „ํ•œ ๋…๋ฆฝ์ ์ธ ํด๋ž˜์Šค๋กœ ๋งŒ๋“œ๋Š”๊ฒƒ์ด ์žˆ๋‹ค.

์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ

์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์€ ๋‹ค์‹œ ์œ ์—ฐ์„ฑ ํ™•๋ณด์— ๊ด€ํ•œ ๋ฌธ์ œ์ ์„ ์•ผ๊ธฐํ•œ๋‹ค.

DAOํด๋ž˜์Šค๊ฐ€ ์ƒˆ๋กœ์šด ๊ฐ์ฒด์— ์ข…์†๋˜์–ด ์ƒ์†์„ ๋ฐ›์„๋•Œ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ DAO์— ์ˆ˜์ •์ด ๊ฐ€ํ•ด์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค์˜ ๋„์ž…์€ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ์ œ์‹œ๋œ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ƒ์†๊ณผ๋Š” ๋น„์Šทํ•˜์ง€๋งŒ ๋‹ค๋ฅด๋‹ค ์ƒ์œ„ ๊ฐœ๋…์„ ํ•˜์œ„์—์„œ ๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ์ƒ์†์ด๋ผ๋ฉด

ํ•˜์œ„ ํด๋ž˜์Šค์˜ ํŠน์ •ํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•˜๋„๋ก ๊ฐ•์ œํ•˜๋Š”๊ฒƒ์ด ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค

์ด์ฒ˜๋Ÿผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•œ ์ถ”์ƒํ™” ๋ฐฉ๋ฒ•์€ ํด๋ž˜์Šค์™€ ํ•จ๊ป˜ ์ธํ„ฐํŽ˜์ด์Šค๋„ ์ „๋‹ฌํ•˜์—ฌ

๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ „๋‹ฌ๋œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์„ ํ–‰ํ•˜๋„๋ก ํ•˜๋Š”๊ฒƒ์ด๋‹ค.

์ฆ‰, DAO์˜ ์ž…์žฅ์—์„œ DB์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•์— ๊ด€ํ•œ ์ฝ”๋“œ๋ฅผ ์ธํ„ฐํŽ˜์ด์Šคํ™” ์‹œํ‚จ๋‹ค๋Š” ์˜๋ฏธ๋Š”

๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋“ค ์‚ฌ์ด์˜ ๊ทœ์•ฝ์ด ์ •ํ•ด์ ธ ์–ด๋–ค ์ƒํ™ฉ์ด๋“  DB์ปค๋„ฅ์…˜์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š”๊ฒƒ์ด๋‹ค.

์˜ˆ์ œ 1-10 ์—์„œ๋Š” add()`` get()์˜ ๋ฉ”์„œ๋“œ ๋ชจ๋‘ makeConnection() ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋˜์–ด์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ

์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด ์ฝ”๋“œ์˜ ๊ด€ํ•œ ์„œ์ˆ ๊ณผ ๋™์ž‘์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ด€๊ณ„์„ค์ • ์ฑ…์ž„์˜ ๋ถ„๋ฆฌ

< ์ดํ•ด ์ž˜ ์•ˆ๋˜์„œ ๋‹ค์‹œ๋ด์•ผ.. >

๐Ÿ“Œ ์›์น™๊ณผ ํŒจํ„ด

โญ SOLID

์ž๊ธฐ ์ž์‹  ํด๋ž˜์Šค ์•ˆ์— ์‘์ง‘๋„๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋†’์ด๊ณ , ํƒ€ ํด๋ž˜์Šค๋“ค ๊ฐ„ ๊ฒฐํ•ฉ๋„๋Š” ๋‚ฎ์ถ”๋Š” High Cohesion - Loose Coupling ์›์น™์„ ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ๊ด€์ ์—์„œ ๋„์ž…ํ•œ ๊ฒƒ์ด๋‹ค.

  • ๋†’์€ ์‘์ง‘๋„
    • DAO์˜ ๊ฒฝ์šฐ Data Access Object๋ผ๋Š” ๋ชฉ์ ์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ชจ์Šต
  • ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„
    • ํ•„์š”ํ•œ ๊ด€๊ณ„์—์„œ๋งŒ interface๋ฅผ ํ†ตํ•ด ์ตœ์†Œํ•œ์˜ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋Š” ๋ชจ์Šต

โœ”๏ธ ๋‹ค์‹œ๋งํ•ด ์‘์ง‘๋„๊ฐ€ ๋†’์€ ๊ฐ ๋ชจ๋“ˆ์„ ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์จ, ์ˆ˜์ •์„ ์ตœ์†Œํ™”ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

SRP (Single Responsibility Principle) ๋‹จ์ผ ์ฑ…์ž„ ์›์น™

ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์•ˆ์— ๋งŽ์€ ์†์„ฑ์„ ๋„ฃ์ง€๋ง๊ณ , ํ•„์š”ํ•œ ํด๋ž˜์Šค์˜ ์—ญํ• ๊ณผ ๋ชฉ์ ์— ๋งž๋Š” ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋“ค์„ ์ถ”๋ ค ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋“ค๋กœ ๊ฐ๊ฐ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

OCP (Open Closed Principle) ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™

๊ฐœ๋ฐœ ๋ฐฉํ–ฅ์„ ์ƒ์œ„ ํด๋ž˜์Šค ํ˜น์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ค‘๊ฐ„์— ๋‘์–ด ์ง์ ‘์ ์ธ ์—ฐ๋™์„ ํ”ผํ•˜๊ฒŒ ์„ค๊ณ„ํ•œ๋‹ค.

LSP (Liskov Substitution Principle) ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™

์ƒ์†์˜ ๊ฐœ๋…์„ ์œ„์•„๋ž˜ ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ„๋Š”๊ฒƒ์ด ์•„๋‹Œ ๋ถ„๋ฅ˜ํ•˜๋Š”๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ด€์ ์œผ๋กœ ์ƒ์†์„ ํ™•์žฅ์˜ ๊ฐœ๋…์œผ๋กœ ์„ค๊ณ„ํ•˜๋Š”๊ฒƒ

โŒ Father harry = new Son(); - ํ•ด๋ฆฌ๋ผ๋Š” ์ด๋ฆ„์˜ ์•„๋“ค์ด ์•„๋ฒ„์ง€์˜ ํ–‰๋™์„ํ•œ๋‹ค. โญ• Animal mickey = new Rat(); - ๋ฏธํ‚ค๋ผ๋Š” ์ด๋ฆ„์˜ ์ฅ๊ฐ€ ๋™๋ฌผ์˜ ํ–‰๋™์„ ํ•œ๋‹ค.

โœ”๏ธ ํด๋ž˜์Šค์˜ํƒ€์ž… ์ด๋ฆ„ = new ํ•˜์œ„ํด๋ž˜์Šค();๋กœ ๊ธฐ์–ตํ•˜์ž.

ISP (Interface Segregation Principle) ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™

SRP์™€ ๊ฐ™์€ ์›์ธ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ํ•ด๊ฒฐ์ฑ…์„ ์ œ์‹œํ•œ๋‹ค. ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค ๋ฅผ ํ†ตํ•ด ํŒ๋‹จํ•˜์—ฌ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋ฐฉ์‹

DIP (Dependency Inversion Principle) ์˜์กด ์—ญ์ „ ์›์น™

์ƒ์œ„ ํด๋ž˜์Šค๊ฐ€ ํ•˜์œ„ํด๋ž˜์Šค๋ฅผ ์˜์กดํ•˜๋Š” ์ƒํ™ฉ์„ ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ƒ์œ„ํด๋ž˜์Šค๋ฅผ ํ•˜๋‚˜ ๋” ๋‘์–ด ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ์„ ์—ญ์ „ ์‹œํ‚ค๋Š”๊ฒƒ

โœ”๏ธ ์˜๋ฏธ์ ์œผ๋กœ OCP ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™ ๊ณผ ์œ ์‚ฌํ•˜๋‹ค.

๐Ÿ’ก ์ „๋žต ํŒจํ„ด

ํ•„์š”์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌ์‹œํ‚ค๊ณ , ๊ตฌํ˜„ํ•œ ๋กœ์ง์— ๋”ฐ๋ผ ๋ฐ”๊ฟ”์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒํ•œ ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค.

์•ž์„œ ์˜ˆ๋กœ๋“  ConnectionMaker์—์„œ ์—ฐ๊ฒฐ๋ฐฉ์‹์„ ์ •์˜ํ•˜๊ณ  ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค์˜ ๊ตฌ์กฐ์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ๊ฐ๊ฐ์˜ Connection์ด ์ „๋žต์„ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ์ด์šฉ๋˜๋Š”๊ฒƒ์„ ๋งํ•œ๋‹ค.

๐ŸŽฏ ์ œ์–ด์˜ ์—ญ์ „ (IoC)

๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์‚ฌ์šฉํ•˜๋Š” ํ–‰์œ„๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ Container๋กœ ๋„˜์–ด๊ฐ€๋Š”๊ฒƒ์„ ๋งํ•œ๋‹ค.

  • ํŒฉํ† ๋ฆฌ
    • ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ • ํ•˜๊ณ  ๊ทธ๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋Œ๋ ค์ฃผ๋Š” ์ผ ์„ ํ•˜๋Š” ๊ฐ์ฒด

๋‹ค์‹œ๋งํ•ด ์ œ์–ด์˜ ์—ญ์ „์€ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ž์‹ ์ด ์‚ฌ์šฉํ•  ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ƒ์„ฑํ•˜์ง€๋„ ์•Š๊ณ 

์ƒ์„ฑ๊ณผ ๋ฐ˜ํ™˜์„ ์ž์‹ ์ด ์•„๋‹Œ ๋‹ค๋ฅธ๋Œ€์ƒ (ํŒฉํ† ๋ฆฌ) ์— ์œ„์ž„ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ œ์–ด๊ถŒํ•œ์„ ๊ฐ–๋Š” ํ•˜๋‚˜์˜ ํŠน๋ณ„ํ•œ

์˜ค๋ธŒ์ ํŠธ์— ์˜ํ•ด ๊ฒฐ์ •๋˜๊ณ  ๋งŒ๋“ค์–ด ์ง€๋Š”๊ฒƒ์ด๋‹ค.

โœ”๏ธ ์„œ๋ธ”๋ฆฟ์—์„œ์˜ ์˜ค๋ธŒํ…ํŠธ ์ƒ์„ฑ, ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ์ด๋ฃจ์–ด ์ง€๋Š”๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฐœ๋…์ด๋‹ค. โœ”๏ธ ๊ด€์‹ฌ์˜ ๋ถ„๋ฆฌ์™€ ์ฑ…์ž„์„ ๋‚˜๋ˆ„๋Š” ์œ ์—ฐํ•จ์„ ์œ„ํ•œ ํ™•์žฅ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ • ์ž์ฒด๊ฐ€ ๋ชจ๋‘ IoC๋ฅผ ์œ„ํ•œ ์ž‘์—…์ด์—ˆ๋˜ ์…ˆ์ด๋‹ค.