JAVA & OOP
๐ฑ Garbage Collection(๊ฐ๋น์ง ์ปฌ๋ ์
)์ด๋? c๋ c++ ๊ฐ์ unmanaged language๋ free() ๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์
ํด์ ํด์ผ ํ๋ค. ํ์ง๋ง java์์๋ JVM์ ๊ฐ๋น์ง์ปฌ๋ ํฐ๊ฐ ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์์ ์ ๋ฆฌํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ํด์ ํ ํ์๊ฐ ์๋ค. ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํด์ฃผ๋ ์ด์ ๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํจ์ด๋ค!! ๋ฉ๋ชจ๋ฆฌ๋ ํ์ ์ ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ง ์๊ฑฐ๋ ํ์ ์๋ ๋ถ๋ถ์ ๊ผญ ํด์ ๋ฅผ ํด์ฃผ์ด์ผ ํ๋ค. ๐ค ๊ฐ๋น์ง ์ปฌ๋ ํฐ vs ๊ฐ๋น์ง ์ปฌ๋ ์
๊ฐ๋น์ง ์ปฌ๋ ํฐ : ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๋ ์์คํ
๋๋ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑ ์์์ด๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์ ์ ๊ฑฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ ์ญํ ์ ํ๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์
: ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ์ ์ค ํ๋..
JAVA & OOP
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์์น 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
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ orElse๋ฅผ ์ฌ์ฉํ ์ฝ๋๊ฐ ์์๋๋ฐ ๋ด ์๋๋๋ก ์๋์ ํ์ง ์์์ ์๋ฌธ์ ์ด ๋ค์๋ค. ๊ฒ์๊ธ์ ์
๋ก๋ํ ๋ ์์น ์ ๋ณด๋ฅผ ๊ฐ์ด ์
๋ก๋ํ๋๋ฐ, ์ด ๊ณผ์ ์์ ์์น DB์ ํด๋น ์ ๋ณด๊ฐ ์๋ค๋ฉด ์์น ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ์๊ณ , ์๋ค๋ฉด ์๋ก ๋ง๋ค๋๋ก ํ๋ ๋ก์ง์ด์๋ค! orElse๋ฅผ ์ฌ์ฉํ๋๋ ์์น ์ ๋ณด๊ฐ ๋ ๊ฐ๊ฐ ์ ์ฅ์ด ๋๋ ์์ด๋ฌ๋ํ ์ํฉ์ด์๋ค... ํด๋น ๋ก์ง์ฒ๋ผ ์ฝ๋๋ฅผ ์งฐ๊ณ , ๋น์ฐํ placeRepository์์ null๊ฐ์ ๊ฐ์ ธ์์ ๋๋ง orElse๊ฐ ์ํ๋๋ค๊ณ ์๊ฐ์ ํ์๋ค. ๊ทผ๋ฐ ์ฐพ์๋ณด๋๊น ๋ฐ์ ๋ง๊ณ ๋ฐ์ ํ๋ ธ์๋ค!! orElse()์ orElseGet()์ ๊ณตํต์ ๋ ๋ฉ์๋ ๋ชจ๋ Optional ํด๋์ค ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ์ค์ ๊ฐ์ด null์ผ ๊ฒฝ์ฐ ์ด๋ค ๊ฐ์ผ๋ก ๋์ฒดํด์ return ํด..
JAVA & OOP
โ๏ธ 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
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
Optional์ด๋? Optional์ ์ง๋ค๋ฆญ ํด๋์ค๋ก 'Tํ์
๊ฐ์ฒด'๋ฅผ ๊ฐ์ธ๋ wrapper ํด๋์ค์ด๋ค. ๋ฐ๋ผ์ Optionalํ์
์ ๊ฐ์ฒด์๋ ๋ชจ๋ ํ์
์ ์ฐธ์กฐ๋ณ์๋ฅผ ๋ด์ ์ ์๋ค. ์ต์ข
์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋ฅ ๋ฐํํ๋ ๊ฒ์ด ์๋๋ผ Optional๊ฐ์ฒด์ ๋ด์์ ๋ฐํํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด ๋ฐํ๋ ๊ฒฐ๊ณผ๊ฐ null์ธ์ง if๋ฌธ์ผ๋ก ์ฒดํฌํ์ง ์์๋ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋จํ๊ฒ ํ ์ ์๋ค. ๐ช Optional ๊ฐ์ฒด ์์ฑ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ of() ๋๋ ofNullable()์ ์ฌ์ฉํ๋ค. ์ฐธ์กฐ๋ณ์๊ฐ null์ผ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด of()๋ง๊ณ ofNullable()์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. of()๋ฅผ ์ฌ์ฉํด์ ๋งค๊ฐ๋ณ์ ๊ฐ์ด null์ด๋ฉด NullPointerException์ด ๋ฐ์ํ๋ค. String str = "hi" Optiona..
JAVA & OOP
์ ๋ค๋ฆญ์ค(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๊ฐ์ง ์์น์ผ๋ก ์ด๋ฃจ์ด์ ธ์๋ค. SRP : ๋จ์ผ ์ฑ
์ ์์น (Single Responsibility Principle) OCP : ๊ฐ๋ฐฉ-ํ์ ์์น (Open/Closed Principle) LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น (Liskov Substitution Principle) ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (Interface Segregation Principle) DIP : ์์กด๊ด๊ณ ์ญ์ ์์น (Dependency Inversion Principle) ๐งก SRP (๋จ์ผ ์ฑ
์ ์์น) - ํ ํด๋์ค๋ ํ๋์ ์ฑ
์๋ง ๊ฐ์ ธ์ผ ํ๋ค. * ์ค์ํ ๊ธฐ์ค : ๋ณ๊ฒฝ (๋ณ๊ฒฝ์ด ์์ ๋ ํ๊ธ ํจ๊ณผ๊ฐ ์ ์ผ๋ฉด ๋จ์ผ ์ฑ
์ ์์น์ ์ ๋ฐ๋ฅธ ๊ฒ์ด๋ค.) ๐ OCP (๊ฐ๋ฐฉ-ํ์ ์์น) - ์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ..