์‚ถ/F-Lab

Week 3

osean 2021. 5. 20. 03:53

Week 3
: ํŒŒ๋ฉด ํŒ” ์ˆ˜๋ก ์–ด๋ ค์šด ๊ฒƒ


โœ๏ธ ์ด๋ฒˆ ์ฃผ๋Š” ์ฑ…์„ ํ†ตํ•ด ์ƒˆ๋กญ๊ฒŒ ๊ณต๋ถ€ํ•˜๊ธฐ๋ณด๋‹จ 2์ฃผ์ฐจ์—์„œ ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ ์งˆ๋ฌธ ์ฃผ์…จ๋˜ ๋‚ด์šฉ์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ๊นŠ๊ฒŒ ๊ณต๋ถ€ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์˜๋ฌธ์ด ๋“ ๋‹ค.

'๊ณผ์—ฐ ๋‚ด๊ฐ€ ๊ณต๋ถ€ํ•œ ๊ฒƒ๋“ค์ด ๋‚ด ๊ฒƒ์ด ๋˜์—ˆ์„๊นŒ?'

์Šค์Šค๋กœ์—๊ฒŒ ๋ฌผ์—ˆ์„ ๋•Œ, ๋ฐ˜์€ ๋งž๊ณ  ๋ฐ˜์€ ํ‹€๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค.
ํ‹€๋ ธ๋‹ค์˜ ์˜๋ฏธ๋Š” ์ƒˆ๋กœ์šด ๊ฒƒ์„ ์ ‘ํ•ด์„œ ์กฐ๊ธˆ์”ฉ ๋จธ๋ฆฌ์— ๊ทธ๋ ค์ง€๊ธฐ ์‹œ์ž‘ํ•œ ๋‹จ๊ณ„๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.
์–ผ๋งˆ๋‚˜ ๋” ๋“ค์—ฌ๋ด์•ผ ๋‚ด ๊ฒƒ์ด ๋  ์ˆ˜ ์žˆ์„๊นŒ?!๐Ÿฅฒ ์กฐ๊ธ‰ํ•ด์ง€์ง€๋ง๊ณ  ๋‹จ๋‹จํ•˜๊ฒŒ ์„ฑ์žฅ ํ•  ์ˆ˜ ์žˆ๋„๋ก, 4์ฃผ์ฐจ๋„ ์—ด์‹ฌํžˆ ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค!

1. String ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ทธ ์ฐจ์ด

String ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.
๐Ÿ“ Literal๋กœ ์ง์ ‘ ๋ฌธ์ž์—ด์„ ์ž‘์„ฑํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
๐Ÿ“ new ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด ์ƒ์„ฑ์ž์— ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋ฌธ์ž์—ด์„ ๋‹ด์•„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•


1. ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒ์„ฑ
๋ฆฌํ„ฐ๋Ÿด๋กœ String ๊ฐ์ฒด๋กœ ์„ ์–ธ ํ•  ๋•Œ, ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ž๋™์œผ๋กœ intern() ๋ฉ”์†Œ๋“œ๊ฐ€ ์ปดํŒŒ์ผ๋  ๋•Œ ์ถ”๊ฐ€๋œ๋‹ค.
๋•Œ๋ฌธ์— JVM์—์„œ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น ํ•  ๋•Œ, intern() ๋ฉ”์†Œ๋“œ์— ๊ฐ™์€ ๋ฌธ์ž์—ด์ด ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋Š”์ง€ Heap ๋ฉ”๋ชจ๋ฆฌ์˜ String Constant Pool์„ ํ™•์ธํ•œ๋‹ค.
๋งŒ์•ฝ ๊ฐ™์€ ๋ฌธ์ž์—ด์ด ์ด๋ฏธ ํ• ๋‹น๋˜์–ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. ํ•˜์ง€๋งŒ String Constant Pool๊ฐ™์€ ๋ฌธ์ž์—ด์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฌธ์ž์—ด์„ ํ•ด๋‹น ์˜์—ญ์— ์ƒˆ๋กœ ํ• ๋‹น๋ฐ›๊ณ  ์ด์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.
์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒ์„ฑ๋œ ๋ฌธ์ž์—ด์ด ๊ฐ™์€ String ๊ฐ์ฒด๋Š” ๋™๋“ฑ๋น„๊ต์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๋น„๊ต์—ฐ์‚ฐ ์‹œ, true๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.


2. ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ
์ƒ์„ฑ์ž๋กœ String ๊ฐ์ฒด๋ฅผ ์„ ์–ธ ํ•  ๋•Œ, ๋ฆฌํ„ฐ๋Ÿด ์„ ์–ธ๊ณผ ๋‹ฌ๋ฆฌ ๋ฐ”๋กœ Heap ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ๋‹ค. ๋•Œ๋ฌธ์— ๊ฐ™์€ ๋ฌธ์ž์—ด์ด๋ผ ํ• ์ง€๋ผ๋„ ์ƒ์„ฑ์ž๋กœ ์„ ์–ธ๋œ String ๊ฐ์ฒด, ๋ฆฌํ„ฐ๋Ÿด๋กœ ์„ ์–ธ๋œ String ๊ฐ์ฒด์™€ ๋™๋“ฑ๋น„๊ต์—ฐ์‚ฐ์ž๋กœ ์—ฐ์‚ฐ ์‹œ false๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
๋ฌธ์ž์—ด์ด ๊ฐ™์•„๋„ Heap ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ์˜์—ญ์€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋•Œ๋ฌธ์— ๋ฌธ์ž์—ด ๋น„๊ต๋ฅผ ์œ„ํ•ด์„œ๋Š” equlas() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

2. Inheritance, Composition

๐Ÿ“์ƒ์†
์ƒ์†์€ extends ๋ผ๋Š” ์˜ˆ์•ฝ์–ด๋ฅผ ํ†ตํ•ด ์ตœ๋Œ€ 1๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ public, protected ์ œ์–ด์ž๋กœ ์ •์˜ํ•œ ํ•„๋“œ, ๋ฉ”์†Œ๋“œ ๋“ฑ์„ @Override ๋ฅผ ํ†ตํ•ด ์žฌ์ •์˜ํ•˜๊ฑฐ๋‚˜ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
์ƒ์†์€ ๋‹คํ˜•์„ฑ์˜ ํŠน์ง•์„ ๊ฐ€์ง€๋ฉฐ, SOLID ์›์น™ ์ค‘ ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์— ๊ธฐ๋ฐ˜์„ ๋‘๊ณ  ์žˆ๋‹ค. ๋•Œ๋ฌธ์— IS-A ๊ด€๊ณ„์˜ ํด๋ž˜์Šค๋“ค์„ ์ƒ์†์„ ํ†ตํ•ด ๊ด€๊ณ„๋ฅผ ๋งบ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
ํ•˜์ง€๋งŒ Java์˜ ์ƒ์†์€ ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์— ์–ด๊ธ‹๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ List์™€ Arrays.asList()๊ฐ€ ์žˆ๋‹ค.
Arrays ํด๋ž˜์Šค๋Š” ArraysList ํด๋ž˜์Šค์™€๋Š” ๋ณ„๊ฐœ๋กœ, Arrays.asList() ์ •์  ๋ฉ”์†Œ๋“œ๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋ฐฐ์—ด์„ ๋ฐ›์•„ ๋‚ด๋ถ€ ๋กœ์ง์— ์˜ํ•ด List ํด๋ž˜์Šค๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Arrays.asList() ์ •์  ๋ฉ”์†Œ๋“œ๋Š” ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์—†๋Š” ๋ฐฐ์—ด ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ List ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— add() ๋ฉ”์†Œ๋“œ๊ฐ€ ์žฌ์ •์˜ ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.
๊ทธ๋ž˜์„œ ์ด๋ ‡๊ฒŒ Arrays.asList()๋กœ ์„ ์–ธ๋œ List ๊ฐ์ฒด์˜ add() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋Š” ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ๋ฒ•์น™๊ณผ ํ์‡„ ๊ฐœ๋ฐฉ ์›์น™ ๊ทธ๋ฆฌ๊ณ  ์บก์ˆ ํ™”์— ์–ด๊ธ‹๋‚œ๋‹ค.

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

 

3. GC์˜ ๋™์ž‘ ์›๋ฆฌ์™€ ๊ทธ ์ข…๋ฅ˜

๐Ÿ“ Garbage Collector?
Java ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘์— Heap ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ๊ฐ์ฒด ์ค‘ ์“ธ๋ชจ ์—†๋Š” ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๐Ÿ“ GC์˜ ๋™์ž‘ ์›๋ฆฌ
๊ธฐ๋ณธ์ ์œผ๋กœ Heap ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ๊ฐ์ฒด ์ค‘ Reachable ๊ฐ์ฒด์™€ UnReachable ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ (Mark), Unreachable ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.(Sweep) ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ Mark & Sweep ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ ์šฉ๋œ GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ Serial GC, Parallel GC, Parallel Old GC, CMS GC, G1GC ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

๐Ÿ“ GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์˜์—ญ
GC๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์˜์—ญ์ธ Heap ๋ฉ”๋ชจ๋ฆฌ๋Š” Young / Old Generation์œผ๋กœ ๋‚˜๋‰˜๋ฉฐ, Young ์˜์—ญ์—๋Š” ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹น๋œ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๊ณ  Old ์˜์—ญ์—๋Š” Young ์˜์—ญ์—์„œ ์ •๋ฆฌ๋˜์ง€ ์•Š์€ ๊ฐ•ํ•œ ์ฐธ์กฐ๊ฐ€ ์ผ์–ด๋‚œ ๊ฐ์ฒด๋“ค์ด ์กด์žฌํ•œ๋‹ค.
Young ์˜์—ญ์€ ์„ธ๋ถ€์ ์œผ๋กœ Eden, Survivor 1/2 ์˜์—ญ์œผ๋กœ ๋‚˜๋‰˜๋Š”๋ฐ, Eden ์˜์—ญ์€ new ์ƒ์„ฑ์ž๋กœ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋ฉฐ GC ์ˆ˜ํ–‰ ํ›„ ์ฐธ์กฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด๋Š” Survivor ์˜์—ญ ์ค‘ ํ•œ ๊ณณ์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ํ•ด๋‹น ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ Survivor ์˜์—ญ ์ค‘ ํ•œ ๊ณณ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋‹ค ์ฐฌ๋‹ค๋ฉด ๋น„์–ด์žˆ๋Š” ๋‚˜๋จธ์ง€ Survivor ์˜์—ญ์— ์ฐธ์กฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ด๋™ ์‹œํ‚จ ํ›„, ๊ธฐ์กด์— ์ฑ„์›Œ์ ธ ์žˆ๋˜ Survivor ์˜์—ญ์€ ๋น„์›Œ๋‘”๋‹ค.
์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ณ„์† ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ Survivor ์˜์—ญ์— ๋‚จ์•„์žˆ๋Š” ๊ฐ์ฒด ์ค‘ age ๊ฐ’์ด 8์—์„œ 9๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์‹œ์ ์— ํ•ด๋‹น ๊ฐ์ฒด๋“ค์€ Old ์˜์—ญ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

๐Ÿ“ ๊ฐœ๋ฐœ์ž๊ฐ€ GC์— ๊ด€์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•
java.lang.ref ํŒจํ‚ค์ง€์— ์กด์žฌํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•ด์„œ GC ์ž‘์—… ์ˆ˜ํ–‰์— ์ผ๋ถ€๋ถ„ ๊ด€์—ฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ•ด๋‹น ํŒจํ‚ค์ง€์—๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ WeakReference, SoftReference, PhantomReference, ReferenceQueue ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค.
๊ฐ ํด๋ž˜์Šค๋Š” GC์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜๊ฐ€ ๋˜๋ฉด ์•ˆ๋˜๋Š” ๊ฐ์ฒด๋“ค์„ ์ƒ์„ฑ์ž์— ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋‹ด์•„ ์„ ์–ธํ•œ๋‹ค. ์˜ˆ์™ธ์ ์œผ๋กœ PhantomReference๋Š” ReferenceQueue ๊ฐ์ฒด๋„ ํ•จ๊ป˜ ์ธ์ž๋กœ ๋„˜๊ฒจ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
์ด๋“ค ํด๋ž˜์Šค๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ๊ฐ์ฒด๋ฅผ ์บก์ˆ ํ™”ํ•˜๊ณ , ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์ฐธ์กฐํ•œ๋‹ค. ์ด ๋•Œ, ์บก์Šํ™” ๋œ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ Reference ๊ฐ์ฒด๋งŒ ์กด์žฌํ•  ๋•Œ, GC๋Š” ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ UnReachable ๊ฐ์ฒด๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ๊ฐ Reference ๊ฐ์ฒด๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ๋‚จ์•„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, get() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „ ํ›„์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ๋‹ค๋งŒ, SoftReference ํด๋ž˜์Šค๋Š” ์บก์Šํ™” ๋œ ๊ฐ์ฒด์˜ ์ฐธ์กฐ ํšŸ์ˆ˜๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ๋“ฑ ์ƒํ™ฉ์— ๋งž์„ ๋•Œ ํ•ด๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

4. Inner Class

๐Ÿ“ Inner Class?
ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์„ ์–ธํ•œ ํด๋ž˜์Šค๋กœ Static Nested ํด๋ž˜์Šค์™€ ๋‚ด๋ถ€ ํด๋ž˜์Šค๋กœ ๋‚˜๋‰œ๋‹ค. ๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ๋˜ ์ง€์—ญ ๋‚ด๋ถ€ ํด๋ž˜์Šค์™€ ์ต๋ช… ํด๋ž˜์Šค๋กœ ๋‚˜๋‰œ๋‹ค. ๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ฌถ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜ ์บก์Šํ™”๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„๋˜์–ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
์ด์™€ ๊ฐ™์€ ์ด์œ ๋กœ ๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ์บก์ˆ ํ™”์˜ ํŠน์ง•์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š”๋ฐ, ํด๋ž˜์Šค ๋‚ด๋ถ€๋ฅผ ์ˆจ๊ธฐ๊ฑฐ๋‚˜ ์€๋‹‰ํ•˜๋Š”๋ฐ ์œ ์šฉํ•˜๋ฉฐ, ์ฃผ๋กœ Java GUI์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

๐Ÿ“ Static Nested Inner Class
ํด๋ž˜์Šค ๋‚ด๋ถ€์— ๊ตฌํ˜„๋œ ํด๋ž˜์Šค์— static ์˜ˆ์•ฝ์–ด๋ฅผ ๋ถ™์—ฌ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋‚ด๋ถ€ ํด๋ž˜์Šค์™€ ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค ๊ด€๊ณ„๋ฅผ ๋ฌถ์–ด์ค€๋‹ค.

๐Ÿ“ Anonymous Class
ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๊ฐ์ฒด๋กœ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒ์„ฑ์ž ํ˜น์€ ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ์ด ๋•Œ ์ค‘๊ด„ํ˜ธ๋ฅผ ๋งŒ๋“ค์–ด ๊ทธ ๋‚ด๋ถ€์— ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค. ์ต๋ช… ํด๋ž˜์Šค๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ, JVM์ด ์ฝ์–ด์•ผ ํ•˜๋Š” ํด๋ž˜์Šค ํŒŒ์ผ์ด ์ค„์–ด ์‹คํ–‰ ์†๋„๊ฐ€ ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ๋‚จ๋ฐœ ํ•  ๊ฒฝ์šฐ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

 

5. Anntation

๐Ÿ“ Annotation?
ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ, ํ•„๋“œ ๋“ฑ์˜ ์œ„์— @๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„ ์–ธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํŠน์ • ์˜๋ฏธ๋ฅผ ๋ช…์‹œํ•˜๊ฑฐ๋‚˜ ๋กœ์ง ์™ธ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. Java์—์„œ ๊ธฐ๋ณธ ์ œ๊ณตํ•˜๋Š” Annotation์œผ๋กœ๋Š” @Override, @Deprecated, @SupressWarning์ด ์กด์žฌํ•˜๋ฉฐ ๊ฐ Annotation์˜ ์˜๋ฏธ๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์ •์˜๋œ ๋ฉ”์†Œ๋“œ ๋ฐ ์ƒ์„ฑ์ž๋ฅผ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ ํ• ๋•Œ, ํ•ด๋‹น ๋ฉ”์†Œ๋“œ ํ˜น์€ ์ƒ์„ฑ์ž๋ฅผ ์ด์ œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ถ”ํ›„์— ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ์•Œ๋ ค์ค„ ๋•Œ, ๋Ÿฐํƒ€์ž„ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์‹œํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค.

๐Ÿ“ Meta Annotaion?
Annotation์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์กด์žฌํ•˜๋Š” Annotation์œผ๋กœ, @Target, @Retention, @Documented, @Inherited ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
์ˆœ์„œ๋Œ€๋กœ ์–ด๋–ค ๋ถ€๋ถ„์— ์ ์šฉ ๊ฐ€๋Šฅํ•œ์ง€, ์–ด๋–ค ์‹œ์ ์—์„œ Annotation์ด ์ˆ˜ํ–‰๋˜๋Š”์ง€, ํ•ด๋‹น Annotation์„ Java API ๋ฌธ์„œ์— ๋“ฑ๋กํ•  ๊ฒƒ์ธ์ง€, ํ•ด๋‹น Annotation์ด ์„ ์–ธ๋œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ž์‹ ํด๋ž˜์Šค์—๋„ ์ ์šฉ์‹œํ‚ฌ ๊ฒƒ์ธ์ง€๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

 


์ถ”๊ฐ€์ ์œผ๋กœ ๊ณต๋ถ€ํ•  ๋‚ด์šฉ๋“ค

๐Ÿ“š Interface, Proxy, Proxy Pattern, Spring Proxy(AOP) (Transactional)
๐Ÿ“š Annotation ๋™์ž‘ ์›๋ฆฌ์™€ Rombok ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€
๐Ÿ“š Lamda๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€
๐Ÿ“š LRU Cache์— ๋Œ€ํ•ด์„œ
๐Ÿ“š ArrayList, LinkedList ๊ตฌํ˜„์ฒด์˜ ์ฐจ์ด์  (์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๊ณต๋ถ€)


๐Ÿ’ญ ์˜ค๋Š˜ ๋ฉ˜ํ† ๋‹˜๊ป˜ ๋‘๋ฃจ๋ญ‰์‹คํ•˜๊ฒŒ ๋งํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜๋‹ค. ์ง„์งœ ์ •ํ™•ํžˆ ์งš์–ด์ฃผ์…จ๋‹ค.
๋‚ด๊ฐ€ ์ •ํ™•ํžˆ ์•Œ์ง€ ๋ชปํ•  ๋•Œ, ๋‚ด๊ฐ€ ์ •๋ฆฌ๊ฐ€ ์•ˆ๋œ ๋‚ด์šฉ๋“ค์€ ํŠนํžˆ๋‚˜ ํšก์„ค์ˆ˜์„คํ•˜๋ฉด์„œ ๋…ผ์ ์—์„œ ๋ฒ—์–ด๋‚œ ์ด์•ผ๊ธฐ๋ฅผ ํ•œ๋‹ค.
์ด๋Š” ๋ฉด์ ‘ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์—๋„ ํฐ ๋ฌธ์ œ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋งํ•˜๊ธฐ ์ „์— ์ƒ๊ฐํ•˜์ž!

'์‚ถ > F-Lab' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Week 6  (0) 2021.06.11
Week 5  (0) 2021.06.03
Week 4  (0) 2021.05.27
Week 2  (0) 2021.05.13
Week 1  (0) 2021.05.13