//////
Search
๐Ÿ’ช

์กฐ์˜ˆ์ง€

์ž‘์„ฑ์ผ
2022/10/25
์กฐ์˜ˆ์ง€
ํด๋ž˜์Šค
1
์‚ฌ๋žŒ
1 more property

ย Hash

ย ํ•ด์‹ฑ๊ณผ ํ•ด์‹œํ•จ์ˆ˜

โ—‹ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ์˜ ํ™œ์šฉ

[์ €์žฅํ•˜๋Š” ๊ณผ์ •]
โ€ข
์ถฉ๋ถ„ํ•œ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›์€ ๋‹ค์Œ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ณ ์œ  index๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด index์— ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
โ€ข
์ถฉ๋ถ„ํ•œ ๊ณต๊ฐ„์˜ ๊ธฐ์ค€
โ—ฆ
์ด์ƒ์ ์œผ๋กœ๋Š” ๋‹ค๋‹ค์ต์„ ์œผ๋กœ ํด ์ˆ˜๋ก ํ•ด์‹œ ์ถฉ๋Œ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.
โ—ฆ
๊ทธ๋Ÿฌ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ ๋‹นํžˆ ํฐ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•œ๋‹ค.
โ—ฆ
๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์„ ์–ธํ•˜์ง€ ์•Š๊ณ  ๋™์ ์œผ๋กœ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.
โ—ฆ
ํ†ต๊ณ„์ ์œผ๋กœ ํ•ด์‹œ ํ…Œ์ด๋ธ” ์‚ฌ์šฉ ๊ณต๊ฐ„์ด 70~80% ์ •๋„๊ฐ€ ๋˜๋ฉด ํ•ด์‹œ์˜ ์ถฉ๋Œ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜์—ฌ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.
[๊บผ๋‚ด๋Š” ๊ณผ์ •]
โ€ข
ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— key์— ๋”ฐ๋ผ ํ•ญ์ƒ ๊ฐ™์€ index๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
โ€ข
๋”ฐ๋ผ์„œ, ์ •๋ ฌํ•˜์ง€ ์•Š๊ณ ๋„ ํ•ด์‹œ๊ฐ’์„ ์ด์šฉํ•ด ๊ฐ’์„ ๋ฐ”๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
โ—ฆ
์ด๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ณด๋‹ค ํ•ด์‹œ ํ•จ์ˆ˜ ์—ฐ์‚ฐ์ด ๋” ํšจ์œจ์ ์ด์–ด์•ผ ํ•œ๋‹ค.

โ—‹ ํ•ด์‹œ ์ถฉ๋Œ

โ€ข
๊ฐ™์€ ํ•ด์‹œ๊ฐ’์ด ๋‚˜์˜ค๋Š” ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด index๊ฐ€ ๋™์ผํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ ์ ์„ ๋Œ€๋Š” ์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ, ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ ์ฒด์ด๋‹์ด ํšจ์œจ์ด ์ข‹๋‹ค.
ย ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•1 - ๊ฐœ๋ณ„ ์ฒด์ด๋‹(Seperate Chaining)
โ€ข
ํ•ด์‹œํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ๋ฐฉ์‹
โ€ข
๊ฐ๊ฐ์˜ index๋ฅผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค์–ด์„œ ๊ฐ™์€ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ ธ๋„ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ
โ€ข
JAVA์˜ HashMap์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
ย ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•2 - ์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ(Open Addressing)
โ€ข
๋‹ค์Œ์— ์œ„์น˜ํ•œ index ์ค‘ ๋น„์–ด์žˆ๋Š” ๊ณณ์— ๋„ฃ์Œ
โ€ข
์ „์ฒด ์Šฌ๋กฏ์˜ ๊ฐœ์ˆ˜ ์ด์ƒ์€ ์ €์žฅํ•  ์ˆ˜ ์—†๋‹ค.
โ€ข
๋ชจ๋“  ์›์†Œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ž์‹ ์˜ ํ•ด์‹œ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ์ฃผ์†Œ์— ์ €์žฅ๋œ๋‹ค๋Š” ๋ณด์žฅ์€ ์—†๋‹ค.

โ—‹ ํ•ด์‹œํ…Œ์ด๋ธ” ์‹œ๊ฐ„ ๋ณต์žก๋„

โ€ข
O(1) : key๊ฐ’์€ ํ•ด์‹œํ•จ์ˆ˜์— ์˜ํ•ด ๊ณ ์œ  index๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜์–ด ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
๋ฐ์ดํ„ฐ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ chaining์— ์—ฐ๊ฒฐ๋œ ๋ฆฌ์ŠคํŠธ๋„ ํƒ์ƒ‰ํ•˜๋ฏ€๋กœ O(N)๊นŒ์ง€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
ํ…Œ์ด๋ธ”์ด ๊ฝ‰ ์ฐจ์žˆ๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ํ…Œ์ด๋ธ”์„ ํ™•์žฅํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋Š” ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๊ธ‰์  ํ™•์žฅ์„ ํ•˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค.

โ—‹ HashTable vs HashMap

โ€ข
๋‘˜์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ๋™๊ธฐํ™” ๋ณด์žฅ ์œ ๋ฌด, ํ‚ค์™€ ๊ฐ’์— null ๊ฐ€๋Šฅ ์—ฌ๋ถ€์ด๋‹ค.
โ€ข
๋™๊ธฐํ™” : ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•˜๋ฉด HashTable์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ํ•„์š”์—†๋‹ค๋ฉด ๋น ๋ฅธ HashMap์ด ์œ ๋ฆฌํ•˜๋‹ค.
โ—ฆ
HashMap : ๋™๊ธฐํ™”๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์œผ๋ฉฐ not-thread safeํ•˜๋‹ค.
โ—ฆ
HashTable : ๋™๊ธฐํ™”๋ฅผ ๋ณด์žฅํ•œ๋‹ค. ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ ์œ ์ง€๋ฅผ ์œ„ํ•ด ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋Œ€์‹ , ๋™๊ธฐํ™”๋Š” ์†๋„๋ฅผ ๋А๋ฆฌ๊ฒŒ ํ•œ๋‹ค.
โ€ข
null ๊ฐ’ :
โ—ฆ
HashMap : null๊ฐ’์„ ํ—ˆ์šฉํ•œ๋‹ค.
โ—ฆ
HashTable : null๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
โ€ข
HashTable์€ Collection ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ธฐ ์ „์— ์กด์žฌํ•˜๋˜ ๊ฒƒ์œผ๋กœ ํ˜ธํ™˜์„ ์œ„ํ•ด ๋‚จ๊ฒจ๋‘์—ˆ์ง€๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

โ—‹ (์‹ค์Šต) ํ•ด์‹œํ•จ์ˆ˜ ๊ตฌํ˜„ํ•˜๊ธฐ

1.
์บ๋ฆญํ„ฐ๋กœ ๋ถ„๋ฆฌ
2.
์•„์Šคํ‚ค์ฝ”๋“œ๋กœ ๋ณ€ํ™˜
3.
์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ๋”ํ•œ๋‹ค.
4.
๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•œ๋‹ค.
ย ์ฝ”๋“œ (๊ณผ์ •)
public int hash(String key) { int asciiSum = 0; for (int i = 0; i < key.length(); i++) { asciiSum += key.charAt(i); } return asciiSum % 90; }
Java
๋ณต์‚ฌ

โ—‹ (์‹ค์Šต) ํ•ด์‹œ ํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ธฐ

public class HashTable { private int size = 10000; private int[] table = new int[size]; public HashTable() { } public HashTable(int size) { this.size = size; } public int hash(String key) { int asciiSum = 0; for (int i = 0; i < key.length(); i++) { asciiSum += key.charAt(i); } return asciiSum%size; } public void insert(String key, Integer value) { int hashCode = this.hash(key); this.table[hashCode] = value; } public int search(String key) { return this.table[hash(key)]; } }
Java
๋ณต์‚ฌ
ย insert() - ํ…Œ์ŠคํŠธ
ย search() - ํ…Œ์ŠคํŠธ

ย ํ† ๋น„์˜ Spring3 ๋ณต์Šต

ย ์‹ค์Šต ๋‚ด์šฉ์€ ์ด๋ฏธ ์ž‘์„ฑ๋˜์–ด ์žˆ์–ด์„œ ๊ฐœ์ธ์ ์œผ๋กœ ๊ต๊ณผ์„œ ์œ„์ฃผ๋กœ ๊ณต๋ถ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
๊ฐœ์ธ์ ์œผ๋กœ, ๋ณธ ์‹ค์Šต์€ ์Šคํ”„๋ง์ด ์ถ”๊ตฌํ•˜๋Š” ๊ฐ€์น˜์™€ ์Šคํ”„๋ง์˜ ๊ธฐ์ˆ ๋“ค์ด ์™œ ํ•„์š”ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋ฐœ์ „๋˜์–ด ์™”๋Š”์ง€๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ์‹ค์Šต์ด๋ผ ์ƒ๊ฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

โ—‹ ์Šคํ”„๋ง์ด๋ž€?

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

ย ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ

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

ย ๊ณตํ†ต ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ : ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑ๋˜์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ธฐ์ค€๋„ ์ œ์‹œํ•ด์ค€๋‹ค.
์Šคํ”„๋ง์€ ์„ธ ๊ฐ€์ง€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ์ง€์›ํ•œ๋‹ค.
1.
IoC/DI
์Šคํ”„๋ง์€ ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ์šฐ๋„ˆ์น™๊ณผ ๋””์ž์ธ ํŒจํ„ด์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” IoC/DI๋ฅผ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ทผ๊ฐ„์œผ๋กœ ์‚ผ๊ณ  ์žˆ๋‹ค.
2.
์„œ๋น„์Šค ์ถ”์ƒํ™”
์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด ํ™˜๊ฒฝ์ด๋‚˜ ์„œ๋ฒ„, ํŠน์ • ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š๊ณ  ์ด์‹์„ฑ์ด ๋›ฐ์–ด๋‚˜๋ฉฐ ์œ ์—ฐํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ๊ธฐ์ˆ ๊ณผ ํ™˜๊ฒฝ์— ์ข…์†๋˜์ง€ ์•Š๋„๋ก ์œ ์—ฐํ•œ ์ถ”์ƒ ๊ณ„์ธต์„ ๋‘๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
3.
AOP (Aspect Oriented Programming)
AOP๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์— ์‚ฐ์žฌํ•ด์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋…๋ฆฝ์ ์œผ๋กœ ๋ชจ๋“ˆํ™”ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•ต์‹ฌ์ ์ธ ๊ด€์ ์€ ํ•ต์‹ฌ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์ด ๋œ๋‹ค. ๋˜ํ•œ ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์€ ์ด๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ, ๋กœ๊น…, ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๋“ฑ์ด ์žˆ๋‹ค.
์†Œ์Šค ์ฝ”๋“œ์ƒ์—์„œ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๊ณ„์† ๋ฐ˜๋ณตํ•ด์„œ ์“ฐ๋Š” ์ฝ”๋“œ๋“ค์„ ํฉ์–ด์ง„ ๊ด€์‹ฌ์‚ฌ (Crosscutting Concerns)๋ผ๊ณ  ํ•˜๋ฉฐ, ์ด๋“ค์„ ๋ชจ๋“ˆํ™”ํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ย ๊ธฐ์ˆ  API

์Šคํ”„๋ง์€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœ์˜ ๋‹ค์–‘ํ•œ ์˜์—ญ์— ๋ฐ”๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋Œ€ํ•œ ์–‘์˜ ๊ธฐ์ˆ  API๋ฅผ ์ œ๊ณตํ•œ๋‹ค. UI ์ž‘์„ฑ, ์›น ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต, ๋น„์ง€๋‹ˆ์Šค ์„œ๋น„์Šค ๊ณ„์ธต, ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค ๊ณ„์ธต, ๋„๋ฉ”์ธ ๊ณ„์ธต, ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต ๋“ฑ์—์„œ ํ•„์š”ํ•œ ์ฃผ์š” ๊ธฐ์ˆ ์„ ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ๊ณผ ์ „๋žต ํด๋ž˜์Šค ๋“ฑ์„ ์ œ๊ณตํ•œ๋‹ค.

โ—‹ ์Šคํ”„๋ง ํ•™์Šต ๋ฐฉํ–ฅ

ย ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ๊ฐ€์น˜์™€ ์›๋ฆฌ์— ๋Œ€ํ•œ ์ดํ•ด

โ€ข
ํ•ต์‹ฌ๊ฐ€์น˜๋ฅผ ์ดํ•ดํ•˜๊ณ , ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•ด์„œ ๋งŒ๋“ค์–ด์กŒ๋Š”์ง€๋ฅผ ์ดํ•ดํ•˜์ž.

ย ์Šคํ”„๋ง์˜ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์ง€์‹๊ณผ ์„ ํƒ ๊ธฐ์ค€ ์ •๋ฆฝ

โ€ข
์Šคํ”„๋ง์€ ๋ฒ”์šฉ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ์ด๊ณ  ๋ชจ๋“  ๋ ˆ์ด์–ด๋ฅผ ํญ๋„“๊ฒŒ ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค.
โ€ข
๊ทธ ์ค‘์—์„œ ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ•  ์ง€๋Š” ๊ฐœ๋ฐœ์ž์˜ ๋ชซ์ด๋‹ค.
โ€ข
์ด๋Ÿฐ ๊ณ ๋ฏผ๋•Œ๋ฌธ์— ๋‚จ๋“ค์ด ๋งŒ๋“ค์–ด ๋†“์€ ์˜ˆ์ œ๋ฅผ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์ƒ๊ฐ ์—†์ด ์‚ฌ์šฉํ•˜๋Š” ์ผ์€ ํ”ผํ•ด์•ผํ•œ๋‹ค.
โ€ข
์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ ์˜ ์ข…๋ฅ˜์™€ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์—๋Š” ์–ด๋–ค ๊ฒƒ์ด ์žˆ๋Š”์ง€ ์•Œ๊ณ , ์„ ํƒ์˜ ๊ธฐ์ค€์„ ๋งˆ๋ จํ•ด์„œ ์ƒํ™ฉ์— ๋งž๋Š” ์ตœ์„ ์˜ ๊ธฐ์ˆ ๊ณผ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

ย ์Šคํ”„๋ง์˜ ์ ์šฉ๊ณผ ํ™•์žฅ

โ€ข
์Šคํ”„๋ง์˜ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์„ ์–ด๋–ป๊ฒŒ ์‹ค์ œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์ ์šฉํ•˜๋Š”์ง€๋ฅผ ๊ณต๋ถ€ํ•ด์•ผ ํ•œ๋‹ค.
โ€ข
๋˜ํ•œ ๊ทธ๊ฒƒ์„ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์ถ”์ƒํ™”ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผํ•œ๋‹ค.

โ—‹ ์‹œ์ž‘ ์ฝ”๋“œ

java-pojo-db-connection
Kyeongrok
๋™์˜์ƒ ๊ฐ•์˜

โ—‹ 10/18์ผ ์ˆ˜์—…๋‚ด์šฉ

๋™์˜์ƒ ๊ฐ•์˜
์‹ค์Šต ๋‚ด์šฉ
๊ต๊ณผ์„œ
์•Œ์•„์•ผ ํ•  ๊ฒƒ
Connection๋ถ„๋ฆฌ
1.2 DAO์˜ ๋ถ„๋ฆฌ - p62
์ค‘๋ณต ์ฝ”๋“œ์˜ ๋ฉ”์†Œ๋“œ ์ถ”์ถœ
ConnectionMaker Class๋กœ ๋ถ„๋ฆฌ
1.3 DAO์˜ ํ™•์žฅ - p73
ย UserDao๊ฐ€ ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค๋Š” ๋ฌธ์ œ์ 
addAndGet ํ…Œ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
2.2 UserDaoTest ๊ฐœ์„  - p156
๋ณธ ์‹ค์Šต์—์„œ JUnit์„ ์ด์šฉํ•œ test ์ง„ํ–‰
Interface์ ์šฉํ•ด์„œ ๋ถ„๋ฆฌ
1.3.2 ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋„์ž… - p76
์ „๋žต ํŒจํ„ด ์ ์šฉ์œผ๋กœ ํด๋ž˜์Šค์™€ ๋Ÿฐํƒ€์ž„ ์˜ค๋ธŒ์ ํŠธ ์˜์กด๊ด€๊ณ„๋Š” client์—์„œ ๋‹ด๋‹นํ•œ๋‹ค.
ย ๋ฆฌํŒฉํ† ๋ง
ย ๋””์ž์ธํŒจํ„ด
ย ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ ํŒจํ„ด
ย ์ „๋žต ํŒจํ„ด
ย ์ฝ”๋“œ

โ—‹ 10/19์ผ ์ˆ˜์—…๋‚ด์šฉ

์‹ค์Šต ๋‚ด์šฉ
๊ต๊ณผ์„œ
์•Œ์•„๋‘˜ ๊ฒƒ
Factory์ ์šฉ
1.4 ์ œ์–ด์˜ ์—ญ์ „(IoC) - p90
๊ฐ์ฒด๋ฅผ ์กฐ๋ฆฝํ•˜๋Š” ์ชฝ๊ณผ ์‚ฌ์šฉํ•˜๋Š” ์ชฝ์˜ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•œ๋‹ค.
Spring ๋„์ž…
1.5 ์Šคํ”„๋ง์˜ IoC - p97, p187
ApplicationContext ์„ค์ •์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ํ™œ์šฉ
Test Code๋ฅผ ApplicationContext์‚ฌ์šฉํ•˜๊ฒŒ ์ˆ˜์ •
p99
test code์—์„œ factory ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์˜จ๋‹ค.
ย ํŒฉํ† ๋ฆฌ
ย ์ œ์–ด์˜ ์—ญ์ „(IoC)
ย ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ์™€ ์„ค์ •์ •๋ณด
ย ApplicationContext ๋™์ž‘๋ฐฉ์‹
ย ์‹ฑ๊ธ€ํ†ค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ (Singleton registry)
ย ์ฝ”๋“œ

โ—‹ 10/20์ผ ์ˆ˜์—…๋‚ด์šฉ

๋™์˜์ƒ ๊ฐ•์˜
์‹ค์Šต ๋‚ด์šฉ
๊ต๊ณผ์„œ
์•Œ์•„๋‘˜ ๊ฒƒ
deleteAll(), GetCount()์ถ”๊ฐ€
2.3.2 ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์˜ ์ผ๊ด€์„ฑ - p166
ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, TDD
deleteAll(), GetCount() ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
p168
Test Code @BeforeEach ์ ์šฉ
2.3.5 ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ฐœ์„  - p181
get()์—์„œ user==null์ธ ๊ฒฝ์šฐ Exception์ฒ˜๋ฆฌ
p175
try / catch / final ์ฒ˜๋ฆฌ
3.1.1 ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ DAO - p212
์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ๋„ Connection, PreparedStatement์™€ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•œ๋‹ค.
ย ์ฝ”๋“œ

โ—‹ 10/21์ผ ์ˆ˜์—…๋‚ด์šฉ

์‹ค์Šต ๋‚ด์šฉ
๊ต๊ณผ์„œ
์•Œ์•„๋‘˜ ๊ฒƒ
Statement Strategy ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€
์ „๋žต ํŒจํ„ด์˜ ์ ์šฉ - p221
๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ธํ„ฐํŽ˜์ด์Šค (์ „๋žต)์œผ๋กœ ๋ถ„๋ฆฌ์‹œ์ผœ ํ•„์š”์— ๋”ฐ๋ผ ๊ฐˆ์•„๋ผ์šธ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
jdbcContextWithStatementStrategy๋กœ ๋ถ„๋ฆฌ
DI ์ ์šฉ์„ ์œ„ํ•œ ํด๋ผ์ด์–ธํŠธ/์ปจํ…์ŠคํŠธ ๋ถ„๋ฆฌ - p225
๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„(์ปจํ…์ŠคํŠธ)๋ฅผ ๋ฉ”์„œ๋“œ๋กœ ๋ถ„๋ฆฌ
deleteAllStrategy()
p225
์ „๋žต ๊ตฌํ˜„ ํด๋ž˜์Šค
AddStrategy()
p227
์ „๋žต ๊ตฌํ˜„ ํด๋ž˜์Šค
โ€ข
context๊ฐ€ ์–ด๋–ค ์ „๋žต์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€๋Š” context๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•ž๋‹จ์˜ client๊ฐ€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.
โ€ข
client๊ฐ€ ๊ตฌ์ฒด์ ์ธ ์ „๋žต์„ ์„ ํƒํ•˜๊ณ  ์˜ค๋ธŒ์ ํŠธ๋กœ ๋งŒ๋“ค์–ด์„œ context์— ์ „๋‹ฌํ•œ๋‹ค.
โ€ข
Context method๋Š” clinet๋กœ๋ถ€ํ„ฐ StatementStrategy ํƒ€์ž…์˜ ์ „๋žต ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ œ๊ณต๋ฐ›๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ œ๊ณต๋ฐ›์€ ์˜ค๋ธŒ์ ํŠธ๋Š” PreparedStatement ์ƒ์„ฑ์ด ํ•„์š”ํ•œ ์‹œ์ ์— ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
ย ์ฝ”๋“œ

โ—‹ 10/24์ผ ์ˆ˜์—…๋‚ด์šฉ

๋™์˜์ƒ ๊ฐ•์˜
์‹ค์Šต ๋‚ด์šฉ
๊ต๊ณผ์„œ
์•Œ์•„๋‘˜ ๊ฒƒ
DataSource ์ ์šฉ
1.8.3 DataSource ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ณ€ํ™˜ - p138
DB ์ปค๋„ฅ์…˜์„ ๊ฐ€์ ธ์˜ค๋Š” ์ž๋ฐ”์˜ ์ธํ„ฐํŽ˜์ด์Šค ํ™œ์šฉ
deleteAll()์— ์ต๋ช… ํด๋ž˜์Šค ์ ์šฉ
p233
ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
add()์— ์ต๋ช… ํด๋ž˜์Šค ์ ์šฉ
p232
JdbcContext๋กœ ๋ถ„๋ฆฌ
3.4.1 JdbcContext ๋ถ„๋ฆฌ - p233
๋‹ค๋ฅธ DAO์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (์žฌ์‚ฌ์šฉ)
.executeQuery()๋ถ„๋ฆฌ
3.4 ํ…œํ”Œ๋ฆฟ๊ณผ ์ฝœ๋ฐฑ - p248
์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐ ๋ฐ ๊ฐ€๋…์„ฑ ์ฆ๊ฐ€
JdbcTemplate์ ์šฉ deleteAll(), add()
3.6.1 update - p262,263
์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ํ…œํ”Œ๋ฆฟ/์ฝœ๋ฐฑ ๊ธฐ์ˆ  ์ ์šฉ ์ด๋•Œ๊นŒ์ง€ ๋ณต์žกํ•˜๊ฒŒ ๊ตฌํ˜„ํ•œ ๊ฒƒ์„ ๋ชจ๋‘ ๋Œ€์ฒดํ•œ๋‹ค.
JdbcTemplate์ ์šฉ getCount(), findById()
3.6.2 queryForInt() - p266, p267
qeuryForObject()
getAll()์ถ”๊ฐ€
p270
query()
getAllTest()์ถ”๊ฐ€
p269, p272
ย DataSource
ย ์ค‘์ฒฉ ํด๋ž˜์Šค
ย ์ธํ„ฐํŽ˜์ด์Šค ์—†์ด DI
ย JdbcTemplate
ย ์ฝœ๋ฐฑ
ย RowMapper
ย query()
ย ์ฝ”๋“œ

๋ณต์Šต ๋‚ด์šฉ ์ฝ”๋“œ