[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] 8. finalizer ์™€ cleaner ์‚ฌ์šฉ์„ ํ”ผํ•˜๋ผ

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] 8. finalizer ์™€ cleaner ์‚ฌ์šฉ์„ ํ”ผํ•˜๋ผ

1. finalizer์™€ cleaner๋ž€? finalizer์™€ cleaner๋Š” ์ž๋ฐ”์˜ 2๊ฐ€์ง€ ๊ฐ์ฒด ์†Œ๋ฉธ์ž์ด๋‹ค. finalizer๋Š” Object.finalize() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ๋œ๋‹ค. ์ž‘๋™ ์—ฌ๋ถ€ ๋ฐ ์‹œ์ ์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๊ณ  ์ƒํ™ฉ์— ๋”ฐ๋ผ ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ์–ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถˆํ•„์š”ํ•˜๋ฉฐ, ๊ธฐ๋Šฅ์˜ ์ž˜๋ชป๋œ ๋™์ž‘, ๋‚ฎ์€ ์„ฑ๋Šฅ, ์ด์‹์„ฑ ๋ฌธ์ œ์˜ ์›์ธ์ด ๋˜๊ธฐ๋„ ํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋˜๊ณ , ์ž๋ฐ” 9์—์„œ๋Š” finalizer๋ฅผ deprecated API๋กœ ์ง€์ •ํ•˜๊ณ , java.lang.ref.Cleaner ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋œ cleaner๋ฅผ ๋Œ€์•ˆ์œผ๋กœ ์ œ์‹œํ•˜์˜€์œผ๋‚˜, cleaner ๋˜ํ•œ finalizer๋ณด๋‹ค๋Š” ๋œ ์œ„ํ—˜ ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์˜ˆ์ธก๋ถˆ๊ฐ€ํ•˜๊ณ  ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์•„ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถˆํ•„์š”ํ•˜๋‹ค.ย ...

[PostgreSQL] Visibility Map(๊ฐ€์‹œ์„ฑ ๋งต)์˜ ๊ฐœ๋…, ์›๋ฆฌ, ์ƒ๋ช…์ฃผ๊ธฐ ๋ฐ ์ •๋ณด ํ™•์ธ ๋ฐฉ๋ฒ•

[PostgreSQL] Visibility Map(๊ฐ€์‹œ์„ฑ ๋งต)์˜ ๊ฐœ๋…, ์›๋ฆฌ, ์ƒ๋ช…์ฃผ๊ธฐ ๋ฐ ์ •๋ณด ํ™•์ธ ๋ฐฉ๋ฒ•

1. Visibility Map(๊ฐ€์‹œ์„ฑ ๋งต)๋ž€? Visibility Map์€ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ๋•Œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์‹œ์ ์ธ์ง€(๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋Š”์ง€), ์•ˆ์ •์ ์ธ์ง€ (๋™๊ฒฐ๋œ ํŠœํ”Œ์ธ์ง€) ํŒ๋ณ„ํ•˜๋Š”๋ฐ ๋„์›€์„ ์ค€๋‹ค. ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์‹œ ๋ถˆํ•„์š”ํ•œ I/O์ž‘์—…์„ ์ค„์—ฌ์ฃผ๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์–ด๋–ค ํŽ˜์ด์ง€๋ฅผ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋น ๋ฅด๊ฒŒ ํŒ๋‹จํ•จ์œผ๋กœ์จ ์‹œ์Šคํ…œ์˜ ํšจ์œจ์ ์„ ์˜ฌ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. 2. Visibility Map(๊ฐ€์‹œ์„ฑ ๋งต)์˜ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ Visibility Map์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์š” ๋ฐ์ดํ„ฐ์™€๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ(fork)์— _vm ์ ‘๋ฏธ์‚ฌ๋ฅผ ๋ถ™์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค.ย ์˜ˆ๋ฅผ ๋“ค์–ด ์˜ˆ๋ฅผ ๋“ค์–ด employees ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด ํ…Œ์ด๋ธ”์˜ Visibility Map์€ ๋ณ„๋„์˜ ํฌํฌ์— ์ €์žฅ๋œ๋‹ค. ์ด ํฌํฌ์˜ ์ด๋ฆ„์€ ํŒŒ์ผ ๋…ธ๋“œ ๋ฒˆํ˜ธ์— _vm ์ ‘๋ฏธ์‚ฌ๋ฅผ ๋ถ™์—ฌ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ํŒŒ์ผ ๋…ธ๋“œ๋ฒˆํ˜ธ๊ฐ€ 12345์ธ ๊ฒฝ์šฐ VM ํŒŒ์ผ์€ 12345_vm์œผ๋กœ ์ €์žฅ๋œ๋‹ค. ๋ฐ์ดํ„ฐ์—๋Š” ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ page๊ฐ€ ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์— ๋ณด์ด๋Š”์ง€, ๋™๊ฒฐ๋œ ํŠœํ”Œ๋งŒ์„ ํฌํ•จํ•˜๋Š”์ง€ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ employees ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•  ๋•Œ, ๊ฐ€์‹œ์„ฑ ๋งต์„ ๋จผ์ € ํ™•์ธํ•œ๋‹ค. ๋งŒ์•ฝ ์ฟผ๋ฆฌ๊ฐ€ ์ ‘๊ทผํ•˜๋ ค๋Š” pages๊ฐ€ ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์—๊ฒŒ ๋ณด์ด๋Š” ์ƒํƒœ๋ผ๊ณ  ํ™•์ธ๋˜๋ฉด, ์‹œ์Šคํ…œ์€ ๋ฐ์ดํ„ฐ์— ๋” ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•œ๋‹ค. ๋ถˆํ•„์š”ํ•œ ๋ฒ„์ „๊ฒ€์‚ฌ๋‚˜ ๋ฝ์„ ์•ˆ ํ•ด๋„ ๋˜๊ธฐ์— ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ๋‹ค. ...

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] 7. ๋‹ค ์“ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํ•ด์ œํ•˜๋ผ

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] 7. ๋‹ค ์“ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํ•ด์ œํ•˜๋ผ

1. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ž๋ฐ”์—์„  ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋‹ค ์“ด ๊ฐ์ฒด๋ฅผ ์•Œ์•„์„œ ํšŒ์ˆ˜ํ•ด ๊ฐ€๊ธฐ์— ํŽธ๋ฆฌํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ๋ง์€ ์ ˆ๋Œ€ ์•„๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์‹ฌํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด์ž. ๋‹ค์Œ์€ ์Šคํƒ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•œ ์ž๋ฐ” ์ฝ”๋“œ์ด๋‹ค. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if (size == 0) throw new EmptyStackException(); return elements[--size]; } private void ensureCapacity() { if (elements.length == size) elements = Arrays.copyOf(elements, 2 * size + 1); } ์ด๋Œ€๋กœ ์‚ฌ์šฉํ•˜์—ฌ๋„ ๊ธฐ๋Šฅ์ƒ์œผ๋กœ๋Š” ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ์—†์„ ๊ฒƒ์ด๊ณ , ์–ด๋–ค ํ…Œ์ŠคํŠธ๋„ ํ›Œ๋ฅญํ•˜๊ฒŒ ํ†ต๊ณผํ•˜๊ฒ ์ง€๋งŒ, ์ด ์Šคํƒ์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์˜ค๋ž˜ ์‹คํ–‰์‹œํ‚ฌ ๊ฒฝ์šฐ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋Š˜์–ด๋‚˜ ๊ฒฐ๊ตญ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ๊ฒƒ์ด๋‹ค. ...

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] 6. ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ”ผํ•˜๋ผ

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] 6. ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ”ผํ•˜๋ผ

1. ๊ฐ์ฒด์˜ ์žฌ์‚ฌ์šฉ ๋˜‘๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋งค๋ฒˆ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ•˜๋‚˜๋ฅผ ์ƒ์„ฑ ํ›„ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค. ํŠนํžˆ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋Š” ์–ธ์ œ๋“  ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹ค์Œ์€ ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋˜๋Š” ๊ทน๋‹จ์ ์ธ ์˜ˆ์ด๋‹ค. String s = new String("bikini"); ๋ณด๊ธฐ๋งŒ ํ•ด๋„ย ๋ถˆํŽธํ•œ ์ด ์ƒ์„ฑ๋ฐฉ์‹์€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค String ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ๋‹ค. ์ดํ›„์— ๊ธฐ๋Šฅ์ ์œผ๋กœ๋Š” ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜์ง€๋งŒ ํฐ ๋ฐ˜๋ณต๋ฌธ์ด๋‚˜ ์ž์ฃผ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ ์•ˆ์— ์žˆ๋‹ค๋ฉด ์“ธ๋ชจ์—†๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ย ์—ฌ๋Ÿฌ ๊ฐœย ์ƒ์„ฑ๋ ย ๊ฒƒ์ด๋‹ค. ๊ฐœ์„ ๋œย ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹์„ย ํ™•์ธํ•ด ๋ณด์ž. ...

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] 5. ์ž์›์„ ์ง์ ‘ ๋ช…์‹œํ•˜์ง€ ๋ง๊ณ  ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ผ

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] 5. ์ž์›์„ ์ง์ ‘ ๋ช…์‹œํ•˜์ง€ ๋ง๊ณ  ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ผ

1. ๊ฐœ๋… ํ•œ ํด๋ž˜์Šค ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž์›์— ์˜์กดํ•˜์—ฌ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ์— ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์„ ํ†ตํ•ด ์œ ์—ฐ์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๊ฐœ์„ ํ•˜๋Š” ๋‚ด์šฉ์ด๋‹ค. ์Šคํ”„๋ง์˜ ์˜์กด์„ฑ ์ฃผ์ž… ๊ฐœ๋…์„ ์ƒ๊ฐํ•ด ๋ณธ๋‹ค๋ฉด ์ด๋ฏธ ๋‹น์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์„ ๊ฒƒ์ด์ง€๋งŒ, ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์˜ ์žฅ์ ์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์ด๋‹ค. IoC(์ œ์–ด์˜ ์—ญ์ „) & DI(์˜์กด์„ฑ ์ฃผ์ž…)์˜ ๊ฐœ๋… ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” ์ฑ…์—์„œ๋Š” "๋งž์ถค๋ฒ• ๊ฒ€์‚ฌ๊ธฐ (SpellChecker)" ํด๋ ˆ์Šค์—์„œ "์‚ฌ์ „ (Dictionary)" ์ž์›์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ๋“ค๊ณ  ์žˆ๋‹ค. ๋งž์ถค๋ฒ• ๊ฒ€์‚ฌ๊ธฐ (SpellChecker)๋Š” ์‚ฌ์ „(dictionary) ์ž์›์— ์˜์กดํ•˜๋Š” ์ƒํ™ฉ์„ ์ •์  ์œ ํ‹ธ๋ฆฌํ‹ฐ, ์‹ฑ๊ธ€ํ„ด, ์˜์กด๊ฐ์ฒด ์ฃผ์ž…์˜ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜๊ณ  ์žˆ๋‹ค. ...