[Java] Enum์€ ์™œ ์•ˆ์ „ํ•˜๊ณ  ๋น ๋ฅผ๊นŒ?
ยท
Java
Enum์ด๋ž€์„œ๋กœ ์—ฐ๊ด€๋œ ๊ณ ์ •๋œ ์ƒ์ˆ˜ ์ง‘ํ•ฉ์„ ํ•˜๋‚˜์˜ ํƒ€์ž…์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.๋‹จ์ˆœํžˆ ์ƒ์ˆ˜๋ฅผ ๋‚˜์—ดํ•˜๋Š” ๋ฌธ๋ฒ•์ด ์•„๋‹ˆ๋ผ, ์ปดํŒŒ์ผ ์‹œ์ ์— ํด๋ž˜์Šค ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜์–ด ๋™์ž‘ํ•˜๋Š” ํŠน์ˆ˜ํ•œ ํด๋ž˜์Šค๋‹ค. Enum Class ๊ธฐ๋ณธ ๊ตฌ์กฐ์™€ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผpublic enum Example { ONE, TWO, THREE}์ด ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ๋˜๋ฉด, ๊ฐœ๋…์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ํด๋ž˜์Šค ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.public final class Example extends Enum { public static final Example ONE = new Example("ONE", 0); public static final Example TWO = new Example("TWO", 1); public static final E..
[Java] ์–•์€ ๋ณต์‚ฌ์™€ ๊นŠ์€ ๋ณต์‚ฌ์˜ ์ฐจ์ด์ 
ยท
Java
์–•์€ ๋ณต์‚ฌ (Shallow Copy)๊ฐ์ฒด์˜ ์ฐธ์กฐ๋งŒ ๋ณต์‚ฌ๊ฐ์ฒด๋ฅผ ์–•์€ ๋ณต์‚ฌํ•˜๋ฉด ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ ๋‚ด๋ถ€๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋œ๋‹ค.int[] a = {1, 2, 3};int[] b = a; // ์ฐธ์กฐ ๋ณต์‚ฌ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ:a → Address Ab → Address A๊นŠ์€ ๋ณต์‚ฌ (Deep Copy)๋‚ด๋ถ€ ๊ฐ’๊นŒ์ง€ ๋ชจ๋‘ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์›๋ณธ๊ณผ ์™„์ „ํžˆ ๋…๋ฆฝ๋œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ณต์‚ฌํ•œ๋‹ค.int[] a = {1, 2, 3};int[] b = Arrays.copyOf(a, a.length); // ๋‚ด๋ถ€ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ ๊ฐ’ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ ๋ฐฐ์—ด ์ƒ์„ฑ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ:a → Address Ab → Address B (์ƒˆ ๊ฐ์ฒด) ์˜ˆ์ œpublic class User { private String name; private String age;}Us..
[Java] ๋ถˆ๋ณ€ ๊ฐ์ฒด(Immutable Object)์™€ final
ยท
Java
๋ถˆ๋ณ€ ๊ฐ์ฒด๋ž€?๋ถˆ๋ณ€ ๊ฐ์ฒด(immutable object)๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ์ดํ›„ ๋‚ด๋ถ€ ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.์ž๋ฐ”์—์„œ ๋Œ€ํ‘œ์ ์ธ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ๋Š” String์ด ์žˆ๋‹ค. String์€ ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ฐจ๋‹จํ•ด์„œ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค. ๋ฌธ์ž์—ด์„ ‘์ˆ˜์ •’ํ•˜๋Š” ๋ชจ๋“  ์—ฐ์‚ฐ์€ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. String์€ ์–ด๋–ป๊ฒŒ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ• ๊นŒ?1๏ธโƒฃ ๋‚ด๋ถ€ ํ•„๋“œ์— final์ด ๋ถ™๋Š”๋‹ค.private final byte[] value;์—ฌ๊ธฐ์„œ ํ•„๋“œ์— private final์ด ๋ถ™์œผ๋ฉด, ์™ธ๋ถ€์—์„œ ์ง์ ‘ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์ƒ์„ฑ ์ดํ›„ ๋‹ค๋ฅธ ๋ฐฐ์—ด๋กœ ์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด์ด ๋ฐ”๋€” ์ˆ˜๊ฐ€ ์—†๋‹ค. 2๏ธโƒฃ ๋‚ด๋ถ€ ๋ฐฐ์—ด์„ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค.String์—๋Š” ๋‚ด๋ถ€ ๋ฐฐ์—ด์„ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ..
[Java] ์ƒ์† vs ์ปดํฌ์ง€์…˜, ์ธํ„ฐํŽ˜์ด์Šค vs ์ถ”์ƒ ํด๋ž˜์Šค ๋น„๊ต ๋ฐ OOP ์„ค๊ณ„ ๊ธฐ์ค€ ์ด์ •๋ฆฌ
ยท
Java
๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์˜ ํ•ต์‹ฌ์ธ ์ƒ์†๊ณผ ์ธํ„ฐํŽ˜์ด์Šค, ์ถ”์ƒํ™” ํด๋ž˜์Šค๋Š” ์„ค๊ณ„ ๋ฐฉํ–ฅ์„ ๊ฒฐ์ •ํ•  ๋•Œ ์ž์ฃผ ๋งˆ์ฃผํ•˜๊ฒŒ ๋˜๋Š” ์„ ํƒ์ง€๋‹ค.์šฐ๋ฆฌ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๋กœ 2๊ฐ€์ง€ ๊ฐˆ๋ฆผ๊ธธ์—์„œ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋œ๋‹ค.์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋•Œ, ์ด๋ฅผ extends๋กœ ์ƒ์†๋ฐ›์•„์„œ ํ•ด๊ฒฐํ• ์ง€, ์•„๋‹ˆ๋ฉด ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋‚ด๋ถ€์— ํฌํ•จ(composition)์‹œ์ผœ์„œ ์œ„์ž„ํ• ์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค.์—ฌ๋Ÿฌ ๊ตฌํ˜„์ฒด๊ฐ€ ๊ณตํ†ต๋œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ ธ์•ผ ํ•  ๋•Œ, ๊ทธ ๊ธฐ๋Šฅ์„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ–‰๋™ ๊ทœ์•ฝ๋งŒ ์ •์˜ํ• ์ง€, ์•„๋‹ˆ๋ฉด ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ๊ณตํ†ต๋œ ๊ธฐ๋ณธ ๋กœ์ง๊ณผ ์ƒํƒœ๊นŒ์ง€ ํ•จ๊ป˜ ์ œ๊ณตํ• ์ง€ ํŒ๋‹จํ•ด์•ผ ํ•œ๋‹ค.์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ์„ค๊ณ„๋ฅผ ํ•ด์•ผ๋ ๊นŒ? ์ด๋ฅผ ์œ„ํ•ด์„  ์ƒ์†, ์ธํ„ฐํŽ˜์ด์Šค, ์ถ”์ƒํ™” ํด๋ž˜์Šค ๊ฐœ๋…์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์–ด๋–ค ์„ค๊ณ„๊ฐ€ ๋” ์œ ์—ฐํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹์€ ์ฝ”๋“œ..
[Java] Garbage Collection ๋™์ž‘ ์›๋ฆฌ (2/2)
ยท
Java
์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ Garbage Collection ์ด๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ๊ธฐ๋ณธ ๋™์ž‘ ์›๋ฆฌ์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.์ด๋ฒˆ์—๋Š” GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž GC ์•Œ๊ณ ๋ฆฌ์ฆ˜GC๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด JVM์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ๋ชจ๋‘ ๋ฉˆ์ถ˜๋‹ค๊ณ  ํ–ˆ๋‹ค. ์ด๋Š” stop-the-world ๋ผ๊ณ  ํ•˜๋ฉฐ GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์“ฐ๋ ˆ๋“œ๋Š” ๋ชจ๋‘ ์ž‘์—…์„ ๋ฉˆ์ถ”๊ณ  GC ์ž‘์—…์ด ์™„๋ฃŒํ•œ ์ดํ›„์— ์ค‘๋‹จํ–ˆ๋˜ ์ž‘์—…์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด stop-the-world ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”(GC ์ตœ์ ํ™”) ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. GC ๋ฐฉ์‹์€ JDK 7์„ ๊ธฐ์ค€์œผ๋กœ 5๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋‹ค. Serial GCSerial GC๋Š” ์„œ๋ฒ„์˜ CPU ์ฝ”์–ด๊ฐ€ 1๊ฐœ์ผ ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“  ๋ฐฉ์‹์ด๋ฉฐ, 1๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๋กœ GC๊ฐ€ ์ˆ˜ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— stop-th..
[Java] Garbage Collection ๋™์ž‘ ์›๋ฆฌ (1/2)
ยท
Java
Grabage Collection์ด๋ž€?Java๋Š” new๋กœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์ง€๋งŒ, ์ผ์ผํžˆ free()๋ฅผ ํ•ด์ฃผ์ง„ ์•Š๋Š”๋‹ค. ์ด๋•Œ JVM์ด ์ž๋™์œผ๋กœ ํ•„์š” ์—†๋Š” ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•ด์ฃผ๋Š” ์—ญํ• ์ด ๋ฐ”๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection, ์ดํ•˜ GC)์ด๋‹ค.ํ•˜์ง€๋งŒ ๋‹จ์ˆœํ•œ ์‚ญ์ œ๊ฐ€ ์•„๋‹Œ ๊ฝค ๋ณต์žกํ•˜๊ณ  ์ตœ์ ํ™”๋œ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋˜๋Š”๋ฐ, GC๊ฐ€ ์‹คํ–‰๋˜๋ฉด JVM์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ๋ชจ๋‘ ๋ฉˆ์ถ˜๋‹ค. ์ด๋ฅผ stop-the-world ๋ผ๊ณ  ํ•˜๋Š”๋ฐ GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์“ฐ๋ ˆ๋“œ๋Š” ๋ชจ๋‘ ์ž‘์—…์„ ๋ฉˆ์ถ”๊ณ  GC ์ž‘์—…์ด ์™„๋ฃŒํ•œ ์ดํ›„์— ์ค‘๋‹จํ–ˆ๋˜ ์ž‘์—…์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ๋‹ค. ์ฆ‰, GC ํŠœ๋‹์ด๋ž€ ์ด stop-the-world ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๊ฒƒ์ด๋‹ค. GC๋Š” ์–ธ์ œ, ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ• ๊นŒ? GC ์„ค๊ณ„์˜ ํ•ต์‹ฌ ๊ฐ€์„ค์„ ๋จผ์ € ์•Œ์•„๋ณด์ž Weak..
[Java] JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์™€ ์ปดํŒŒ์ผ ๊ณผ์ •
ยท
Java
Java๋Š” ํ•œ ๋ฒˆ ์ž‘์„ฑํ•˜๋ฉด ์–ด๋””์„œ๋“  ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ WORA(Write Once, Run Anywhere) ์–ธ์–ด๋‹ค.์ด ์ฒ ํ•™์˜ ํ•ต์‹ฌ์—๋Š” JVM(Java Virtual Machine)์ด ์žˆ๋‹ค. JVM์ด ์–ด๋–ป๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š”์ง€ ์•Œ๋ฉด,GC ๋™์ž‘ ์›๋ฆฌ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์›์ธJIT ์ตœ์ ํ™”OutOfMemoryError๊ฐ™์€ ๋ฌธ์ œ๋“ค์„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.์ง€๊ธˆ๋ถ€ํ„ฐ JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ์ดํ•ดํ•˜๊ณ , ์ด ๊ตฌ์กฐ ์œ„์—์„œ Java๊ฐ€ ์–ด๋–ป๊ฒŒ ์ปดํŒŒ์ผ๋˜๊ณ  ์‹คํ–‰๋˜๋Š”์ง€ ๊ณผ์ •์„ ์•Œ์•„๋ณด์ž JVM์ด๋ž€?์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ๊ธฐ๊ณ„์–ด๋„ ์•„๋‹ˆ๊ณ , OS๊ฐ€ ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์—†๊ณ , CPU๊ฐ€ ๋ฐ”๋กœ ์ดํ•ดํ•  ์ˆ˜๋„ ์—†๋‹ค.๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Java๋Š” ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค. ์ด๋Š” ๋ชจ๋‘ JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์™€ ์ปดํŒŒ์ผ ๊ณผ์ •์— ์ˆจ์–ด ์žˆ๋‹ค.JVM์€ ์ž๋ฐ”..
[Java] ==์™€ equals()์˜ ์ฐจ์ด์  (feat. String Pool)
ยท
Java
Java์—์„œ String์€ ๊ฐ์ฒด์ด๋‹ค. String์€ ๊ฐœ๋ฐœ์—์„œ ์ž์ฃผ ์“ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ํŠน๋ณ„ํžˆ ์ตœ์ ํ™”๋œ ์˜ˆ์™ธ์  ์กด์žฌ์ด๋‹ค.๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ๊ฐ์ฒด๊ฐ€ ๋™์ผํ•œ์ง€ ๋น„๊ต๋ฅผ ์œ„ํ•ด์„  equals()๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ๋œ๋‹ค๊ณ  ์ด๋ฏธ ๋‹ค ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŠน์ • ์ƒํ™ฉ์—์„œ๋Š” ==๊ฐ€ true๊ฐ€ ๋˜๊ณ , ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™์€ ๋ฌธ์ž์—ด์ธ๋ฐ false๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค. ์˜ค๋Š˜์€ ์™œ ๊ฐ™์€ ๋ฌธ์ž์—ด์ธ๋ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ค๋Š”์ง€, String Pool์ด ์‹ค์ œ๋กœ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€, ์–ธ์ œ == ๋น„๊ต๊ฐ€ ์œ„ํ—˜ํ•ด์ง€๋Š”์ง€์— ๋Œ€ํ•œ ๋‚ด๋ถ€ ๊ณผ์ •์„ ๊นŠ์ด ๋‹ค๋ค„๋ณผ ์˜ˆ์ •์ด๋‹ค. ๋จผ์ € ==์™€ equals์˜ ์ •์˜๋ถ€ํ„ฐ ์•Œ์•„๋ณด์ž ==์™€ equals()๋Š” ๋ญ๊ฐ€ ๋‹ค๋ฅธ๊ฐ€?== ์—ฐ์‚ฐ์ž: ๋‘ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š”์ง€ ๋น„๊ตํ•œ๋‹ค. (๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ ์ฃผ์†Œ๊ฐ’)equals() ๋ฉ”์„œ๋“œ:..