๐ฎ ์ค๋ธ์ ํธ์ ์์กด๊ด๊ณ
- ๐ฎ ์ค๋ธ์ ํธ์ ์์กด๊ด๊ณ
๊ด๊ณ์ค์ ์ฑ ์์ ๋ถ๋ฆฌ< ์ดํด ์ ์๋์ ๋ค์๋ด์ผ.. >
์คํ๋ง์
์ค๋ธ์ ํธ
์ ๊ดํ ์ค๊ณ์ ๋์ ๊ฒ์ฆ, ๊ตฌ์กฐ๋ฅผ ์ง์์ ์ผ๋ก ๊ฐ์ ํ๋ ํ ์คํธ๋ฑ์ ์ฌ๋ฌ๊ฐ์ง ์ง์์ด ์๊ตฌ๋๋ ํ๋ ์์ํฌ๋ก์จ ์ค๋ธ์ ํธ์ ๋ํ ๊ด์ฌ๊ณผ ๊ฐ์ฒด์งํฅ ๊ธฐ์ ์ด ์ ๊ณตํ๋ ํํ๊ณผ ๋ชฉ์ ์ฑ์ ๊ฐ์กฐํ๋ค.
๐๋๊ฐํ DAO
๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ์กฐ์ํ๋ ๊ธฐ๋ฅ์ ์ ๋ดํ๋
์ค๋ธ์ ํธ
์ด๋ค. ์๋ฐ ๋น ๊ฐ์ฒด๋ฅผ DB๋ผ๊ณ ๋ดค์๋ ๊ทธ ๊ฐ์ฒด์ ๊ดํ CRUD๊ฐ์ DB๊ด๋ จ ๊ธฐ๋ฅ๋ค์ ์ ์ํด ์ฌ์ฉํ๋ ์ค๋ธ์ ํธ์ด๋ค.
โ๏ธ JavaBean : ๋ํดํธ ์์ฑ์
๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , getter/setter
ํ๋กํผํฐ๋ฅผ ์์ ํ ์ค๋ธ์ ํธ
๐ JDBC
- ๋๋ผ์ด๋ฒ ๋ก๋ฉ (JDBC Load)
- Class.forName(“๋๋ผ์ด๋ฒ Path”)
Class
ํด๋์ค๊ฐ ํด๋์ค์ ์ ๋ณด(ํ๋, ๋ฉ์๋ ํด๋์ค์ ์ข ๋ฅ)๋ฅผ ๋ด๋ ๋ฉํ ํด๋์ค์ด๊ณ JVM์ ํด๋น ํด๋์ค์ ์ ๋ณด๋ฅผ ๋ก๋ํ๋ค.
- Class.forName(“๋๋ผ์ด๋ฒ Path”)
- DB ์ฐ๊ฒฐ Connection
- DriverManager.getConnection(url, ID, PWD)
- Connection ๊ฐ์ฒด๋ฅผ ์์ฑํํ
- DriverManager์์ ์์คํ ํ๋กํผํฐ “jdbc.drivers"์ ์ฐธ์กฐ๋ ๋๋ผ์ด๋ฒ ํด๋์ค๋ฅผ ๋ก๋ํ๋ค.
- ์ดํ Connection ๊ฐ์ฒด์ ํ ๋น
- DriverManager.getConnection(url, ID, PWD)
- ์ฟผ๋ฆฌ ์์ฑ ๋ฐ ์ง์
PreparedStatement psmt = null; psmt = conn.prepareStatement("SQL๋ฌธ"); Statement stmt = null; stmt = conn.createStatement("SQL๋ฌธ");
โ๏ธ
PreparedStatement`๋ ์ฟผ๋ฆฌ์ ?๋ก ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์ ์คํ ๊ฐ๋ฅ - ์ฟผ๋ฆฌ ์คํ
- psmt.executeUpdate()
INSERT
UPDATE
DELETE
๊ฐ์ ๊ฐ์ ๋ฐ์์ค์ง ์๋ ์ฟผ๋ฆฌ๋ฌธ์ psmt.executeUpdate()๋ก ์คํ
- psmt.executeQuery()
SELECT
์ฒ๋ผ ๊ฒฐ๊ณผ ํ ์ด๋ธ์ด ํ์ํ ์ฟผ๋ฆฌ๋ฌธ์ ์ฟผ๋ฆฌ ์คํ ์ด์ ์ResultSet
๊ฐ์ฒด๋ฅผ ์์ฑํํ psmt.executeQuery()๋ฅผ ํ ๋นํ๋ค.
- psmt.executeUpdate()
- ResultSet ์ฒ๋ฆฌ
while(rs.next()) { int i=1; int id = rs.getInt(i++); String name = rs.getString(i++); String addr = rs.getString(i++); }
`
- 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๋ฅผ ์ํ ์์
์ด์๋ ์
์ด๋ค.