Skip to content

Latest commit

ย 

History

History
379 lines (256 loc) ยท 21.7 KB

File metadata and controls

379 lines (256 loc) ยท 21.7 KB

Java

Process์™€ Thread ์„ค๋ช…

Process : ์šด์˜์ฒด์ œ๋กœ ๋ถ€ํ„ฐ ์ž์›์„ ํ• ๋‹น๋ฐ›์€ ์ž‘์—…์˜ ๋‹จ์œ„๋กœ ํ”„๋กœ์„ธ์„œ๋ฅผ ํ• ๋‹น๋ฐ›์•„ ์ฃผ์†Œ๊ณต๊ฐ„, ํŒŒ์ผ, ๋ฉ”๋ชจ๋ฆฌ๋“ฑ ์ž์›์„ ํ• ๋‹น ๋ฐ›์•„ ์ž‘์—…์ด ์‹คํ–‰๋จ. ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ ๋งŒ์˜ ๊ณ ์œ  ๊ณต๊ฐ„๊ณผ ์ž์›์„ ํ• ๋‹น๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์„ธ์Šค๊ฐ„ ์ž์› ๊ณต์œ ๋“ฑ์˜ ํ†ต์‹ ์„ ์œ„ํ•ด์„œ๋Š” IPC(Inter-Process Communication)๋ฅผ ํ†ตํ•ด ์ง„ํ–‰ํ•˜์—ฌ์•ผ ํ•จ.

Thread : ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋ฐ›์€ ์ž์›์„ ์ด์šฉํ•˜๋Š” ์‹คํ–‰์˜ ๋‹จ์œ„๋กœ ํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๋™์ž‘๋˜๋Š” ์—ฌ๋Ÿฌ ์‹คํ–‰์˜ ํ๋ฆ„์„ ์–˜๊ธฐํ•˜๋ฉฐ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์ด๋‚˜ ์ž์›๋“ฑ์„ ์“ฐ๋ ˆ๋“œ๋ผ๋ฆฌ ๊ณต์œ ํ•˜๋ฉฐ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•จ.

http://ralf79.tistory.com/34

https://brunch.co.kr/@kd4/3

Process์™€ Thread์˜ ํผํฌ๋จผ์Šค ๋น„๊ต

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

Thread ์žฅ์ 
  • ์‹œ์Šคํ…œ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ํ–ฅ์ƒ
  • ์‹œ์Šคํ…œ์˜ ์ž์›์†Œ๋ชจ๊ฐ€ ์ค„์–ด๋“ฌ
  • ํ”„๋กœ๊ทธ๋žจ๊ฐ„ ์‘๋‹ต ์‹œ๊ฐ„ ๋‹จ์ถ•
  • ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹  ๋ฐฉ๋ฒ• ๋ณด๋‹ค ์Šค๋ ˆ๋“œ๊ฐ„ ํ†ต์‹ ๋ฐฉ๋ฒ•์ด ๊ฐ„๋‹จ
Thread ๋‹จ์ 
  • ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์‹œ ์ฃผ์˜ ๊นŠ๊ฒŒ ์„ค๊ณ„๊ฐ€ ํ•„์š” - ๋ฏธ๋ฌ˜ํ•œ ์‹œ๊ฐ„, ์ž˜๋ชป๋œ ๋ณ€์ˆ˜ ๊ณต์œ ๋กœ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ํ™•๋ฅ  ์ฆ๊ฐ€
  • ๊ณต์œ ๋˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ถฉ๋Œ๋กœ ์ธํ•œ ๋™๊ธฐํ™” ๋ฌธ์ œ ํ•ด๊ฒฐ ํ•„์š”
  • ํ”„๋กœ๊ทธ๋žจ ๋””๋ฒ„๊น…์ด ์–ด๋ ค์›€
  • ๋‹จ์ผ ํ”„๋กœ์„ธ์„œ ์‹œ์Šคํ…œ์—์„œ์˜ ํšจ๊ณผ ๋ฏธ๋น„

Recursive Programming์˜ ๊ฒฝํ—˜

๋ณ‘๋ ฌ์ฒ˜๋ฆฌ ์ค‘ Deadlockํ˜„์ƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ฒ•

๋‹ค์ค‘ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ์Šคํ…œ์—์„œ ํ•˜๋‚˜ ๋˜๋Š” ๊ทธ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์–ด๋–ค ํŠน์ • ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ(๊ต์ฐฉ์ƒํƒœ)

  • ํ•œ์ •๋œ ์ž์›์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์„œ๋กœ ๊ฒฝ์Ÿํ•˜๋Š” ์ƒํ™ฉ
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ์š”์ฒญ์‹œ ๊ทธ ์‹œ๊ฐ์— ํ•ด๋‹น ์ž์›์„ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ ์œ ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ
  • ๋Œ€๊ธฐ์ƒํƒœ๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰ ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ
๊ต์ฐฉ์ƒํƒœ์˜ ํŠน์ง•
  • ์ƒํ˜ธ๋ฐฐ์ œ(Mutual exclusion) : ํ•œ๋ฒˆ์— ์˜ค์ง ํ•œ ํ”„๋กœ์„ธ์Šค๋งŒ ์ž์›์„ ์‚ฌ์šฉ
  • ์ ์œ ๋Œ€๊ธฐ(Hold and wait) : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์–ด๋„ ํ•˜๋‚˜์˜ ์ž์›์„ ์ ์œ ํ•˜๋ฉด์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž์›์„ ์ถ”๊ฐ€๋กœ ์–ป๊ธฐ์œ„ํ•ด ๋Œ€๊ธฐ
  • ๋น„์„ ์ (No preemption) : ์ ์œ ๋œ ์ž์›์€ ๊ฐ•์ œ๋กœ ํ•ด์ œ๋  ์ˆ˜ ์—†๊ณ , ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž‘์—…์„ ๋งˆ์น˜๊ณ  ์ž์›์„ ์ž๋ฐœ์ ์œผ๋กœ ํ•ด์ œ
  • ์ˆœํ™˜๋Œ€๊ธฐ(Circular wait) : ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ์ง‘ํ•ฉ์—์„œ P0 ~ Pn์—์„œ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๋ฉด์„œ ์ ์œ ํ•œ ์ž์›์„ ๊ณ„์† ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ
์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•
  • ๊ต์ฐฉ์ƒํƒœ ์˜ˆ๋ฐฉ ๋ฐ ํšŒํ”ผ : ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ต์ฐฉ์ƒํƒœ๋ฅผ ์˜ˆ๋ฐฉํ•˜๊ฑฐ๋‚˜ ํšŒํ”ผํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๊ต์ฐฉ์ƒํƒœ ํƒ์ง€ ๋ฐ ํšŒ๋ณต : ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋˜๋„๋ก ํ—ˆ์šฉํ•˜๊ณ  ๋‹ค์Œ์— ํšŒ๋ณต์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•
  • ๊ต์ฐฉ ์ƒํƒœ ๋ฌด์‹œ : ๋Œ€๋ถ€๋ถ„์˜ ์‹œ์Šคํ…œ์ด ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ์ž˜ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๊ต์ฐฉ์ƒํƒœ ์˜ˆ๋ฐฉ, ํšŒํ”ผ ,ํƒ์ง€, ๋ณต๊ตฌ๋ฐฉ๋ฒ•์„ ๋ฌด์‹œ

Java8์— ์ถ”๊ฐ€๋œ ๊ฒƒ

Comparable ์‚ฌ์šฉ ๊ฒฝํ—˜

Annotatiaon

์†Œ์Šค์ฝ”๋“œ์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌ๋…์„ฑ ๋ฐ ์ฒด๊ณ„์ ์ธ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋ฐ ์šฉ์ดํ•œ ๊ธฐ๋ฒ•(์ฃผ์„)์ด๋‹ค.

์†Œ์Šค์ฝ”๋“œ์ƒ์—์„œ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์ง€๋งŒ, ํ•ด๋‹น ํƒ€๊ฒŸ์˜ ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ• ๋ฐ ์†Œ์Šค์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋‹ค.

์–ด๋…ธํ…Œ์ด์…˜์€ ์ปดํŒŒ์ผ ์‹œ๊ธฐ์— ์ฒ˜๋ฆฌ๋„ ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ž๋ฐ”์˜ ๋ฆฌํ”Œ๋ ‰์…˜์„ ๊ฑฐ์ณ์„œ ๋Ÿฐํƒ€์ž„์—์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Singleton ํŒจํ„ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๊ธฐ

Builder ํŒจํ„ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋ผ

Abstract๋ฅผ ํ™œ์šฉํ•œ ํŒจํ„ด์— ๋Œ€ํ•ด ์„ค๋ช…

JVM(JAVA) Stack, Heap ๋ฉ”๋ชจ๋ฆฌ๊ตฌ์กฐ

Stack ๋ณ€์ˆ˜๊ฐ’, ๊ธฐ๋ณธํƒ€์ž…(Primitive Type)์ธ ์ •์ˆ˜ํ˜• ๋ณ€์ˆ˜, ์‹ค์ˆ˜ํ˜• ๋ณ€์ˆ˜, ๋…ผ๋ฆฌํ˜• ๋ณ€์ˆ˜๋ฅผ ์‹ค์ œ๊ฐ’์œผ๋กœ ์ €์žฅํ•œ๋‹ค. ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋Š” ํƒ€์ž…์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์‹œ ์ปดํŒŒ์ผ๋ ๋•Œ ์ด๋ฏธ ๊ณ„์‚ฐ์ด ์ด๋ฃจ์–ด์ง. ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์‹œ์— ์ฒ˜๋ฆฌ๋˜๋Š” value(Heap๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ Objects ์ฐธ์กฐ ๊ฐ’ -refer objects, ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ์ƒ์„ฑ ๋˜๊ณ  ์‚ฌ๋ผ์ง€๋Š” ๋ณ€์ˆ˜๋“ค - short-lived values)๊ฐ€ ์ €์žฅ๋˜๋ฉฐ, ํ•ญ์ƒ LIFO(Last-In-First-Out)ํ˜•ํƒœ๋กœ ์‹คํ–‰๋œ๋‹ค. ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์ƒˆ๋กœ์šด ๋ธ”๋ก์˜ Stack๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์žกํžˆ๋ฉฐ local primitie values์™€ ๋ฉ”์†Œ๋“œ ๋‚ด์˜ refer Objects๊ฐ€ Stack ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ํ• ๋‹น๋œ๋‹ค. ๋ฉ”์†Œ๋“œ๊ฐ€ ๋๋‚ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ๋ฐ˜ํ™˜๋˜์–ด ๋น„์›Œ์ง„๋‹ค.

Heap ๊ฐ์ฒด(Objects, JRE classes)์™€ ๋ฐฐ์—ด์ด ์ƒ์„ฑ๋˜๋Š” ๊ณต๊ฐ„์ด๋ฉฐ GC(Garbage Collection)๋Š” Heap ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๋‚ด์— Objects ์ค‘ ์ฐธ์กฐ(Reference) ๊ฐ’์ด ์—†๋Š” Objects์— ๋Œ€ํ•ด์„œ ์‹คํ–‰ํ•˜์—ฌ Objects๊ฐ€ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ์–ด Heap ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์ฒญ์†Œ/๊ด€๋ฆฌ ํ•ด์ค€๋‹ค. Heap๋ฉ”๋ชจ๋ฆฌ์˜์—ญ์˜ ๋ชจ๋“  Objects์€ ํ”„๋กœ์„ธ์Šค(์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜) ๋‚ด์—์„œ ์ „์—ญ์ ์œผ๋กœ ์•ก์„ธ์Šค๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ฐธ์กฐ(Reference)๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

Example
package com.journaldev.test;

public class Memory {

	public static void main(String[] args) { // Line 1
		int i=1; // Line 2
		Object obj = new Object(); // Line 3
		Memory mem = new Memory(); // Line 4
		mem.foo(obj); // Line 5
	} // Line 9

	private void foo(Object param) { // Line 6
		String str = param.toString(); //// Line 7
		System.out.println(str);
	} // Line 8

}

https://github.com/csi111/Interview/blob/master/java/Java-Heap-Stack-Memory.png

[http://www.journaldev.com/4098/java-heap-space-vs-stack-memory] (http://www.journaldev.com/4098/java-heap-space-vs-stack-memory)

JAVA GC ๊ตฌ๋™ ์›๋ฆฌ

Java๋Š” ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ ๋‚ด์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š์œผ๋ฉฐ, GC(Garbage Collector)๊ฐ€ ์ฐธ์กฐ๊ฐ€ ์—†์–ด์ง„ ๊ฐ์ฒด(ํ•„์š”์—†์–ด์ง„ ๊ฐ์ฒด)๋ฅผ Heap๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์—์„œ ์ฐพ์•„์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜(์ง€์šฐ๋Š”) ์ž‘์—…์„ ํ•œ๋‹ค.

JVM์—์„œ GC๊ฐ€ ์ˆ˜ํ–‰๋ ๋•Œ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ˆ˜ํ–‰์„ ๋ชจ๋‘ ๋ฉˆ์ถ”๊ณ  GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜์–ด ํ”„๋กœ๊ทธ๋žจ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ผ์น˜๋Š” ๋‹จ์ ์ด ์กด์žฌ

[http://d2.naver.com/helloworld/1329] (http://d2.naver.com/helloworld/1329)

GC๋Œ€์ƒ ํŒ๋ณ„๋ฒ•

Mobile์—์„œ GC์˜ ๋‹จ์ 

GC๊ฐ€ ์ˆ˜ํ–‰๋ ๋•Œ ๋‹จ๋ง์˜ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ•œ๋ฒˆ์— ๋งŽ์€ Objects์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ์ฒ˜๋ฆฌ๊ฐ€ ๋ ๋•Œ ์•ฑ์ด ๋ฒ„๋ฒ…์ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒ

์•ˆ๋“œ๋กœ์ด๋“œ์˜ ๊ฒฝ์šฐ 3.0 ์ด์ƒ ๋ถ€ํ„ฐ concurrent ๋ฐ partial collection๋ฐฉ์‹์„ ํ†ตํ•ด ๊ฐ€๋น„์ง€์ปฌ๋ ‰์…˜์˜ ๋ฐ˜์‘์„ฑ์ด ๋†’์•„์กŒ์œผ๋ฉฐ ๋™์ž‘ ์‹œ๊ฐ„์ด 5ms ์ดํ•˜๋กœ ๋‹จ์ถ•๋˜์–ด GC๊ฐ€ ์ ์‹œ์— ๋™์ž‘๋˜๋„๋ก ๊ฐœ์„ ๋จ.

[https://source.android.com/devices/tech/dalvik/gc-debug.html] (https://source.android.com/devices/tech/dalvik/gc-debug.html)

[https://rejrecords.wordpress.com/2016/11/26/android-gc-vs-ios-ref-counting/amp/] (https://rejrecords.wordpress.com/2016/11/26/android-gc- vs-ios-ref-counting/amp/)

JAVA finalize๋ž€?

  • ์ž๋ฐ”์˜ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋Š” Garbage Collector(์ดํ•˜ GC)์— ์˜ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. finalize()๋Š” GC์— ์˜ํ•ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  • finalize()๋Š” ์‹คํ–‰๋œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†์Šต๋‹ˆ๋‹ค. ์‹คํ–‰์ด ๋  ์ˆ˜๋„ ์•ˆ ๋  ์ˆ˜๋„ ์žˆ๊ณ  ๋จธ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•„์ˆ˜์ ์ธ ๋กœ์ง์„ ํฌํ•จ์‹œ์ผœ์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  • finalize()๋Š” ๋ชจํ•˜๋Š”๋ฐ ์“ฐ๋А๋ƒ? ํ˜น์‹œ๋‚˜ ํ•˜๋Š” ๋กœ์ง์„ ๋„ฃ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋””๋น„๋ฅผ ์—ด๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ํ˜น์‹œ ์•ˆ ๋‹ซ์•˜์œผ๋ฉด ๋‹ซ๋Š” ๋กœ์ง

Reference http://iilii.egloos.com/4091133

HashMap, HashTable์„ ๊ตฌํ˜„์‹œ ์‚ฌ์šฉํ•  ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์„ค๋ช…

Hashcode์˜ return ๊ฐ’

intํ˜• ๋ฐ˜ํ™˜(-2147483648 ~ 2147483647)

Java์˜ ์ •์ˆ˜/์‹ค์ˆ˜ํ˜•์˜ ๊ฐ’ ๋ฒ”์œ„

  • boolean 1bit
  • int 32bits
  • long 64bits
  • float 32bits
  • double 64bits
  • short 16bits
  • char 16bits
  • byte 8bits

Hash์˜ ์ •์˜

OOP 5๋Œ€ ์›์น™

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

  • ์ž‘์„ฑ๋œ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ๋งŒ ๊ฐ€์ง€๋ฉฐ ํด๋ž˜์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ์„œ๋น„์Šค๋Š” ๊ทธ ํ•˜๋‚˜์˜ ์ฑ…์ž„(๋ณ€ํ™”์˜ ์ถ•: axis of change)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์ง‘์ค‘๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™
  • ์–ด๋–ค ๋ณ€ํ™”์— ์˜ํ•ด ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ์˜ค์ง ํ•˜๋‚˜๋ฟ์ด์–ด์•ผ ํ•จ์„ ์˜๋ฏธ
  • ์ฑ…์ž„์„ ์ ์ ˆํžˆ ๋ถ„๋ฐฐํ•จ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ, ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด๋ผ๋Š” ์ด์ ๊นŒ์ง€ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ์ฒด์ง€ํ–ฅ ์›๋ฆฌ์˜ ๋Œ€์ „์ œ ๊ฒฉ์ธ OCP์›๋ฆฌ๋ฟ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์›๋ฆฌ๋“ค์„ ์ ์šฉํ•˜๋Š” ๊ธฐ์ดˆ

OCP (๊ฐœ๋ฐฉํ์‡„์˜ ์›์น™: Open Close Principle)

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

LSP (๋ฆฌ์Šค์ฝ”๋ธŒ ์น˜ํ™˜์˜ ์›์น™: The Liskov Substitution Principle)

  • LSP๋ฅผ ํ•œ๋งˆ๋””๋กœ ํ•œ๋‹ค๋ฉด, โ€œ์„œ๋ธŒ ํƒ€์ž…์€ ์–ธ์ œ๋‚˜ ๊ธฐ๋ฐ˜ ํƒ€์ž…์œผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.โ€๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์„œ๋ธŒ ํƒ€์ž…์€ ์–ธ์ œ๋‚˜ ๊ธฐ๋ฐ˜ ํƒ€์ž…๊ณผ ํ˜ธํ™˜๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ฌ๋ฆฌ ๋งํ•˜๋ฉด ์„œ๋ธŒ ํƒ€์ž…์€ ๊ธฐ๋ฐ˜ ํƒ€์ž…์ด ์•ฝ์†ํ•œ ๊ทœ์•ฝ(public ์ธํ„ฐํŽ˜์ด์Šค, ๋ฌผ๋ก  ๋ฉ”์†Œ๋“œ๊ฐ€ ๋˜์ง€๋Š” ์˜ˆ์™ธ๊นŒ์ง€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.)์„ ์ง€์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์†์€ ๊ตฌํ˜„์ƒ์†(extends ๊ด€๊ณ„)์ด๋“  ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†(implements ๊ด€๊ณ„)์ด๋“  ๊ถ๊ทน์ ์œผ๋กœ๋Š” ๋‹คํ˜•์„ฑ์„ ํ†ตํ•œ ํ™•์žฅ์„ฑ ํš๋“์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. LSP์›๋ฆฌ๋„ ์—ญ์‹œ ์„œ๋ธŒ ํด๋ž˜์Šค๊ฐ€ ํ™•์žฅ์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ค€์ˆ˜ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค
  • ๋‹คํ˜•์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ทน๋Œ€ํ™” ํ•˜๋ ค๋ฉด ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ์ƒ์œ„์˜ ํด๋ž˜์Šค(์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์„ ์–ธ์€ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค๋กœ ์ƒ์„ฑ์€ ๊ตฌ์ฒด ํด๋ž˜์Šค๋กœ ๋Œ€์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ
  • ์ƒ์„ฑ ์‹œ์ ์—์„œ ๊ตฌ์ฒด ํด๋ž˜์Šค๋ฅผ ๋…ธ์ถœ์‹œํ‚ค๊ธฐ ๊บผ๋ ค์งˆ ๊ฒฝ์šฐ ์ƒ์„ฑ ๋ถ€๋ถ„์„ Abstract Factory ๋“ฑ์˜ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์œ ์—ฐ์„ฑ์„ ๋†’์ž„
  • ์ƒ์†์„ ํ†ตํ•œ ์žฌ์‚ฌ์šฉ์€ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค์™€ ์„œ๋ธŒ ํด๋ž˜์Šค ์‚ฌ์ด์— IS-A๊ด€๊ณ„๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ๋กœ๋งŒ ์ œํ•œ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—๋Š” ํ•ฉ์„ฑ(composition)์„ ์ด์šฉํ•œ ์žฌ์‚ฌ์šฉ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์†์€ ๋‹คํ˜•์„ฑ๊ณผ ๋”ฐ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹คํ˜•์„ฑ์œผ๋กœ ์ธํ•œ ํ™•์žฅ ํšจ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค๊ฐ€ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ๊ทœ์•ฝ(์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ์–ด๊ฒจ์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์ด ๊ตฌ์กฐ๋Š” ๋‹คํ˜•์„ฑ์„ ํ†ตํ•œ ํ™•์žฅ์˜ ์›๋ฆฌ์ธ OCP๋ฅผ ์ œ๊ณต

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

  • ISP์›๋ฆฌ๋Š” ํ•œ ํด๋ž˜์Šค๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค๋Š” ์›๋ฆฌ
  • ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์ข…์†๋  ๋•Œ์—๋Š” ๊ฐ€๋Šฅํ•œ ์ตœ์†Œํ•œ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ์„ ์‚ฌ์šฉ

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

  • ์˜์กด ๊ด€๊ณ„์˜ ์—ญ์ „ Dependency Inversion ์ด๋ž€ ๊ตฌ์กฐ์  ๋””์ž์ธ์—์„œ ๋ฐœ์ƒํ•˜๋˜ ํ•˜์œ„ ๋ ˆ๋ฒจ ๋ชจ๋“ˆ์˜ ๋ณ€๊ฒฝ์ด ์ƒ์œ„ ๋ ˆ๋ฒจ ๋ชจ๋“ˆ์˜ ๋ณ€๊ฒฝ์„ ์š”๊ตฌํ•˜๋Š” ์œ„๊ณ„๊ด€๊ณ„๋ฅผ ๋Š๋Š” ์˜๋ฏธ์˜์—ญ์ „
  • ์‹ค์ œ ์‚ฌ์šฉ ๊ด€๊ณ„๋Š” ๋ฐ”๋€Œ์ง€ ์•Š์œผ๋ฉฐ, ์ถ”์ƒ์„ ๋งค๊ฐœ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์Œ์œผ๋กœ์จ ๊ด€๊ณ„๋ฅผ ์ตœ๋Œ€ํ•œ ๋А์Šจํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์›์น™

Reference http://www.nextree.co.kr/p6960/

Java equals

  • equals(Object obj) ๋Š” ๊ฐ์ฒด์˜ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์•„๋‹Œ ๊ฐ์ฒด์˜ ๋‚ด์šฉ์ด ๊ฐ™์€ ์ง€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๋ฉ”์˜๋“œ
  • equals๋Š” ์–ด๋–ค ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ธ์ž๋กœ ๋ฐ›์€ ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ์™€ ๊ทธ ๋‚ด์šฉ์ด ์ผ์น˜ํ•˜๋Š” ์ง€๋ฅผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. == ๋ถ€ํ˜ธ๋กœ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์€ ๋ ˆํผ๋Ÿฐ์Šค, ์ฆ‰ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ๊ฐ™์€ ๊ฐ์ฒด์ธ์ง€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๋ฐ˜๋ฉด, equals๋Š” ๊ทธ ๋‚ด์šฉ์„ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • ์ถ”์ด์„ฑ: ์–ด๋–ค x,y,z์— ๋Œ€ํ•ด์„œ๋„ x.equals(y)์™€ y.equals(z)๊ฐ€ true๋ฉด x.equals(z)๋„ true๋ฅผ ๋ฆฌํ„ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ผ๊ด€์„ฑ: x,y์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์ด์ƒ x.equals(y)๋Š” ํ•ญ์ƒ ๊ฐ™์€ ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์•ผ ํ•œ๋‹ค.
  • ๋Œ€์นญ์„ฑ. ์–ด๋– ํ•œ x,y์— ๋Œ€ํ•ด์„œ๋„ x.equals(y) ์™€ y.equals(x)๋Š” ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์–ด๋–ค ๊ฐ์ฒด x์— ๋Œ€ํ•ด์„œ๋„ x.equals(x)๋Š” ๋ฐ˜๋“œ์‹œ true๋ฅผ ๋ฆฌํ„ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Reference http://egloos.zum.com/iilii/v/3999066

Java hashcode

  • hashCode๋Š” hash ๊ฐ’์„ ๋ฆฌํ„ด
  • ๊ฐ™์€ ์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹คํ–‰๋œ๋‹ค๋ฉด, equals์—์„œ ๋น„๊ตํ•˜๋Š” ๋ฉค๋ฒ„๋ณ€์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๊ฐ™์€ int ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. equals์—์„œ ์“ฐ๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ hashCode๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ๋„ ๋˜‘๊ฐ™์ด ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ equals์˜ ๊ตฌํ˜„๊ณผ hashCode์˜ ๊ตฌํ˜„์€ ๋™๋–จ์–ด์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • a.equals(b)๊ฐ€ true์ผ ๊ฒฝ์šฐ a์˜ hashCode์™€ b์˜ hashCode๋Š” ๊ฐ™์€ ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • a.equals(b)๊ฐ€ false์ผ ๊ฒฝ์šฐ a์˜ hashCode์™€ b์˜ hashCode๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฆฌํ„ดํ•  ํ•„์š”๋Š” ์—†์ง€๋งŒ, ๊ฐ€๋Šฅํ•˜๋ฉด ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.

Java equals๋ฅผ ์ƒ์†๋ฐ›์„์‹œ, ๊ฐ™์ด ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” Method๋Š”?

hashcode ๊ฐ™์€ ์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹คํ–‰๋œ๋‹ค๋ฉด, equals์—์„œ ๋น„๊ตํ•˜๋Š” ๋ฉค๋ฒ„๋ณ€์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๊ฐ™์€ int ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. equals์—์„œ ์“ฐ๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ hashCode๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ๋„ ๋˜‘๊ฐ™์ด ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

public class Person {
    private String name;
    public Person(String name) {
        super();
        this.name = name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public int hashCode() {
        final int PRIME = 31;
        int result = 1;
        result = PRIME * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        final Person other = (Person) obj;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }

Reference http://iilii.egloos.com/4000476

String์˜ ์ดํ•ด

๋ฆฌํ„ฐ๋Ÿด๊ณผ new String์„ ์–ธ์˜ ์ฐจ์ด

Reference https://medium.com/@joongwon/string-%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B3%A0%EC%B0%B0-57af94cbb6bc

ENUM์— ๋Œ€ํ•ด ์„ค๋ช…

๊ด€๋ จ์ด ์žˆ๋Š” ์ƒ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ”์—์„œ๋Š” final๋กœ String๊ณผ ๊ฐ™์€ ๋ฌธ์ž์—ด์ด๋‚˜ ์ˆซ์ž๋“ค์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์˜ ๊ฐ’์„ ๊ณ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ณ ์ •๋œ ๊ฐ’์„ ์ƒ์ˆ˜๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์˜์–ด๋กœ๋Š” constant์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ ์ƒ์ˆ˜๋งŒ์œผ๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์œผ๋ฉด ๋ฐ˜๋“œ์‹œ class๋กœ ์„ ์–ธํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ class๋กœ ์„ ์–ธ๋œ ๋ถ€๋ถ„์— enum์ด๋ผ๊ณ  ์„ ์–ธํ•˜๋ฉด ์ด ๊ฐ์ฒด๋Š” ์ƒ์ˆ˜์˜ ์ง‘ํ•ฉ์ด๋‹ค. ๋ผ๋Š” ๊ฒƒ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. enum์€ enumeration์ด๋ผ๋Š” ์…ˆ, ๊ณ„์‚ฐ, ์—ด๊ฑฐ, ๋ชฉ๋ก์ด๋ผ๋Š” ์˜์–ด๋‹จ์–ด์˜ ์•ž๋ถ€๋ถ„๋งŒ ๋”ฐ์„œ ๋งŒ๋“  ์˜ˆ์•ฝ์–ด์ž…๋‹ˆ๋‹ค.

Java์—์„œ enum ํƒ€์ž…์€ ์—ด๊ฑฐํ˜•์„ ์˜๋ฏธํ•˜๋Š” ํŠน๋ณ„ํ•œ ํ˜•ํƒœ์˜ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜ ํด๋ž˜์Šค์™€ ๊ฐ™์ด ์ƒ์„ฑ์ž(Constructor)๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์ง€ ์•Š์•„๋„ Java๊ฐ€ default์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ธด ํ•˜์ง€๋งŒ, enum์˜ ๊ฒฝ์šฐ์—๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค๋“ค๊ณผ ๋‹ฌ๋ฆฌ ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ์„ฑ์ž์˜ ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ private๋กœ ์ง€์ • ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.. enum ํƒ€์ž…์˜ ์ƒ์„ฑ์ž๋ฅผ ์ผ๋ฐ˜์ ์ธ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์™€ ๊ฐ™์ด public์œผ๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ protected๋กœ ํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

enumํƒ€์ž…์€ ๊ณ ์ •๋œ ์ƒ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ์จ, ๋Ÿฐํƒ€์ž„(run-time)์ด ์•„๋‹Œ ์ปดํŒŒ์ผํƒ€์ž„(compile-time)์— ๋ชจ๋“  ๊ฐ’์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋‚˜ ํด๋ž˜์Šค์—์„œ enum ํƒ€์ž…์— ์ ‘๊ทผํ•ด์„œ ๋™์ ์œผ๋กœ ์–ด๋–ค ๊ฐ’์„ ์ •ํ•ด์ค„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปดํŒŒ์ผ ์‹œ์— ํƒ€์ž…์•ˆ์ •์„ฑ์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค(ํ•ด๋‹น enumํด๋ž˜์Šค ๋‚ด์—์„œ ๊นŒ์ง€๋„ newํ‚ค์›Œ๋“œ๋กœ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ newInstance(), clone()๋“ฑ์˜ ๋ฉ”์†Œ๋“œ๋„ ์‚ฌ์šฉ ๋ถˆ๊ฐ€). ์ด ๋•Œ๋ฌธ์— ์ƒ์„ฑ์ž์˜ ์ ‘๊ทผ์ œ์–ด์ž๋ฅผ private์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ƒ์„ฑ์ž๊ฐ€ ์—†์œผ๋ฏ€๋กœ enumํƒ€์ž…์€ ์‹ค์ œ์ ์œผ๋กœ final๊ณผ ๋‹ค๋ฆ„์ด ์—†์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ enum์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๊ณ  ์ƒ์†์„ ๋ฐ›์„ ์ˆ˜๋„ ์—†์œผ๋ฏ€๋กœ, ํด๋ผ์ด์–ธํŠธ์˜ ๊ด€์ ์—์„œ ๋ณด๋ฉด ์ธ์Šคํ„ด์Šค๋Š” ์—†์ง€๋งŒ ์„ ์–ธ๋œ enum ์ƒ์ˆ˜๋Š” ์กด์žฌํ•˜๋Š” ์…ˆ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ enumํƒ€์ž…์€ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์„ ์ œ์–ดํ•˜๋ฉฐ, ์‹ฑ๊ธ€ํ†ค(singleton) ์„ ์ผ๋ฐ˜ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ ๋•Œ๋ฌธ์—, enumํƒ€์ž…์€ ์‹ฑ๊ธ€ํ†ค์„ ๊ตฌํ˜„ํ•˜๋Š” ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

Reference http://www.nextree.co.kr/p11686/

ENUM๊ณผ static ์ƒ์ˆ˜๋ฅผ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์˜ ์ฐจ์ด

์ฝ”๋“œ๊ฐ€ ๋‹จ์ˆœํ•ด์ง€๋ฉฐ ๊ฐ€๋…์„ฑ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ๊ณผ ์ƒ์†์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํ‚ค์›Œ๋“œ enum์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„์˜ ์˜๋„๊ฐ€ ์—ด๊ฑฐ์ž„์„ ๋ถ„๋ช…ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ์†์ด๋ž€

์ƒ์†(Inheritance)์ด๋ž€ ๋ฌผ๋ ค์ค€๋‹ค๋Š” ์˜๋ฏธ๋‹ค. ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ์žˆ์„ ๋•Œ ๊ทธ ๊ฐ์ฒด์˜ ํ•„๋“œ(๋ณ€์ˆ˜)์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ๋ฌผ๋ ค ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ƒ์†์ด๋ผ๊ณ  ํ•œ๋‹ค.

Object์˜ ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ

  • hashcode()
  • equals(Object obj)
  • clone()
  • toString()
  • finalize()

Generic์ด๋ž€

์ œ๋„ค๋ฆญ(Generic)์€ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์™ธ๋ถ€์—์„œ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋ฒ•์„ ์˜๋ฏธํ•œ๋‹ค. ์‰ฝ๊ฒŒ๋งํ•ด์„œ ArrayList(์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์‰ฌ์šด ์„ค๋ช…์„ ์œ„ํ•ด ๋Œ€ํ‘œ์ ์ธ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค์ธ ArrayList๋ฅผ ๊ฐ€์ง€๊ณ  ์„ค๋ช… ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.) ๊ฐ€ ๋‹ค๋ฃฐ ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ๋ช…์‹œํ•ด์คŒ์œผ๋กœ์จ ํ˜•๋ณ€ํ™˜์„ ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰ ArrlayList๊ฐ€ ์‚ฌ์šฉํ•  ๊ฐ์ฒด์˜ ํƒ€์ž…์ด๋ž€ ์ด์•ผ๊ธฐ ์ž…๋‹ˆ๋‹ค

  • ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๊ฒ€์ถœ๋œ๋‹ค
  • ์ค‘๋ณต์˜ ์ œ๊ฑฐ์™€ ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ๋™์‹œ์— ์ถ”๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค
  • ์ œ๋„ค๋ฆญ์œผ๋กœ ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ํŠน์ • ํด๋ž˜์Šค์˜ ์ž์‹์œผ๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค

Reference

[http://lng1982.tistory.com/240] (http://lng1982.tistory.com/240) [https://opentutorials.org/module/516/6237] (https://opentutorials.org/module/516/6237)

Java Collection ์ค‘ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์— ์ ํ•ฉํ•œ Class์— ๋Œ€ํ•ด ์„ค๋ช…

List, Set, Map์˜ ์ฐจ์ด

List

List์˜ ํŠน์ง•

  • ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” Collection
  • Data๋ฅผ ์ค‘๋ณตํ•ด์„œ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Œ

Stack

  • Data์˜ ์‚ฝ์ž…/์ถ”์ถœ์ด ๊ฐ€๋Šฅํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ LIFO(Last In First Out ํ›„์ž… ์„ ์ถœ) ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ์Œ
  • push() : data ์‚ฝ์ž…์— ์‚ฌ์šฉ
  • pop() : data ์ถ”์ถœ์— ์‚ฌ์šฉ
  • peek() : data ์ถ”์ถœ์‹œ ์‚ญ์ œ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  data๋งŒ ๊ฐ€์ ธ์˜ค๋„๋ก ์‚ฌ์šฉ
  • search() : data๋ฅผ ๊ฒ€์ƒ‰ํ• ๋•Œ ์‚ฌ์šฉ

Vector

  • ์ž๋™์œผ๋กœ ๋™๊ธฐํ™” ๋ณด์žฅ
  • ArrayList์— ๋™๊ธฐํ™”๊ฐ€ ๋ณด์žฅ๋˜๋„๋ก ์ตœ์ ํ™”๋œ ํด๋ž˜์Šค
  • Java 5.0 ์ดํ›„ AutoBoxing/AutoUnBoxing์ง€์›
    • AutoBoxing์ด๋ž€ primitiveํƒ€์ž…์„ Wrapperํด๋ž˜์Šคํ˜•์˜ ๊ฐ์ฒด๋กœ ์ž๋™์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ

ArrayList

  • ๋™๊ธฐํ™”๋ฅผ ๋ณด์žฅํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค
  • ๋ฐฐ์—ด์— ๋™์  ๋ฉ”๋ชจ๋ฆฌ ์ฆ๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค
Set

Set์˜ ํŠน์ง•

  • ์ง‘ํ•ฉ์ ์ธ ๊ฐœ๋…์˜ Collection
  • ์ˆœ์„œ์˜ ์˜๋ฏธ๊ฐ€ ์—†์Œ
  • Data๋ฅผ ์ค‘๋ณตํ•ด์„œ ํฌํ•จํ•  ์ˆ˜ ์—†์Œ
Map

Map์˜ ํŠน์ง•

  • List์™€ Set์ด ์ˆœ์„œ๋‚˜ ์ง‘ํ•ฉ์˜ ๊ฐœ๋…์ด๋ผ๋ฉด Map์€ ๊ฒ€์ƒ‰์˜ ๊ฐœ๋…์ด ์ถ”๊ฐ€๋œ ์ธํ„ฐํŽ˜์ด์Šค
  • ๋ฐ์ดํ„ฐ ์‚ฝ์ž…์‹œ Key,Value ํ˜•ํƒœ๋กœ ์‚ฝ์ž…๋˜๋ฉฐ Key๋ฅผ ์ด์šฉํ•˜์—ฌ Value๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ

HashMap๊ณผ HashTable

๊ณตํ†ต์ 
  • ๋‚ด๋ถ€์ ์œผ๋กœ ๋ชจ๋‘ Hash๊ธฐ๋ฒ•์„ ์‚ฌ์šฉ
  • Java Collection Package์˜ Map์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„
  • Key,Value๋ฐฉ์‹์„ ์ด์šฉํ•˜์—ฌ Data ๊ด€๋ฆฌ
์ฐจ์ด์ 
  • Hashtable์€ ๋™๊ธฐํ™”๊ฐ€ ๋ณด์žฅ๋œ๋‹ค.
  • HashMap์€ ๋™๊ธฐํ™”๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • HashMap์€ ์ €์žฅ์š”์†Œ์˜ ์ˆœํšŒ๋ฅผ ์œ„ํ•ด Fail-Fast Iterator๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ HasTable์€ Enumeration์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Singleton์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ˆ„์ˆ˜ ๋ฐœ์ƒ์ƒํ™ฉ

Singleton์„ ๊นจ๋Š” ๋ฐฉ๋ฒ•์€?

์“ฐ๋ ˆ๋“œ์—์„œ ๊ณต์œ ํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋Š”?

์“ฐ๋ ˆ๋“œ๋Š” ์™œ ๊ฐ์ž ์Šคํƒ์˜์—ญ์„ ๊ฐ–๋Š”๊ฐ€

์ต๋ช…ํด๋ž˜์Šค์—์„œ static์ ‘๊ทผ ๊ฐ€๋Šฅ์—ฌ๋ถ€

static๋ณ€์ˆ˜ ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ์˜์—ญ

ArrayList์™€ LinkedList์ฐจ์ด

ArrayList๊ฐ€ ํ•œ๋ฒˆ์— ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š”?

TreeSet๊ณผ HashSet์˜ ์ฐจ์ด

Hashmap์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

Hashmap์—์„œ ์ •๋ ฌ๋œ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ณ ์‹ถ์€ ๊ฒฝ์šฐ

Primitiveํƒ€์ž…์—์„œ read write๋Š” atomicํ• ๊นŒ

Tree์— ๋Œ€ํ•ด์„œ ์„ค๋ช…

Tree์—์„œ balance์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ์œ„ํ•ด์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์ด ์‹œ๊ฐ„๋ณต์žก๋„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”๊ฐ€

Volatile ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•ด ์„ค๋ช…

JIT ์ปดํŒŒ์ผ๋Ÿฌ