Java

9์ฃผ์ฐจ ๊ณผ์ œ: ์˜ˆ์™ธ ์ฒ˜๋ฆฌ(ํ”ผ๋“œ๋ฐฑ)

ํ–ฅ์ฐก 2021. 1. 17. 00:55

 

๐Ÿ“Œ ์ฑ… ์ถ”์ฒœ

๋ฆฌํŒฉํ† ๋ง(๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ)

2ํŒ์€ javascript๋กœ ๋˜์–ด์žˆ๋‹ค.

 

๐Ÿ“Œ try-catch์—์„œ catch๋ฅผ ์—ฌ๋Ÿฌ ์ค„ ์“ธ ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์‚ฌํ•ญ

์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค! (๊ณ„์ธต ๊ด€๊ณ„)

์ปดํŒŒ์ผ ์—๋Ÿฌ ๋ฐœ์ƒ - ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์•ผ ํ•จ

 

IllegalArgumentException์€ RuntimeException์„ ์ƒ์†๋ฐ›๊ณ  ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์œ„ ์ฝ”๋“œ์—์„œ IllegalArgumentException์— ๋„๋‹ฌํ•  ์ˆ˜์—†๋‹ค.

 

๋ฉ€ํ‹ฐ ์บ์น˜์—์„œ๋„ ์ปดํŒŒ์ผ ์—๋Ÿฌ ๋ฐœ์ƒ -> 9์ฃผ ์ฐจ ์Šคํ„ฐ๋””์— ์ ์–ด๋†“์•˜๋‹ค.

 

โœ Quiz) ์•„๋ž˜ ์ฝ”๋“œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋Š”?

1. NullPointerException โœ… - ์–ด๋–ป๊ฒŒ ๋˜์ง€๋Š๋ƒ ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค

2. IllegalArgumentException

3. ๋‘˜ ๋‹ค ์•„๋‹ˆ๋‹ค.

public class Example {
    public static void main(String[] args) {
        try {
          throw new NullPointerException();
        } catch (NullPointerException | IllegalArgumentException e) {
            e.printStackTrace();
        }
    }
}

 

CheckedException vs UnCheckedException

๋Ÿฐํƒ€์ž„ ๊ณ„์—ด์€ ๋ณต๊ตฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ, ์ฝ”๋“œ๋กœ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ UnCheckedException

์šฐ๋ฆฌ๊ฐ€ ์ฝ”๋“œ๋กœ ์ปจํŠธ๋กค ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ(์žฌ์‹œ๋„, ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ์น˜ํ™˜ ๋“ฑ๋“ฑ)๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉด CheckedException

 

์ž๋ฐ” 8 ์ด์ƒ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ์—์„œ try-catch-finally๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด try-with-resource๋กœ ์ „ํ™˜ํ•˜๋„๋ก ํ•˜์ž(๋ฌผ๋ก  AutoCloseable๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค)

 

๋กฌ๋ณต์—์„œ @cleanup์ด๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜๋„ ์žˆ๋‹ค.

 

โœ Quiz) ์•„๋ž˜ ์ฝ”๋“œ์˜ ๋ฌธ์ œ์ ์€??? ( src๋ฅผ dest์— ๋ณต์‚ฌํ•˜๋Š” ์ฝ”๋“œ)

 

๋ฌธ์ œ์  : finally ๋ธ”๋Ÿญ ์•ˆ์—in.close();์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด์„œ out.close()์— ๋„๋‹ฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์–ด out์ด ๋‹ซํžˆ์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

๊ฐœ์„  1) try๋ธ”๋ก์—์„œ in.close()์˜ ์˜ˆ์™ธ ์ค‘ IOException์ด ์•„๋‹Œ RuntimeException์ด ๋ฐœ์ƒํ•˜๋ฉด ๋˜ ๋‘ ๋ฒˆ์งธ try๋ธ”๋ก์˜ out.close()์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ๋„ ์žˆ๋‹ค.

๋ฐฑ๊ธฐ์„ ๋‹˜ ์œ ํˆฌ๋ธŒ ๊ฐ•์˜ ํ™”๋ฉด1

 

๊ฐœ์„  2 ) ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐœ์„  ํ›„ out๊นŒ์ง€ close๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค,, ํ•˜์ง€๋งŒ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ์ง€์ €๋ถ„...

๋ฐฑ๊ธฐ์„ ๋‹˜ ์œ ํˆฌ๋ธŒ ๊ฐ•์˜ ํ™”๋ฉด2

 

๊ฐœ์„  3) try-with-resources๋กœ ๊น”๋”ํ•˜๊ฒŒ ๊ฐœ์„  ๊ฐ€๋Šฅ

try-with-resources๋ฅผ ์“ด๋‹ค๊ณ  catch๋ธ”๋ก์„ ์•ˆ ์จ๋„ ๋˜๋Š” ๊ฑด ์•„๋‹ˆ๋‹ค. 

ํ•˜์ง€๋งŒ finally์—์„œ close ํ•˜๋Š” ์ฝ”๋“œ๋Š” ์•ˆ ์จ๋„ ๋œ๋‹ค.

๋ฐฑ๊ธฐ์„ ๋‹˜ ์œ ํˆฌ๋ธŒ ๊ฐ•์˜ ํ™”๋ฉด3

 

try-with-resource์™€ finally๋Š” ๊ฒฐํ•ฉ์ด ๋ ๊นŒ?

์ž์›์„ ๋ฐ˜๋‚ฉ ํ›„ finally๊ฐ€ ์‹คํ–‰๋œ๋‹ค. 

์ปดํŒŒ์ผ ๋œ .class๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ๋งˆ์ง€๋ง‰์— close ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค.

 

CheckedException๊ณผ UncheckedException ๋น„๊ตํ‘œ์—์„œ

ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ rollback๊ด€๋ จ ์–˜๊ธฐ๋Š” JDBC,์Šคํ”„๋ง ์ „๋žต๊ณผ ๊ด€๋ จ ์žˆ๋‹ค. (๋œจ๋”ํ•˜๊ณ  ๋ฐ”๋กœ ํ–‰ ์‚ญ์ œํ–ˆ๋‹ค.)

์Šคํ”„๋ง์—์„œ rollback์„ ํ•  ๊ฑด์ง€ ๋ง ๊ฑด์ง€์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์„ค์ •๊ณผ ๊ด€๋ จ ์žˆ๋‹ค.

 

์ปค์Šคํ…€ ์˜ˆ์™ธ๋ฅผ ๋งŒ๋“œ๋Š” ์ „๋žต

  • ์ปค์Šคํ…€ ์˜ˆ์™ธ๋ฅผ ์•ˆ ๋งŒ๋“ค๊ณ  ๊ธฐ์กด์— ์žˆ๋Š” ๊ฒƒ์„ ์ž˜ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ตœ๊ณ  ์ข‹์€ ์„ ํƒ์ด๋‹ค.
  • ๋ฃจํŠธ cause๋ฅผ ๋ฐ˜๋“œ์‹œ ๋‹ด์•„์„œ ์ปค์Šคํ…€ ์˜ˆ์™ธ๋ฅผ ๋งŒ๋“ค์ž (๊ทผ๋ณธ์ ์ธ ์›์ธ๊ณผ ํ•จ๊ป˜ ๋งŒ๋“ค์–ด์•ผ ๋œ๋‹ค)

 

์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋น„์šฉ

์˜ˆ์™ธ์ฒ˜๋ฆฌ๋Š” ๋น„์šฉ์ด ๋น„์‹ธ๋‹ค.

๋กœ์ง์œผ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ์ž‘์—…์€ ์ž์ œํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

๐Ÿ’ก finally์—์„œ return์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•ˆํ‹ฐ ํŒจํ„ด์ด๋‹ค.

finally์— return์ด ์žˆ์œผ๋ฉด try์— ์žˆ๋Š” return์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

 

โœ Q) ๊ณ„์† throws๋ฅผ ํ•˜๋ฉด main๊นŒ์ง€์™€์„œ ๊ฒฐ๊ตญ ๋งˆ์ง€๋ง‰์—” ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋‚˜์š”?

๊ทธ๋ƒฅ ํ•ด๋‹น ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๊ณผ์ œ ์•ˆ๋‚ด

callable : ์•ˆํ•ด๋„ ๋œ๋‹ค....

fork join poll : ์•„์ง ์•ˆํ•ด๋„ ๋œ๋‹ค.....

Thread์™€ Runnable์— ๋ฌด์Šจ ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ 

Thread์˜ ์ƒํƒœ ๊ณต๋ถ€

Thread ์šฐ์„ ์ˆœ์œ„ ๊ณต๋ถ€

Main Thread๊ฐ€ ๋ญ”์ง€

๋™๊ธฐํ™”๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ : Lock๊ฐœ๋…, Lock ์ข…๋ฅ˜