1. SOLID
  2. ๋™์ผ์„ฑ(identity)์™€ ๋™๋“ฑ์„ฑ(equality)
  3. ์›์‹œํƒ€์ž…๊ณผ ์ฐธ์กฐํƒ€์ž…
  4. String, StringBuilder, StringBuffer
  5. Java8์—์„œ ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ
  6. Checked Exception๊ณผ Unchecked Exception
  7. ์Šคํ”„๋ง ํŠธ๋žœ์žญ์…˜ ์ถ”์ƒํ™”์—์„œ rollback ๋Œ€์ƒ

1. SOLID

๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™

์ข‹์€ ์„ค๊ณ„ โ†’ ์‹œ์Šคํ…œ์— ์ƒˆ๋กœ์šด ์š”๊ตฌ์‚ฌํ•ญ์ด๋‚˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋ฒ”์œ„๊ฐ€ ์ ์€ ๊ตฌ์กฐ ์‹œ์Šคํ…œ์— ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„, ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•˜๊ณ  ํ™•์žฅ์„ฑ ์žˆ๋Š” ์‹œ์Šคํ…œ

SRP : ๋‹จ์ผ ์ฑ…์ž„ ์›์น™

  • ํ•œ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค
  • โ€˜๋ณ€๊ฒฝโ€™์ด ์žˆ์„ ๋•Œ ํŒŒ๊ธ‰ํšจ๊ณผ๊ฐ€ ์ ์œผ๋ฉด ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ž˜ ๋”ฐ๋ฅธ ๊ฒƒ
  • ๋‹ค๋ฅธ ํด๋ž˜์Šค๋“ค์ด ์„œ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์—ฐ์‡„์ž‘์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
  • ์‘์ง‘๋„๋Š” ๋†’์ด๊ณ  ๊ฒฐํ•ฉ๋„๋Š” ๋‚ฎ์ถค
  • ์ฑ…์ž„์„ ์ ์ ˆํ•˜๊ฒŒ ๋ถ„๋ฐฐํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•จ

OCP : ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™

  • ์†Œํ”„ํŠธ์›จ์–ด ์š”์†Œ๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ์œผ๋‚˜ ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค
  • ์š”๊ตฌ์‚ฌํ•ญ์˜ ๋ณ€๊ฒฝ์ด๋‚˜ ์ถ”๊ฐ€์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๊ธฐ์กด ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์ˆ˜์ •์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•„์•ผ ํ•˜๋ฉฐ, ์‰ฝ๊ฒŒ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
  • ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ธฐ๋ฐ˜
  • ์ถ”์ƒํ™”์™€ ๋‹คํ˜•์„ฑ
  • ๋ณ€ํ•  ๋ถ€๋ถ„๊ณผ ๋ณ€ํ•˜์ง€ ์•Š์„ ๋ถ€๋ถ„์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•ด ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์€ ์ถ”์ƒํ™”ํ•˜์—ฌ ์ƒ์†ํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์˜์กดํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•จ

LSP : ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™

  • ์„œ๋ธŒ ํƒ€์ž…์€ ์–ธ์ œ๋‚˜ ์ž์‹ ์˜ ๊ธฐ๋ฐ˜ ํƒ€์ž…์œผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค
  • ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์œ„์น˜์— ์ž์‹ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์ฝ”๋“œ๊ฐ€ ์›๋ž˜ ์˜๋„๋Œ€๋กœ ์ž‘๋™ํ•ด์•ผ ํ•œ๋‹ค
  • ํ”„๋กœ๊ทธ๋žจ ๊ฐ์ฒด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ •ํ™•์„ฑ์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š์œผ๋ฉด์„œ ํ•˜์œ„ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
  • ๋‹คํ˜•์„ฑ์—์„œ ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ทœ์•ฝ์„ ๋‹ค ์ง€์ผœ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ (๋‹คํ˜•์„ฑ์„ ์œ„ํ•œ ์›์น™)

Screenshot

Screenshot

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 : ์Šคํ”„๋ง์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋กค๋ฐฑ ์ œ์–ด ์–ด๋…ธํ…Œ์ด์…˜