IT/development

[spring] ์˜์กด์„ฑ ์ฃผ์ž… ์‹œ NPE(NullPointerException)

์•Œ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž 2022. 11. 23.

๋ชฉ์ฐจ

    ์–ด๋””๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์„๊นŒ์š”?

     

    spring์—์„œ ์˜์กด์„ฑ ์ฃผ์ž… ์‹œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์‹ค์ˆ˜์ด๋‹ค.(๋‚˜๋‹ค, ๋‚ด๊ฐ€ ๊ทธ๋ ‡๋‹ค.)

    ์œ„ ์ฝ”๋“œ์—์„œ ์–ด๋””๊ฐ€ ์ž˜๋ชป ๋˜์—ˆ์„๊นŒ? ๋ฌด์—‡ ๋•Œ๋ฌธ์— NPE๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?

    ์ฝ˜์†”์—์„œ ์นœ์ ˆํ•˜๊ฒŒ ๋ผ์ธ๊นŒ์ง€ ์•Œ๋ ค์ฃผ๊ณ  ์žˆ๋‹ค.

     

    31๋ฒˆ ์งธ ๋ผ์ธ์œผ๋กœ ๊ฐ€๋ณด์ž 

    ๊ทธ๋ƒฅ board ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ํŽ˜์ด์ง•ํ•ด์„œ ๊ฐ€์ ธ์˜ค๋Š”๊ฒŒ ์ „๋ถ€๋‹ค.

    ์›์ธ์„ ๋ชฐ๋ž์„ ๋• DB์—์„œ ๊ฐ€์ ธ์˜ค๋Š”๊ฒŒ null์ธ๊ฐ€? ์ด๋Ÿฐ ์ƒ๊ฐ์„ ํ–ˆ์—ˆ๋Š”๋ฐ..

    ํ•˜์ง€๋งŒ ์•„๋ž˜ ์ฝ”๋“œ์—์„œ๋Š” ์ƒ์„ฑํ•œ list๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์ผ์ด ์ „ํ˜€ ์—†๋‹ค.(list์—์„œ getํ•ด์„œ ๋ญ˜ ๊ฐ€์ ธ์˜จ๋‹ค๊ฑฐ๋‚˜)

    ๊ทผ๋ฐ ์™œ ๋„ํฌ์ธํ„ฐ์ผ๊นŒ?

     

    ๋””๋ฒ„๊ฑฐ๋กœ ์ฐ์–ด๋ณด์ž boardService๊ฐ€ null์ด๋‹ค.

    ์ด๋†ˆ์˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ ์•ˆ๋œ๊ฑฐ๋‹ค.

    BoardController์—์„œ BoardService๋ผ๋Š” ๋†ˆ์„ ์ƒ์„ฑ์ž ์ฃผ์ž…ํ•ด์„œ ์“ฐ๋ ค๊ณ  ํ•˜๋Š”๋ฐ ์ด ๊ฐ์ฒด๊ฐ€ null์ด๋‹ˆ..

     

    ๋ฒ”์ธ์€ ์•„๋ž˜๋‹ค.

    ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค๋ ˆ๋ฒจ์— @RequiredArgsConstructor ์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์˜€๋Š”๋ฐ boardService์— final์„ ๋ถ™์ด์ง€ ์•Š์•„์„œ ๊ทธ๋ ‡๋‹ค.

    @RequiredArgsConstructor์€ final์ด๋‚˜ @NotNull์ด ๋ถ™์€ ํ•„๋“œ๋ฅผ ์ƒ์„ฑ์ž ๋ฐฉ์‹์œผ๋กœ ์ฃผ์ž…์‹œ์ผœ์ฃผ๋Š”๋ฐ ํ•ด๋‹น ํ•„๋“œ์— final์ด ์—†๋‹ค.

    ์ฝ”๋”ฉํ•˜๋ฉด์„œ ์‹ค์ˆ˜ํ•œ ๊ฒƒ์ด๋‹ค.

     

    ์•„๋ž˜์ฒ˜๋Ÿผ final์„ ๋ถ™์ด๊ณ  ๋‹ค์‹œ ๋””๋ฒ„๊ฑฐ๋กœ ์ฐ์–ด๋ณด๋ฉด ๊ฐ์ฒด๊ฐ€ null์ด ์•„๋‹Œ๊ฑธ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๋Œ“๊ธ€