IT/development

[java] list์˜ null ์ฒดํฌ(ObjectUtils.isEmpty())

์•Œ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž 2023. 2. 12.

๋ชฉ์ฐจ

NPE ๐Ÿ˜‚

    NPE(NullPointerException)๋Š” java ๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋ฉด ์ •๋ง ๋งŽ์ด ๋งŒ๋‚˜๋Š” ์—๋Ÿฌ ์ค‘ ํ•˜๋‚˜์ด๊ณ 

    Null๊ฐ’์ธ ๋Œ€์ƒ์„ ๊ฐ€์ง€๊ณ  ๋ญ”๊ฐ€ ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋‹ค.

    ๋ฐฉ์ง€๋ฒ•์€ ๊ณตํ†ต๋ชจ๋“ˆ์„ ๋งŒ๋“ค์–ด ํ•ญ์ƒ null ์ฒดํฌ๋ฅผ ํ•˜๊ฒŒ๋” ๊ฐœ๋ฐœํ•˜๋Š”๊ฒŒ ์‚ฝ์งˆ์„ ์ค„์ด๋Š” ๊ธธ์ผ ๋“ฏ ์‹ถ๋‹ค.

    ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ NPE๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

    userList์— ์•„๋ฌด๊ฒƒ๋„ ํ• ๋‹น๋˜์ง€ ์•Š์€ ์ƒํƒœ์ธ๋ฐ ์‚ฌ์ด์ฆˆ๋ฅผ ์ธก์ •ํ•˜๋ ค๊ณ  ํ•˜๋‹ค๋‹ˆ?(๋ฏธ์นœ๊ฑด๊ฐ€?)

    List<UserDto> userList = null;
    log.info("userList => {}", userList.size());

     


    ์Šคํ”„๋ง์œผ๋กœ ๊ฐœ๋ฐœ ์‹œ ๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ฅผ list์— ๋‹ด์•„ ํ™”๋ฉด์— ๋ฟŒ๋ฆฌ๊ฑฐ๋‚˜ API ํ˜•์‹์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์— ๋‚ด๋ฆฌ๊ฑฐ๋‚˜ ํ• ํ…๋ฐ

    list๊ฐ€ null์ด๊ฑฐ๋‚˜ ๋นˆ๊ฐ’์ด ๋‹ด๊ธฐ๊ฑฐ๋‚˜ ์‚ฌ์ด์ฆˆ๊ฐ€ 0์ธ ๊ฒฝ์šฐ ๋“ฑ๋“ฑ ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์— ๋”ฐ๋ผ NPE๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๊ณตํ†ต ๋ชจ๋“ˆ๋กœ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์œ ์šฉํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ด๋ฏธ ์žˆ์—ˆ๋‹ค.

    org.springframework.util์˜ isEmpty()๋ฅผ ์ด์šฉํ•˜๋ฉด ๋˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ์ƒํ™ฉ์„ ๋‹ค ์ฒดํฌํ•ด ์ค€๋‹ค.

    parameter๊ฐ’์ด null์ธ์ง€, obj๊ฐ€ ์–ด๋–ค ํƒ€์ž…์ธ์ง€ ๋ถ„๊ธฐ ํ›„ ๊ธธ์ด๋‚˜ ๊ฐ’์ด ๋น„์—ˆ๋Š”์ง€ ์ฒดํฌํ•œ๋‹ค.

    ์•„๋ž˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. 

    ๊ฐœ๋ฐœ ํ•˜๋ฉด์„œ ์ด๋ ‡๊ฒŒ NPE๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์ „๋ถ€ ๊ณตํ†ต ๋ชจ๋“ˆ์„ ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜ ์˜คํ”ˆ์†Œ์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฏธ๋ฆฌ ์ฐจ๋‹จ์„ ํ•ด ๋†“๋Š”๊ฒŒ ์ข‹๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ๋ณ€์ˆ˜ ์ƒ์„ฑ ์‹œ null์ด ์•„๋‹Œ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด ๋†“๋Š”๊ฒŒ ์ข‹๋‹ค.

    ์ •๋ฆฌ ๐Ÿ˜„

    1. null์ฒดํฌ๋Š” ๋ฏธ๋ฆฌ ๊ณตํ†ต๋ชจ๋“ˆ ๊ฐœ๋ฐœ ํ˜น์€ ์˜คํ”ˆ ์†Œ์Šค์˜ ๋ฉ”์†Œ๋“œ ์ด์šฉ

    2. ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ null์ด ์•„๋‹Œ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”(์ด๊ฑด ํ˜ธ๋ถˆํ˜ธ๊ฐ€ ์žˆ์„ ๋“ฏ ํ•˜๋‹ˆ ์ƒํ™ฉ์— ๋งž๊ฒŒ๋” ์ ์ ˆํžˆ ์กฐํ™”)

    ์œ„ 2๊ฐ€์ง€๋ฅผ ์ƒ๊ฐํ•˜๋ฉฐ ๊ฐœ๋ฐœํ•˜๋Š” ์Šต๊ด€์„ ๊ธฐ๋ฅด์ž.(๋‚˜์—๊ฒŒ ํ•˜๋Š” ๋ง)

    ๋Œ“๊ธ€