๐Ÿง Programming/Java

1) ์˜ต์…”๋„ (Optional) (1) ๊ฐœ์š” Optional is primarily intended for use as a method return type where there is a clear need to represent "no result" and where using null is likely to cause errors. A variable whose type is Optional should never itself be null. it should always point to an Optional instance. ์œ„์˜ ๋‚ด์šฉ์€ JDK 8 API Document์— ์ฃผ์„์œผ๋กœ ์ ํ˜€์žˆ๋Š” ๋ถ€๋ถ„ ์ค‘ ์ผ๋ถ€๋ฅผ ๋ฐœ์ทŒํ•œ ๊ฒƒ์œผ๋กœ, ์˜์—ญํ•˜์ž๋ฉด Java Optional ํด๋ž˜์Šค๋Š” Java 8์—์„œ ์ถ”๊ฐ€๋œ ํด๋ž˜์Šค๋กœ ..
1) IntelliJ ์ธ์ฝ”๋”ฉ ์„ค์ • IntelliJ๋กœ ๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋ฉด ๊ฐ€๋” ๊ฐ€๋‹ค ํ•œ๊ธ€์ด ๊นจ์ง€๋Š” ๊ฒฝ์šฐ๋ฅผ ์ข…์ข… ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฐ ๊ฒฝ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ดˆ๊ธฐ์— ์ธ์ฝ”๋”ฉ ์„ค์ •์„ ๋จผ์ € ์ ์šฉํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋„๋ก ํ•˜์ž! ๊ทธ๋Ÿฐ๋ฐ, ๋Œ€๋ถ€๋ถ„ UTF-8 ์ธ์ฝ”๋”ฉ์„ ์“ธํ…๋ฐ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ชจ๋‘ UTF-8๋กœ ์„ค์ •ํ•ด์„œ ๋ฐฐํฌํ–ˆ์œผ๋ฉด ์ข‹์•˜์„ํ…๋ฐ ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค. (1) IntelliJ VM Option ์„ค์ • IntelliJ๊ฐ€ ์„ค์น˜๋œ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•œ ๋‹ค์Œ, bin ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์˜ "idea64.exe.vmoptions" ํŒŒ์ผ์„ ๋ฉ”๋ชจ์žฅ์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค. ์ฐธ๊ณ ๋กœ .vmoptions ํŒŒ์ผ์€ ๋‘ ๊ฐœ๊ฐ€ ์กด์žฌํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ ๋ณธ์ธ์ด ์‚ฌ์šฉ์ค‘์ธ OS์˜ bit์— ๋งž๋Š” ํŒŒ์ผ์„ ๋ฉ”๋ชจ์žฅ์œผ๋กœ ์—ด์ž! ๊ทธ ๋‹ค์Œ, ๋ฉ”๋ชจ์žฅ ๋งจ ์•„๋ž˜์— "-Dfile.encoding=UTF-8" ๋‚ด์šฉ์„ ์ถ”..
1) ๋ณ€์„ฑ (Variance) - ๊ณต๋ณ€์„ฑ (Covariance), ๋ฐ˜๊ณต๋ณ€์„ฑ (Contravariance), ๋ฌด๊ณต๋ณ€์„ฑ (InVariance) ์ œ๋„ค๋ฆญ์˜ ์™€์ผ๋“œ์นด๋“œ๋ฅผ ๋ฐฐ์šฐ๊ธฐ ์ „์—, ์•Œ์•„์•ผ ํ•  ๊ฐœ๋…์ด ์žˆ๋Š”๋ฐ ๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ ๊ณต๋ณ€์„ฑ, ๋ฐ˜๊ณต๋ณ€์„ฑ, ๋ฌด๊ณต๋ณ€์„ฑ ํ•ฉ์ณ์„œ ๋ณ€์„ฑ์ด๋ผ๋Š” ๊ฐœ๋…์ด๋‹ค. ๋ณ€์„ฑ์€ ํƒ€์ž…์˜ ์ƒ์† ๊ณ„์ธต ๊ด€๊ณ„์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ํƒ€์ž… ๊ฐ„์— ์–ด๋–ค ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ง€ํ‘œ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ณต๋ณ€์„ฑ์€ ํƒ€์ž…์˜ ์ƒ์† ๊ณ„์ธต ๊ด€๊ณ„์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ํƒ€์ž… ๊ฐ„์— ํ•จ๊ป˜ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํŠน์ง•์„ ๋งํ•˜๋ฉฐ, ์ด๋ฅผ ๊ฐ์ฒด ์ง€ํ–ฅ ๊ฐœ๋…์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด SOLID ์›์น™ ์ค‘ Liskov ์น˜ํ™˜ ์›์น™์— ํ•ด๋‹นํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐฐ์—ด (Array)๊ณผ ๋ฆฌ์ŠคํŠธ (List)๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, Java์—์„œ์˜ ๊ฐ ๋ณ€์„ฑ์˜ ํŠน์ง•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. (1) ๊ณต๋ณ€์„ฑ S๊ฐ€ T์˜ ํ•˜์œ„ ํƒ€์ž…..
1) ์ œํ•œ๋œ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ (Bounded Type Parameter) ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ๋Š” ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์„ ์ œํ•œํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆซ์ž๋ฅผ ์—ฐ์‚ฐํ•˜๋Š” ์ œ๋„ค๋ฆญ ๋ฉ”์†Œ๋“œ๋Š” ๋Œ€์ฒด ํƒ€์ž…์œผ๋กœ Number ๋˜๋Š” ์ž์‹ ํด๋ž˜์Šค (Byte, Short, Integer, Long, Double)๋กœ ์ œํ•œํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ๋ชจ๋“  ํƒ€์ž…์œผ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์—†๊ณ , ํŠน์ • ํƒ€์ž…๊ณผ ์ž์‹ ๋˜๋Š” ๊ตฌํ˜„ ๊ด€๊ณ„์— ์žˆ๋Š” ํƒ€์ž…๋งŒ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ œํ•œ๋œ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ (Bounded Type Parameter) ๋ผ๊ณ  ํ•œ๋‹ค. public ๋ฆฌํ„ดํƒ€์ž… ๋ฉ”์†Œ๋“œ (๋งค๊ฐœ๋ณ€์ˆ˜, ...) { } ์ œํ•œ๋œ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ •์˜๋Š” ์œ„์™€ ๊ฐ™์ด extends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ƒ์œ„ ํƒ€์ž…์€ ํด๋ž˜์Šค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ธํ„ฐํŽ˜..
1) ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค์™€ ์ œ๋„ค๋ฆญ ๋ฉ”์†Œ๋“œ ์ด๋ฒˆ์—๋Š” ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค์™€ ์ œ๋„ค๋ฆญ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž! (1) ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค public class ํด๋ž˜์Šค๋ช… { } public interface ์ธํ„ฐํŽ˜์ด์Šค๋ช… { } ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๋ž€ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์ง€๋Š” ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๋Š” ์„ ์–ธ๋ถ€์— “” ๊บฝ์ƒˆ ๊ธฐํ˜ธ๊ฐ€ ๋ถ™๊ณ  ๊ทธ ์‚ฌ์ด์— ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์ด ์œ„์น˜ํ•œ๋‹ค! ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋ณ€์ˆ˜๋ช…๊ณผ ๋™์ผํ•œ ๊ทœ์น™์— ๋”ฐ๋ผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๋ฌธ์ž ์•ŒํŒŒ๋ฒณ ํ•œ๊ธ€์ž๋กœ ํ‘œํ˜„ํ•œ๋‹ค! ๋˜ํ•œ, ์™ธ๋ถ€์—์„œ ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์— ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋งŒ์•ฝ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์•”๋ฌต์ ์œผ๋กœ Object ํƒ€์ž…์ด ์‚ฌ์šฉ๋œ๋‹ค. ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๋Š” ์ด์ „์— ๋งŽ์ด ๋‹ค๋ค˜๊ธฐ์— ์ž์„ธํ•œ ์ฝ”๋“œ๋Š” ์ƒ๋žตํ•œ๋‹ค! (2) ์ œ๋„ค๋ฆญ ๋ฉ”์†Œ๋“œ p..
1) ์ œ๋„ค๋ฆญ & ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฒˆ์—๋Š” ์ œ๋„ค๋ฆญ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์ •์˜์™€ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž! (1) ์ œ๋„ค๋ฆญ (Generics) class Box { public T content; ... public static void main(String[] args) { Box strBox = new Box(); Box intBox = new Box(); } } ์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด Box ํด๋ž˜์Šค๊ฐ€ ์žˆ๊ณ  ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด Box ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์ธ content์˜ ํƒ€์ž…์€ ํŠน์ • ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ์ธ T๋กœ ์„ค์ •ํ•˜์˜€๋‹ค. ๊ทธ๋ฆฌ๊ณ  main() ๋ฉ”์†Œ๋“œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด String ๊ฐ์ฒด์™€ Intenger ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ๊ฐ์˜ Box ๊ฐ์ฒด๋ฅผ “ํƒ€์ž…”์„ ์ง€์ •ํ•˜์—ฌ ์ƒ์„ฑํ•˜์˜€๋‹ค. ๋”ฐ๋ผ์„œ..
1) ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  (1) ์ œ๋„ค๋ฆญ์ด ์—†๋˜ ์‹œ์ ˆ์˜ Java ์ฝ”๋“œ ์ œ๋„ค๋ฆญ์€ JDK 1.5 ๋ฒ„์ „๋ถ€ํ„ฐ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ ์ œ๋„ค๋ฆญ์ด ์กด์žฌํ•˜์ง€ ์•Š๋˜ ์‹œ์ ˆ์˜ Java ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž! class FruitBox { public Object fruit; public Object getFruit() { return fruit; } public void setFruit(Object content) { this.fruit = fruit; } } class Apple { } class Banana { } ์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด Apple, Banana ํด๋ž˜์Šค์™€ Apple, Banana์™€ ๊ฐ™์€ ๊ณผ์ผ์„ ๋‹ด๋Š” ํด๋ž˜์Šค์ธ FruitBox๊ฐ€ ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค. FruitBox ํด๋ž˜์Šค์˜ fruit ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋Š” ๋‹ค์–‘ํ•œ ๊ณผ์ผ ํด๋ž˜์Šค (Appl..
1) ์–ด๋…ธํ…Œ์ด์…˜ (Annotation) (1) ์–ด๋…ธํ…Œ์ด์…˜์ด๋ž€ ์ฝ”๋“œ์—์„œ “@”์œผ๋กœ ์ž‘์„ฑ๋˜๋Š” ์š”์†Œ๋ฅผ ์–ด๋…ธํ…Œ์ด์…˜์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ์–ด๋…ธํ…Œ์ด์…˜์€ ํด๋ž˜์Šค ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ปดํŒŒ์ผํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์„ค์ • ์ •๋ณด์ด๋‹ค. ์–ด๋…ธํ…Œ์ด์…˜์€ ์ฃผ๋กœ ์„ธ ๊ฐ€์ง€ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜์–ด์ง„๋‹ค. โ‘  ์ปดํŒŒ์ผ ์‹œ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ณด ์ „๋‹ฌ โ‘ก ๋นŒ๋“œ ํˆด์ด ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ณด ์ „๋‹ฌ โ‘ข ์‹คํ–‰ ์‹œ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ณด ์ „๋‹ฌ ์ปดํŒŒ์ผ ์‹œ, ์‚ฌ์šฉ๋˜๋Š” ์ •๋ณด ์ „๋‹ฌ์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋Š” @Override ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. @Override๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฉ”์†Œ๋“œ ์žฌ์ •์˜ ๊ฒ€์‚ฌ๋ฅผ ํ•˜๋„๋ก ์„ค์ •ํ•˜๋ฉฐ ์ •ํ™•ํžˆ ์žฌ์ •์˜๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ์–ด๋…ธํ…Œ์ด์…˜์€ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ํ•„์ˆ˜์ ์ธ ์š”์†Œ๋กœ ํŠนํžˆ, ์›น ๊ฐœ๋ฐœ์—..
Dev_sHu
'๐Ÿง Programming/Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก