JAVA & OOP

JAVA & OOP

[JAVA] Garbage Collection(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜)์ด๋ž€?

๐ŸŒฑ Garbage Collection(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜)์ด๋ž€? c๋‚˜ c++ ๊ฐ™์€ unmanaged language๋Š” free() ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์—… ํ•ด์ œํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ java์—์„œ๋Š” JVM์˜ ๊ฐ€๋น„์ง€์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•Œ์•„์„œ ์ •๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์ ‘ ํ•ด์ œํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ด์ฃผ๋Š” ์ด์œ ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค!! ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•œ์ •์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ํ•„์š” ์—†๋Š” ๋ถ€๋ถ„์€ ๊ผญ ํ•ด์ œ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๐Ÿค” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ vs ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ : ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์‹œ์Šคํ…œ ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์„ฑ ์š”์†Œ์ด๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ์ œ๊ฑฐํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ : ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜..

JAVA & OOP

[JAVA] HashCode์™€ equals ์˜ค๋ฒ„๋ผ์ด๋”ฉ

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์œ„์น˜ Id๋กœ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋Š” ๋กœ์ง์ด ์žˆ์–ด์„œ hashCode๋ž‘ equals๋ฅผ ์žฌ์ •์˜ํ–ˆ๋‹ค.! ๊ทผ๋ฐ ๋‚ด๊ฐ€ ์ด ๋‘ ๊ฐœ๋ฅผ ์ž์„ธํžˆ ๊ณต๋ถ€ํ•ด ๋ณธ ์ ์ด ์žˆ์—ˆ๋‚˜ ์‹ถ์–ด์„œ ์ด์ฐธ์— ์ •๋ฆฌํ•ด์„œ ์ดํ•ดํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค! @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; GetAllPlaceResDto that = (GetAllPlaceResDto) o; return Objects.equals(placeId, that.placeId); } @Override public int hashCode() { return Objects.hash(p..

JAVA & OOP

[JAVA] Optional ํด๋ž˜์Šค์˜ orElse์™€ orElseGet ์ฐจ์ด

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ orElse๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ๋‚ด ์˜๋„๋Œ€๋กœ ์ž‘๋™์„ ํ•˜์ง€ ์•Š์•„์„œ ์˜๋ฌธ์ ์ด ๋“ค์—ˆ๋‹ค. ๊ฒŒ์‹œ๊ธ€์„ ์—…๋กœ๋“œํ•  ๋•Œ ์œ„์น˜ ์ •๋ณด๋ฅผ ๊ฐ™์ด ์—…๋กœ๋“œํ•˜๋Š”๋ฐ, ์ด ๊ณผ์ •์—์„œ ์œ„์น˜ DB์— ํ•ด๋‹น ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด ์œ„์น˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ณ , ์—†๋‹ค๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค๋„๋ก ํ•˜๋Š” ๋กœ์ง์ด์—ˆ๋‹ค! orElse๋ฅผ ์‚ฌ์šฉํ–ˆ๋”๋‹ˆ ์œ„์น˜ ์ •๋ณด๊ฐ€ ๋‘ ๊ฐœ๊ฐ€ ์ €์žฅ์ด ๋˜๋Š” ์•„์ด๋Ÿฌ๋‹ˆํ•œ ์ƒํ™ฉ์ด์—ˆ๋‹ค... ํ•ด๋‹น ๋กœ์ง์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์งฐ๊ณ , ๋‹น์—ฐํžˆ placeRepository์—์„œ null๊ฐ’์„ ๊ฐ€์ ธ์™”์„ ๋•Œ๋งŒ orElse๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ–ˆ์—ˆ๋‹ค. ๊ทผ๋ฐ ์ฐพ์•„๋ณด๋‹ˆ๊นŒ ๋ฐ˜์€ ๋งž๊ณ  ๋ฐ˜์€ ํ‹€๋ ธ์—ˆ๋‹ค!! orElse()์™€ orElseGet()์˜ ๊ณตํ†ต์  ๋‘ ๋ฉ”์„œ๋“œ ๋ชจ๋‘ Optional ํด๋ž˜์Šค ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์‹ค์ œ ๊ฐ’์ด null์ผ ๊ฒฝ์šฐ ์–ด๋–ค ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•ด์„œ return ํ•ด..

JAVA & OOP

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

โ˜•๏ธ Java 17์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  Java 11๋ณด๋‹ค ์ง€์›๊ธฐ๊ฐ„์ด ๊ธธ๋‹ค. Java 8์ด๋‚˜ Java 11์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋ณด๋‹ค ์‹ ๊ทœ ๋ฒ„์ „์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ์— ๋ฆฌ์Šคํฌ๊ฐ€ ์ ์–ด์ง„๋‹ค. SpringBoot 3.0 ๋ถ€ํ„ฐ Java 17 ์ด์ƒ์„ ์ง€์›ํ•œ๋‹ค. ํ˜„์žฌ SpringBoot 2.x.x๋Š” 23๋…„ 11์›”์— ์ง€์›์ด ์ข…๋ฃŒ๋˜์—ˆ๋‹ค. Java 17์—์„œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜(ZGC, Shenandoah GC)์ด ๊ฐœ์„ ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ํšจ์œจ์ด ํ–ฅ์ƒ๋˜์—ˆ์œผ๋ฉฐ, ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™” ๊ธฐ์ˆ ์ด ์—…๊ทธ๋ ˆ์ด๋“œ๋˜์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ์†๋„์™€ ์‘๋‹ต ์‹œ๊ฐ„์ด ๊ฐœ์„ ๋˜์—ˆ๋‹ค. Java 17์—์„œ ์•”ํ˜ธํ™” ๋ฐ ์ธ์ฆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ตœ์‹  ํ‘œ์ค€์„ ์ง€์›ํ•ด์„œ ์›น ์„œ๋น„์Šค ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•œ๋‹ค. ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ ๐Ÿ”Ž Java 17 ๋ฉ”์„œ๋“œ 1. recode recode๋Š” ..

JAVA & OOP

JAVA :: HashMap, hashing ๊ฐœ๋… ์ •๋ฆฌ

HashMap์ด๋ž€? ์ผ๋‹จ Map์€ ํ‚ค(Key)์™€ ๊ฐ’(value)์„ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ(entry)๋กœ ์ €์žฅํ•˜๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ฐ™์€ ๋งต์— ๋‘ ๊ฐœ ์ด์ƒ์˜ ๊ฐ™์€ ํ‚ค๋Š” ์กด์žฌํ•ด์„œ๋Š” ์•ˆ๋˜๋ฉฐ, ์ค‘๋ณต๋œ ๊ฐ’์€ ์กด์žฌํ•ด๋„ ๊ดœ์ฐฎ๋‹ค. ๋งŒ์•ฝ ์ค‘๋ณต๋œ ํ‚ค ๊ฐ’์— ๊ฐ’์„ ์ €์žฅํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, ๋‚˜์ค‘์— ์ €์žฅํ•œ ๊ฐ’์ด ๊ทธ ํ‚ค์˜ ๊ฐ’์ด ๋œ๋‹ค. ํ•ด์‹ฑ์— ๋Œ€ํ•ด์„  ํ›„๋ฐ˜์— ์ •๋ฆฌํ•  ๊ฒƒ์ด๋‹ค. ๐ŸŸช HashMap โ—พ HashMap ๋ฉ”์„œ๋“œ โ—พHashMap ๊ฐ’ ์ถ”๊ฐ€ํ•˜๊ณ  ์ฝ๊ธฐ - entrySet() ์ด์šฉ HashMap map = new HashMap(); map.put("A", 100); map.put("B", 90); map.put("C", 80); Set set = map.entrySet(); Iterator it = set.iterator(); while (..

JAVA & OOP

JAVA :: Optional ํด๋ž˜์Šค ๊ฐœ๋…์ •๋ฆฌ

Optional์ด๋ž€? Optional์€ ์ง€๋„ค๋ฆญ ํด๋ž˜์Šค๋กœ 'Tํƒ€์ž… ๊ฐ์ฒด'๋ฅผ ๊ฐ์‹ธ๋Š” wrapper ํด๋ž˜์Šค์ด๋‹ค. ๋”ฐ๋ผ์„œ Optionalํƒ€์ž…์˜ ๊ฐ์ฒด์—๋Š” ๋ชจ๋“  ํƒ€์ž…์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค. ์ตœ์ข… ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋ƒฅ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Optional๊ฐ์ฒด์— ๋‹ด์•„์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฐ˜ํ™˜๋œ ๊ฒฐ๊ณผ๊ฐ€ null์ธ์ง€ if๋ฌธ์œผ๋กœ ์ฒดํฌํ•˜์ง€ ์•Š์•„๋„ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๐ŸŸช Optional ๊ฐ์ฒด ์ƒ์„ฑ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” of() ๋˜๋Š” ofNullable()์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ฐธ์กฐ๋ณ€์ˆ˜๊ฐ€ null์ผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋ฉด of()๋ง๊ณ  ofNullable()์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. of()๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์ด null์ด๋ฉด NullPointerException์ด ๋ฐœ์ƒํ•œ๋‹ค. String str = "hi" Optiona..

JAVA & OOP

JAVA :: ์ œ๋„ค๋ฆญ์Šค(Generics) ๊ฐœ๋… ์ •๋ฆฌ

์ œ๋„ค๋ฆญ์Šค(Generics)๋ž€? ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ๊ฐ์ฒด๋“ค์„ ๋‹ค๋ฃจ๋Š” ๋ฉ”์„œ๋“œ๋‚˜ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค์— ์ปดํŒŒ์ผ ์‹œ ํƒ€์ž…์ฒดํฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ArrayList๊ฐ™์€ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค๋Š” ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š”๋ฐ ๋ณดํ†ต ํ•œ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋งŒ ๋‹ด๋Š”๋‹ค. ํ•œ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋งŒ ๋‹ด๊ธฐ๋ฅผ ์›ํ•  ๋•Œ ์ œ๋„ค๋ฆญ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜•๋ณ€ํ™˜์„ ์•ˆํ•ด๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๊ฐ„๋‹จํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ‘‰ ์ œ๋„ค๋ฆญ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ ArrayList list = new ArrayList(); list.add(10); list.add("10"); String word = (String)list.get(1); ์ œ๋„ค๋ฆญ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด Object๋กœ ํƒ€์ž…์„ ์ง€์ •ํ•˜๊ณ , ์•ˆ์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๊บผ๋‚ผ ๋•Œ๋งˆ๋‹ค ํ˜•๋ณ€ํ™˜์„ ํ•ด์ค˜์•ผํ•œ๋‹ค. ๐Ÿ‘‰ ์ œ๋„ค๋ฆญ์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ArrayList lis..

JAVA & OOP

SOLID ์›์น™ [๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„/ 5๊ฐ€์ง€ ์›์น™ /๊ฐœ๋…]

SOLID ์›์น™์€ 5๊ฐ€์ง€ ์›์น™์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค. SRP : ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (Single Responsibility Principle) OCP : ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ (Open/Closed Principle) LSP : ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (Liskov Substitution Principle) ISP : ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (Interface Segregation Principle) DIP : ์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™ (Dependency Inversion Principle) ๐Ÿงก SRP (๋‹จ์ผ ์ฑ…์ž„ ์›์น™) - ํ•œ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. * ์ค‘์š”ํ•œ ๊ธฐ์ค€ : ๋ณ€๊ฒฝ (๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ ํŒŒ๊ธ‰ ํšจ๊ณผ๊ฐ€ ์ ์œผ๋ฉด ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ž˜ ๋”ฐ๋ฅธ ๊ฒƒ์ด๋‹ค.) ๐Ÿ’› OCP (๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™) - ์†Œํ”„ํŠธ์›จ์–ด ์š”์†Œ๋Š” ํ™•์žฅ์—๋Š” ..

DAHLIA CHOI
'JAVA & OOP' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก