๐ ํ๋ก๊ทธ๋๋ฐ์ธ์ด/โ๏ธ Java

Java :: ์์ธ ์ฒ๋ฆฌ
ํ๋ก๊ทธ๋จ ์ค๋ฅ ํ๋ก๊ทธ๋จ ์ค๋ฅ์ ์ข ๋ฅ ์ปดํ์ผ ์๋ฌ : ์ปดํ์ผํ ๋ ๋ฐ์ํ๋ ์๋ฌ ๋ฐํ์ ์๋ฌ : ์คํํ ๋ ๋ฐ์ํ๋ ์๋ฌ ๋ ผ๋ฆฌ์ ์๋ฌ : ์ฌ์ฉ์์ ์์ฑ ์๋์๋ ๋ค๋ฅธ ๋์ ์ํ ์์ธ์ฒ๋ฆฌ ์ ์์ ๋ชฉ์ Java ์ ๋ฐํ์ ์๋ฌ - ์๋ฌ(Error)์ ์์ธ(Exception) ์๋ฌ (Error) : ํ๋ก๊ทธ๋จ ์ฝ๋์ ์ํด์ ์์ต๋ ์ ์๋ ์ฌ๊ฐํ ์ค๋ฅ ์์ธ (Exception) : ํ๋ก๊ทธ๋จ ์ฝ๋์ ์ํด์ ์์ต๋ ์ ์๋ ๋ค์ ๋ฏธ์ฝํ ์ค๋ฅ ์์ธ์ฒ๋ฆฌ ์ ์์ ๋ชฉ์ ์ ์ : ํ๋ก๊ทธ๋จ ์คํ ์ ๋ฐ์ํ ์ ์๋ ์์ธ์ ๋ฐ์์ ๋๋นํ ์ฝ๋๋ฅผ ์์ฑ ๋ชฉ์ : ํ๋ก๊ทธ๋จ์ ๋น์ ์ ์ข ๋ฃ๋ฅผ ๋ง๊ณ , ์ ์ ์คํ์ํ๋ฅผ ์ ์งํ๋ ๊ฒ ์์ธ ํด๋์ค์ ๊ณ์ธต๊ตฌ์กฐ RuntimeException ํด๋์ค๋ค : ํ๋ก๊ทธ๋๋จธ์ ์ค์๋ก ๋ฐ์ํ๋ ์์ธ Except..

Java :: ์ด๋ ธํ ์ด์ (Annotation)
์ด๋ ธํ ์ด์ (Annotation) ์ฃผ์์ฒ๋ผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ํฅ์ ๋ฏธ์น์ง ์์ผ๋ฉฐ, ์ ์ฉํ ์ ๋ณด๋ฅผ ์ ๊ณต @Test // ์ด ๋ฉ์๋๊ฐ ํ ์คํธ ๋์์์ ํ ์คํธ ํ๋ก๊ทธ๋จ์๊ฒ ์๋ฆผ ! public void method() { ... } ํ์ค ์ด๋ ธํ ์ด์ Java ์์ ์ ๊ณตํ๋ ์ด๋ ธํ ์ด์ @Override ์ค๋ฒ๋ผ์ด๋ฉ์ ์ฌ๋ฐ๋ฅด๊ฒ ํ๋์ง ์ปดํ์ผ๋ฌ๊ฐ ์ฒดํฌํ๊ฒ ํจ ์ค๋ฒ๋ผ์ด๋ฉํ ๋ ๋ฉ์๋ ์ด๋ฆ์ ์๋ชป ์ ๋ ์ค์ ๋ฑ ๋ฐ์ ๊ฐ๋ฅ class Parent { void parentMethod() {} } class Child extends Parent { void parentmethod() {} } ์ค๋ฒ๋ผ์ด๋ฉ ํ๋ ค๊ณ ํ์ผ๋ ์ค์๋ก ์ด๋ฆ ์๋ชป ์ ์์ ๋ ! class Child extends Parent { @Override void ..

Java :: ์ด๊ฑฐํ - Enumeration
์ด๊ฑฐํ(Enumeration) ๊ด๋ จ๋ ์์๋ค์ ๊ฐ์ด ๋ฌถ์ด ๋์ ๊ฒ Java ๋ ํ์ ์ ์์ ํ ์ด๊ฑฐํ์ ์ ๊ณต class Menu { enum CoffeeMenu { ESPRESSO, AMERICANO, LATTE } enum TeaMenu { GREEN_TEA, YUTU_TEA } CoffeeMenu coffeeMenu; TeaMenu teaMenu; } ์์ ํ ์ด๊ฑฐํ์ด๋ ๋ฌด์จ ์๋ฏธ์ผ๊น? ์๋ฅผ ๋ค์ด ์๋์ฒ๋ผ ์ด๊ฑฐํ์ ์ฌ์ฉํ์ง ์๊ณ ์์๋ก ๊ด๋ฆฌํ๋ค๊ณ ์๊ฐํด๋ณด์. class Menu { static int ESPRESSO = 0; static int AMERICANO = 1; static int LATTE = 2; static int GREEN_TEA = 0; static int YUJU_TEA = 1; } ..

Java :: ํฉํ ๋ฆฌ(Factory) ๋ฉ์๋ ํจํด
ํฉํ ๋ฆฌ(Factory) ๋ฉ์๋ ํจํด ๊ฐ์ฒด ์์ฑ ์ฒ๋ฆฌ๋ฅผ ์๋ธ ํด๋์ค๋ก ๋ถ๋ฆฌํ์ฌ ์ฒ๋ฆฌํ๋๋ก ์บก์ํํ๋ ํจํด ํน์ ์ ๋ ฅ๊ฐ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ ๋, ๋ถ๊ธฐ์ ๋ฐ๋ผ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด์ ์ ์ฉํ๋ฉด ์ข๋ค. ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ณต์ฅ์ ๋ง๋๋ ๋๋ ! ์ฅ์ ๊ฐ์ฒด๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๊ณ ์ ์ง๋ณด์์ ์ฉ์ดํด์ง ๊ฐ์ฒด๋ค์ ํ ๊ณณ์์ ๊ด๋ฆฌํ ์ ์๊ฒ ๋จ ๋ฉ์๋๋ก ์๋ํ๊ธฐ ๋๋ฌธ์ ๋ฆฌํด ๊ฐ์ผ๋ก ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ ์์ ๋จ์ ๋ถํ์ํ๊ฒ ๋ง์ ํด๋์ค๋ฅผ ์ ์ํ๊ฒ ๋ ์ ์์ ์์ ์ฝ๋ ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด ์ ์ฉ ์ abstract class Item { } class OrangeJuice extends Item { OrangeJuice() { System.out.println("์ค๋ ์ง์ฅฌ์ค ์์ฑ"..

Java :: ์ฑ๊ธํค(Singleton) ํจํด
์ฑ๊ธํค(Singleton) ํจํด ํด๋์ค์ ์ธ์คํด์ค๊ฐ ํ๋์์ ๋ณด์ฅํ๊ณ , ์ ๊ทผํ ์ ์๋ ์ ์ญ์ ์ธ ์ ๊ทผ์ ์ ๊ณต ! ๋ฑ ํ๋์ ์ธ์คํด์ค๋ง ์์ฑ. ์์ฑ๋ ์ธ์คํด์ค๋ฅผ ์ด๋์๋ ์ฐธ์กฐํ ์ ์๊ฒ ํ๋ค. ์ค์ ๋ก ์์ฑ๋๋ ์ธ์คํด์ค๋ ํ๋ ! (๊ฐ์ฒด ์์ฑ์ ํ๋ฒ์ผ๋ก ์ ํ) ์์ฑ์๊ฐ ๋ ํธ์ถ๋์ด๋ ์ด๋ฏธ ์์ฑ๋ ์ธ์คํด์ค๋ฅผ ๋ฆฌํดํด์ฃผ๋ ๋ฐฉ์. ์ฅ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ๋ฐฉ์ง ์ฑ๊ธํค ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ์ธ์คํด์ค ๊ฐ์ ๋ฐ์ดํฐ ๊ณต์ ๊ฐ ์ฌ์ ์ค์ง ํ๋์ ์ธ์คํด์ค๊ฐ ์กด์ฌํ๋ ๊ฒ์ ๋ณด์ฆํ๊ธฐ์ ๊ฐ๋ฐ ์ ์ค์๋ฅผ ์ค์ผ ์ ์์ ๋จ์ ์ ์ญ๋ณ์๋ณด๋ค ์ฌ์ฉํ๊ธฐ ๋ถํธ ์ฑ๊ธํค ์ญํ ์ด ์ปค์ง๋ฉด ๊ฒฐํฉ๋๊ฐ ๋์์ ธ ๊ฐ์ฒด์งํฅ ์ค๊ณ์์น์์ ์ด๊ธ๋ ์ ์์ ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์ ๋๊ธฐํ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์ผ๋ฉด ์ปจํธ๋กค์ด ์ด๋ ค์ ์ธ์คํด์ค์ ํ๊ดด ์์ ์ ์ปจํธ๋กค ํ๊ธฐ ์ด๋ ค์ ์์ ์ฝ๋..

Java :: ๋์์ธ ํจํด
๋์์ธ ํจํด ๋์์ธ ํจํด์ด๋? ์ค๊ณ ๋ฌธ์ ์ ๋ํ ํด๋ต์ ๋ฌธ์ํ ํ๊ธฐ ์ํด ๊ณ ์ํ ํ์ ๋ฐ๋ณต๋๋ ํจํด์ ์๋ฆฌ์ ๋ํ ๊ฐ๋ ์ ๊ณตํ์ ์ธ ์ธก๋ฉด์์ ๋์ ํ ๊ฒ ํน์ ์ฝ๋์ ์ผ๋ถ๋ถ์ด ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฒ๋ผ ํ๋ก๊ทธ๋จ์ ๋ถ์ฌ๋ฃ์ ์ ์์ ๋์์ธ ํจํด์ ๋์ ํ๋ ๊ฒ์ด ํด๋ต์ด ์๋๋ค. ์๋ชป ๋์ ํ๋ฉด ๋ฌธ์ ๊ฐ ๋ ์๋ ์์ ์ฅ์ ํ๋ก๊ทธ๋จ ์ ์ฒด ๋ผ์ธ์ ์ฝ์ง ์์๋ ์ฝ๊ฒ ์ธ์ํ๊ณ ์์ ํ์ ๊ฐ๋ฅ ์ถ์์ ์ธ ์์ค์์ ๋ค๋ฅธ ํ์๋ค๊ณผ ์์ฌ์ํต ํจ๊ณผ์ ์ผ๋ก ํ ์ ์์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด, ๊ฐ๋ฐ์ค์ธ ํ๋ก๊ทธ๋จ์ ๊ด๊ณ ์์ด ์ฌ์ฌ์ฉ ๋ฐ ํ์ฅ ๊ฐ๋ฅ GoF - Gang of Four ๊ฐ์ฒด์งํฅ ๋ถ์ผ์ ๋ฌธ์ ์ ์ ๋ถ์ํด 24๊ฐ ํจํด์ผ๋ก ๋ถ๋ฅ ๊ธฐ์กด ๊ฐ์ฒด์งํฅ ์ค๊ณ ์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์นดํ๋ก๊ทธํ ํ์ฌ ํจํด ์ ๋ฆฌ ๋๊ท๋ชจ ํ๋ก์ ํธ์ ์งํ์์ ๊ฐ์ฅ ์ค์ํ ์์๋ ํต์ผ๋ ..

Java :: ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ์์น
DRY - Donโt Repeat Yourself ๊ฐ์ ์ผ์ ๋ ๋ฒ ๋ฐ๋ณตํด์ ํ์ง ์์ ๊ฐ์ ์ฝ๋๊ฐ ๋ ๋ฒ ์ด์ ์ฌ์ฉ๋ ๊ฒฝ์ฐ์ ์ฌ์ฌ์ฉ ํ๋ก์ ํธ๊ฐ ์ปค์ง๋ฉด ์์ ์กฐ๊ฐ์ผ๋ก ๋๋์ด ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉ ์ฝ๋ ์์กด์ฑ์ ์ํ ๋ณต์ก๋๊ฐ ์ค์ด๋ค์ด ์ ์ง๋ณด์๋น์ฉ์ด ์ ๊ฐ๋จ ๋ฐ๋ WET : We Enjoy Typing KISS - Keep It Simple, Stupid ์ฝ๋๋ ๊ฐ๊ธ์ ๋จ์ ํ๊ฒ ๊ตฌํํด์ผ ํจ ๋์์ธ์์ ๋ณด๋ค ๊ฐ๋จํ๊ณ ์๊ธฐ ์ฝ๊ฒ ๋ง๋๋ ํธ์ด ์ข์ ํฐ ํ๋ก์ ํธ๋ฅผ ๋ณต์กํ๊ฒ ๋์์ธํด์ ๊ตฌํํ๋ ๊ฑด ํ๋ก์ ํธ ์ดํด๋๊ฐ ๋ถ์กฑํ๋ค๋ ๊ฒ ๋น์ ๋ฌธ๊ฐ์๊ฒ ํ๋ก์ ํธ๋ฅผ ์ค๋ช ํ ์ ์๋ค๋ฉด ์ ๋๋ก ์ดํดํ๋ค๊ณ ๋ณด๊ธฐ ํ๋ฌ YAGNI - You arenโt gonna need it ํ๋ก๊ทธ๋๋จธ๊ฐ ํ์ํ๋ค๊ณ ๊ฐ์ฃผํ ๋๊น์ง ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ง ์์ ์ค์ ๋ก ํ..

Java :: ๊ฐ์ฒด์งํฅ 5๋ ์ค๊ณ ์์น - SOLID
๊ฐ์ฒด์งํฅ ์ค๊ณ 5๋์์น ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ์์ง๋๋ฅผ ๋์ผ ์ ์๋, ๊ฐ์ฒด์งํฅ์ ์ค๊ณ ๊ด์ ์์ ์ง์ผ์ผ ํ ์์น๋ค์ ์ฌ์ ๋ฆฝ ! SOLID SRP : Single Responsibility Principle ๋จ์ผ ์ฑ ์ ์์น OCP : Open Closed Principle ๊ฐ๋ฐฉ ํ์ ์์น LSP : Liskov Substitution Principle ๋ฆฌ์ค์ฝํ ์นํ ์์น ISP : Interface Segregation Principle ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น DIP : Dependency Inversion Principle ์์กด์ฑ ์ญ์ ์์น SRP ๋จ์ผ ์ฑ ์ ์์น ํ๋์ ์ญํ ์ ์ฑ ์์ง๋ ์ฝ๋๋ฅผ ํจ๊ป ๋ฌถ์ด์ฃผ๋ ๊ฒ โ ์์ง๋ ์๋ก ๋ค๋ฅธ ์ญํ ์ ๋งก์ ์ฝ๋๋ ๋ถ๋ฆฌํ์ฌ์ผ ํ๋ค. ๋ชจ๋ ํด๋์ค๋ ๋จ ํ๋์ ์ฑ ์๋ง์ ๊ฐ์ ธ์ผ ํจ..