๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿคซ ETC

Objects.requireNonNull

by kekeyo 2025. 12. 18.
728x90

Objects.requireNonNull()

public static <T> T requireNonNull(T obj) {
        if (obj == null)
            throw new NullPointerException();
        return obj;
    }

๊ทธ๋ƒฅ obj๊ฐ€ null๊ฐ’์ด๋ฉด NPE ํ„ฐ์ง€๊ฒŒ ํ•ด์ฃผ๋Š” ๋งค์„œ๋“œ ์•„๋‹Œ๊ฐ€?
์ด๊ฑธ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ์ฐพ์•„๋ณด์•˜๋‹ค.

์ด๊ฑธ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?

  • explicity (๋ช…์‹œ์„ฑ)
  • fail fast (๋น ๋ฅธ ์‹คํŒจ)

 

explicity (๋ช…์‹œ์„ฑ)

์ฝ”๋“œ์—์„œ data๊ฐ€ null ์ด ์•„๋‹ˆ์–ด์•ผํ•จ์„ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Œ.

public void process(byte[] data) {
    Objects.requireNonNull(data, "data must not be null");

    int length = data.length;
    System.out.println(length);
}
  • data๊ฐ€ ์ ˆ๋Œ€ null์ด๋ฉด ์•ˆ ๋จ
  • null ํ—ˆ์šฉ ์—ฌ๋ถ€๊ฐ€ ์•”๋ฌต์  → ๋ช…์‹œ์  ๊ณ„์•ฝ์œผ๋กœ ์ „ํ™˜๋จ

 

fail fast (๋น ๋ฅธ ์‹คํŒจ)

: ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•œ ์‹œ์ ์—์„œ ์ฆ‰์‹œ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ. (๋™์ž‘ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฐ”๋กœ ์˜ค๋ฅ˜๋ฅผ ์•Œ๋ฆฌ๊ณ  ์ž‘์—… ์ค‘๋‹จ)

 

requireNonNull์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ (fail late)

public void process(byte[] data) {
    int length = data.length;   // ์—ฌ๊ธฐ์„œ NPE ๋ฐœ์ƒ
    System.out.println(length);
}

[๋™์ž‘ ํ๋ฆ„]

  • data == null ์ธ ์ƒํƒœ๋กœ ๋ฉ”์„œ๋“œ ์ง„์ž…
  • ์ฝ”๋“œ๊ฐ€ ๊ณ„์† ์ง„ํ–‰๋จ
  • ์ œ ์‹คํŒจ ์ง€์ ์€ data.length

์˜ˆ์™ธ ๋ฉ”์‹œ์ง€: java.lang.NullPointerException

 

[๋ฌธ์ œ์ ]

  • ์™œ null์ด ๋“ค์–ด์™”๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Œ
  • ์—๋Ÿฌ๊ฐ€ ์˜๋ฏธ ์—†๋Š” ์ง€์ ์—์„œ ๋ฐœ์ƒ
  • ๋””๋ฒ„๊น… ์‹œ ํ˜ธ์ถœ ์Šคํƒ์„ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€์•ผ ํ•จ

 

Objects.requireNonNull()์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ

public void process(byte[] data) {
    Objects.requireNonNull(data, "data must not be null");

    int length = data.length;
    System.out.println(length);
}

 

[๋™์ž‘ ํ๋ฆ„]

  • ๋ฉ”์„œ๋“œ ์ง„์ž… ์ฆ‰์‹œ null ๊ฒ€์‚ฌ
  • null์ด๋ฉด ๋ฐ”๋กœ ์‹คํŒจ

์˜ˆ์™ธ ๋ฉ”์‹œ์ง€: java.lang.NullPointerException: data must not be null

 

[์žฅ์ ]

  • ์‹คํŒจ ์ง€์  = ์›์ธ ์ง€์ 
  • ๋ฉ”์‹œ์ง€๋กœ ์˜๋„ ๋ช…ํ™•
  • ์ดํ›„ ๋กœ์ง์€ null ๊ฑฑ์ • ์—†์ด ์ž‘์„ฑ ๊ฐ€๋Šฅ

 

๋น ๋ฅธ ์‹คํŒจ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 
* ๊ฒฐํ•จ ์กฐ๊ธฐ ๋ฐœ๊ฒฌ
* ๋น„์šฉ ์ ˆ๊ฐ ๋ฐ ์ผ์ • ๊ด€๋ฆฌ
* ํ’ˆ์งˆ ๊ฐœ์„ 
* ํ•™์Šต ๋ฐ ํ˜์‹  ๋ฌธํ™”

 

๊ฒฐ๋ก 

์ด ๊ฐ’์ด null์ด๋ฉด ์ดํ›„ ๋กœ์ง์„ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด
Objects.requireNonNull์„ ์“ด๋‹ค.

728x90