- SOLID
- ๋์ผ์ฑ(identity)์ ๋๋ฑ์ฑ(equality)
- ์์ํ์ ๊ณผ ์ฐธ์กฐํ์
- String, StringBuilder, StringBuffer
- Java8์์ ์ถ๊ฐ๋ ๊ธฐ๋ฅ
- Checked Exception๊ณผ Unchecked Exception
- ์คํ๋ง ํธ๋์ญ์ ์ถ์ํ์์ rollback ๋์
1. SOLID
๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น
์ข์ ์ค๊ณ โ ์์คํ ์ ์๋ก์ด ์๊ตฌ์ฌํญ์ด๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ๋ ์ํฅ์ ๋ฐ๋ ๋ฒ์๊ฐ ์ ์ ๊ตฌ์กฐ ์์คํ ์ ์์ํ์ง ๋ชปํ ๋ณ๊ฒฝ์ฌํญ์ด ๋ฐ์ํ๋๋ผ๋, ์ ์ฐํ๊ฒ ๋์ฒํ๊ณ ํ์ฅ์ฑ ์๋ ์์คํ
SRP : ๋จ์ผ ์ฑ ์ ์์น
- ํ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ค
- โ๋ณ๊ฒฝโ์ด ์์ ๋ ํ๊ธํจ๊ณผ๊ฐ ์ ์ผ๋ฉด ๋จ์ผ ์ฑ ์ ์์น์ ์ ๋ฐ๋ฅธ ๊ฒ
- ๋ค๋ฅธ ํด๋์ค๋ค์ด ์๋ก ์ํฅ์ ๋ฏธ์น๋ ์ฐ์์์ฉ์ ์ค์ผ ์ ์์
- ์์ง๋๋ ๋์ด๊ณ ๊ฒฐํฉ๋๋ ๋ฎ์ถค
- ์ฑ
์์ ์ ์ ํ๊ฒ ๋ถ๋ฐฐํ์ฌ ์ฝ๋์ ๊ฐ๋
์ฑ์ ํฅ์์ํค๊ณ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํจ
OCP : ๊ฐ๋ฐฉ ํ์ ์์น
- ์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค
- ์๊ตฌ์ฌํญ์ ๋ณ๊ฒฝ์ด๋ ์ถ๊ฐ์ฌํญ์ด ๋ฐ์ํ๋๋ผ๋ ๊ธฐ์กด ๊ตฌ์ฑ ์์๋ ์์ ์ด ์ด๋ฃจ์ด์ง์ง ์์์ผ ํ๋ฉฐ, ์ฝ๊ฒ ํ์ฅ์ด ๊ฐ๋ฅํ์ฌ ์ฌ์ฌ์ฉํ ์ ์์ด์ผ ํจ
- ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ๋ง๋๋ ๊ธฐ๋ฐ
- ์ถ์ํ์ ๋คํ์ฑ
- ๋ณํ ๋ถ๋ถ๊ณผ ๋ณํ์ง ์์ ๋ถ๋ถ์ ๋ช ํํ ๊ตฌ๋ถํด ๋ณํ ์ ์๋ ๋ถ๋ถ์ ์ถ์ํํ์ฌ ์์ํ๋ ํด๋์ค๊ฐ ์์กดํ ์ ์๊ฒ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํจ
LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น
- ์๋ธ ํ์ ์ ์ธ์ ๋ ์์ ์ ๊ธฐ๋ฐ ํ์ ์ผ๋ก ๊ต์ฒดํ ์ ์์ด์ผ ํ๋ค
- ๋ถ๋ชจ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๋ ์์น์ ์์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋์ ์ฌ์ฉํ์ ๋ ์ฝ๋๊ฐ ์๋ ์๋๋๋ก ์๋ํด์ผ ํ๋ค
- ํ๋ก๊ทธ๋จ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ํ์ํ์ ์ ์ธ์คํด์ค๋ก ๋ฐ๊ฟ ์ ์์ด์ผ ํจ
- ๋คํ์ฑ์์ ํ์ ํด๋์ค๋ ์ธํฐํ์ด์ค ๊ท์ฝ์ ๋ค ์ง์ผ์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธ (๋คํ์ฑ์ ์ํ ์์น)
ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
- ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กด ๊ด๊ณ๋ฅผ ๋งบ์ผ๋ฉด ์๋๋ค
- ์์ ์ด ์ฌ์ฉํ์ง ์๋ ์ธํฐํ์ด์ค๋ ๊ตฌํํ์ง ์์์ผ ํจ
- ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค๊ฐ ์ฌ๋ฌ๊ฐ๊ฐ ๋ฒ์ฉ ์ธํฐํ์ด์ค ํ๋๋ณด๋ค ๋ซ๋ค
- ํ๋์ ํฐ ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ๊ธฐ ๋ณด๋ค ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ฒด์ ์ด๊ณ ์์ ๋จ์๋ค๋ก ๋ถ๋ฆฌ์์ผ ๊ผญ ํ์ํ ์ธํฐํ์ด์ค๋ง ์์ํ์๋ ์๋ฏธ
- ์ธํฐํ์ด์ค์ ๋จ์ผ ์ฑ ์ ๊ฐ์กฐ
DIP : ์์กด ๊ด๊ณ ์ญ์ ์์น
- ์ถ์ํ๋ ๊ฒ์ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ์์กดํ๋ฉด ์๋๋ค. ๊ตฌ์ฒด์ ์ธ ๊ฒ์ด ์ถ์ํ๋ ๊ฒ์ ์์กดํด์ผ ํ๋ค
- DIP๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ = DI
- ๊ตฌํ ํด๋์ค์ ์์กดํ์ง ๋ง๊ณ ์ธํฐํ์ด์ค์ ์์กด = ์ธํฐํ์ด์ค๋ฅผ ์ ๊ทน ํ์ฉ
- ์์ํด๋์ค์ผ์๋ก, ์ธํฐํ์ด์ค์ผ์๋ก, ์ถ์ํด๋์ค์ผ์๋ก ๋ณํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ฏ๋ก ๋ ์ถ์์ ์ธ๊ฒ์ ์์กด
Question
SOLID ์์น์ ์งํค๋ ์ฝ๋๊ฐ ํญ์ ๋ ๋์ ์ฝ๋์ธ๊ฐ์? ์ด์ ์ ํจ๊ป ์ค๋ช ํด์ฃผ์ธ์
SOLID ์์น์ ๋ฐ๋ฅธ ์ฝ๋๊ฐ ํด๋์ค๊ฐ ์ง๋์น๊ฒ ์ธ๋ถํ๋์ด ๋ณต์กํด ๋ณด์ผ ์๋ ์์ง๋ง, ์ฅ๊ธฐ์ ์ผ๋ก ๋ดค์๋ ์ ์ง๋ณด์์ฑ์ด ํฅ์๋ ์ ์์ต๋๋ค.
2. ๋์ผ์ฑ๊ณผ ๋๋ฑ์ฑ
๋์ผ์ฑ(Identity)
- ๋ ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์์ ๊ฐ์ ์์น๋ฅผ ์ฐธ์กฐํ๋์ง ํ์ธํ๋ ๊ฐ๋
- ๋ ๊ฐ์ฒด๊ฐ ์์ ํ ๋์ผํ ๊ฐ์ฒด์ผ ๋๋ง ์ฐธ
- == ์ฐ์ฐ์
Object obj1 = new Object();
Object obj2 = obj1; // obj1๊ณผ obj2๋ ๋์ผ์ฑ ์ฐธ์กฐ
System.out.println(obj1 == obj2); // true
๋๋ฑ์ฑ(Equality)
- ๋ ๊ฐ์ฒด๊ฐ ์๋ฏธ์ ์ผ๋ก ๋์ผํ ๊ฐ์ด๋ ์ํ๋ฅผ ๊ฐ์ง๋์ง ํ์ธํ๋ ๊ฐ๋
- ๊ฐ์ฒด์ ๊ฐ ๋๋ ์์ฑ ๋น๊ต
- equals()
- null ๊ฐ์ฒด ๋น๊ต ์ equals() ํธ์ถ์ NullPointerException์ ์ ๋ฐํ ์ ์์
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1.equals(str2)); // true (๊ฐ ๋น๊ต)
System.out.println(str1 == str2); // false (๋ค๋ฅธ ์ฐธ์กฐ)
Question
equals()์ hashCode()๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํํ์ง ์์ ๊ฒฝ์ฐ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ์ค๋ช ํ์ธ์.
equals()์ hashCode()๋ฅผ ์๋ชป ๊ตฌํํ๋ฉด, HashMap ๋๋ HashSet ๊ฐ์ ์ปฌ๋ ์ ์์ ๋์ผํ ๊ฐ์ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ์ค๋ณต ์ฝ์ ํ๊ฑฐ๋ ์ญ์ ํ๋ ๊ณผ์ ์์ ์์์น ๋ชปํ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
3. ์์ํ์ ๊ณผ ์ฐธ์กฐํ์
์์ํ์
- ๊ฐ ์์ฒด๋ฅผ ์ ์ฅํ๋ ๋ฐ์ดํฐ ์ ํ
- ๋ฉ๋ชจ๋ฆฌ์ ์คํ์ ์ ์ฅ
- ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋จ์ํ ๊ตฌ์กฐ
- byte, short, int, long, float, double, char, boolean
์ฐธ์กฐํ์
- ๊ฐ์ด ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ์ ์ฅ
- ์คํ์ ์ฃผ์ ์ ์ฅ, ์ค์ ๋ฐ์ดํฐ๋ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ
- ๋์ ์ผ๋ก ํฌ๊ธฐ๊ฐ ๋ณํ๊ฑฐ๋ ๋ณต์กํ ๊ตฌ์กฐ
- class, interface, array, enum, String
4. String, StringBuilder, StringBuffer
String
- ๋ถ๋ณ ๊ฐ์ฒด (๊ฐ์ฒด์ ๊ฐ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ) โ ๋ณด์, ์บ์ฑ, ์ฐ๋ ๋ ์์ ์ฑ์ด ์ฐ์
- ๊ฐ์ ๋ณ๊ฒฝํ ๋๋ง๋ค ์๋ก์ด ๊ฐ์ฒด ์์ฑ โ ์ฑ๋ฅ ์ ํ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ๋ฐ์
- ๋ฌธ์์ด์ด ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๊ณ ์ฃผ๋ก ์ฝ๊ธฐ ์์ ๋ง ์ํ๋๋ ๊ฒฝ์ฐ ์ฌ์ฉ
StringBuilder
- ๊ฐ๋ณ ๊ฐ์ฒด , ๊ฐ์ฒด๋ฅผ ์๋ก ์์ฑํ์ง ์๊ณ ๋์ผ ๊ฐ์ฒด ๋ด๋ถ ๊ฐ ๋ณ๊ฒฝ
- ๋น๋๊ธฐ ํ๊ฒฝ์์ ์์ ํ์ง ์์, ๋จ์ผ ์ฐ๋ ๋ ํ๊ฒฝ์์๋ง ์์
- ์ฑ๋ฅ์ด ์ค์ํ๊ณ ๋๊ธฐํ๊ฐ ํ์ ์๋ ํ๊ฒฝ์์ ์ฌ์ฉ
- ๋ฌธ์์ด ๋ณ๊ฒฝ ์์ ์ด ๋ง๊ณ , ๋จ์ผ ์ฐ๋ ๋ ํ๊ฒฝ
StringBuffer
- ๊ฐ๋ณ ๊ฐ์ฒด, String Builder์ ๋์ผ
- ๋๊ธฐํ ์ฒ๋ฆฌ๊ฐ ๋์ด์์ด ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์๋ ์์
- ์ฑ๋ฅ์ด ์ค์ํ๊ณ ๋๊ธฐํ๊ฐ ํ์ํ ํ๊ฒฝ์์ ์ฌ์ฉ
- ๋๊ธฐํ๋ก ์ธํด ์ฑ๋ฅ์ด StringBuilder๋ณด๋ค ๋ฎ์
- ๋ฌธ์์ด ๋ณ๊ฒฝ์ด ๋ง๊ณ , ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ์์ ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ
Question
StringBuilder๊ฐ String๋ณด๋ค ์ฑ๋ฅ์ด ์ข์ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
String์ ๋ถ๋ณ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ ๋๋ง๋ค ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. StringBuilder๋ ๊ฐ๋ณ ๊ฐ์ฒด๋ก ๋์ผํ ๊ฐ์ฒด์์ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ๋ฏ๋ก ๊ฐ์ฒด ์์ฑ ๋น์ฉ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ค์ด๋ญ๋๋ค.
Question
๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์ StringBuilder๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ํ๋ ๋ฌธ์ ?
StringBuilder๋ ๋๊ธฐํ๋ฅผ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๋์์ ๊ฐ์ StringBuilder ๊ฐ์ฒด๋ฅผ ์์ ํ๋ ค๊ณ ํ ๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์๊ฑฐ๋ ๋ฐ์ดํฐ์ ์์์ด ์ผ์ด๋ ์ ์์ต๋๋ค. ์ด๋ฐ ์ํฉ์์๋ ๋๊ธฐํ๋ฅผ ์ง์ํ๋ StringBuffer๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
5. Java8์์ ์ถ๊ฐ๋ ๊ธฐ๋ฅ
๋๋ค ํํ์(Lambda Expressions)
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ฉฐ ์ต๋ช ํจ์์ฒ๋ผ ๋์
- ์ฝ๋ ๊ฐ๊ฒฐ์ฑ์ ๋์ด๊ณ ์ปฌ๋ ์ ์ฒ๋ฆฌ ๋ฐ ์ด๋ฒคํธ ํธ๋ค๋ง์ ์ฝ๊ฒ ๋ง๋ค์ด ์ค
Optional
- NullPointerException์ ๋ถ๋ด์ ์ค์ด๊ธฐ ์ํด ๋ฑ์ฅํ Wrapper ํด๋์ค
- ๋ช ์์ ์ผ๋ก ๋ฐํ๊ฐ์ด Null์ผ ์ ์์์ ์๋ ค์ค
- ์์คํ ์ค๋ฒํค๋๊ฐ ์ฆ๊ฐํด ์ฑ๋ฅ์ด ์ ํ๋จ
- NullPointerException ๋ฐฉ์ง, ๋ถํ์ํ null ์ฒดํฌ ๊ฐ์
Stream
- ๋ฐ์ดํฐ์ ํ๋ฆ์ผ๋ก ๋๋ค๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ์ ๊ณต
- ์ปฌ๋ ์ , ๋ฐฐ์ด ๋ฑ์ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ
- ๋ณ๋ ฌ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ์ฝ๋์ ์์ ์ค์ด๊ณ ๊ฐ๊ฒฐํ๊ฒ ํํ ๊ฐ๋ฅ
Question
Stream API์ ๊ธฐ์กด for ๋ฐ๋ณต๋ฌธ์ ์ฐจ์ด
Stream API๋ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์์ง๋ง for ๋ฐ๋ณต๋ฌธ์์๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ตฌํ์ ๋ณ๋๋ก ํด์ผ ํฉ๋๋ค. Stream API๋ for ๋ฐ๋ณต๋ฌธ์ ๋นํด ๊ฐ๊ฒฐํ๊ณ ๋ณต์กํ ํํฐ๋ง, ๋งคํ, ์ ๋ ฌ๋ฑ์ ๋ณต์กํ ์์ ์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
ํจ์ํ ์ธํฐํ์ด์ค
- ์ผ๋ฐ์ ์ผ๋ก ๊ตฌํํด์ผ ํ ์ถ์๋ฉ์๋๊ฐ ํ๋๋ง ์ ์๋ ์ธํฐํ์ด์ค
- ๋๋ค์์ ํ์ ์ผ๋ก ์ฌ์ฉ
- @FunctionalInterface ๋ฅผ ์ฌ์ฉํ๋ฉด์ปดํ์ผ ํ์์ ์๋ฌ๋ฅผ ์ก์์ค
java.time ํจํค์ง
- ๋ถ๋ณ ๊ฐ์ฒด๋ก ์ค๊ณ๋์ด ๊ฐ์ฒด๋ฅผ ์์ ํ ์ ์๊ณ ์์ ํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ค์ํ ์๊ฐ ์ฐ์ฐ ์ง์
6. Checked Exception๊ณผ Unchecked Exception
Checked Exception
- ๊ฐ๋ฐ์๊ฐ ๋ช ์์ ์ผ๋ก ์์ธ์ฒ๋ฆฌ ํด์ผํ๋ ์์ธ
- ์ปดํ์ผ ์ค๋ฅ ๋ฐ์
- IOException, SQLException, FileNotFoundException ๋ฑ
Unchecked Exception
- ๋ฐํ์์ ๋ฐ์ํ๋ ์์ธ
- ๊ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ์๊ตฌํ์ง ์์
- ๋ฐ์ ์์ ์ ํ๋ก๊ทธ๋จ์ด ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ์ข ๋ฃ
- NullPointException, ArrayIndexOutOfBoundsExcetpion ๋ฑ
Question
Checked Exception๊ณผ Unchecked Exception์ ์ฐจ์ด
์ค๋ฅ ๋ฐ์ ์์ ์ ์ฐจ์ด๊ฐ ์์ต๋๋ค. Checked Exception์ ์ปดํ์ผ์์, UncheckedException์ ๋ฐํ์์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Question
try-catch์ throws์ ์ฐจ์ด์
try-catch๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ์ํด ์ฌ์ฉ๋๋ฉฐ, throws๋ ์์ธ๋ฅผ ์ ํํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. try-catch๋ ์์ธ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฝ๋์ ์ง์ ์ ์ฉํ์ฌ ์์ธ๋ฅผ ์ฆ์ ์ฒ๋ฆฌํ๊ณ , thwos๋ ๋ฉ์๋ ์ ์ธ์ ์ฌ์ฉํ์ฌ ์์ธ๋ฅผ ํธ์ถํ ์ชฝ์์ ์ฒ๋ฆฌํ๋๋ก ์ง์ ํฉ๋๋ค.
7. ์คํ๋ง ํธ๋์ญ์ ์ถ์ํ์์ rollback ๋์
- ๊ธฐ๋ณธ์ ์ธ ๋กค๋ฐฑ ๋์ : Unchecked Exception
- @Transactional : ์คํ๋ง์์ ์ฌ์ฉํ๋ ๋กค๋ฐฑ ์ ์ด ์ด๋ ธํ ์ด์