ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

Java์—์„œ๋Š” null์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฃจ๊ณ  ํ‘œํ˜„๋ ฅ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ Optional์ด ์ž˜ ์•Œ๋ ค์ ธ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋‹ˆ wrapper ํƒ€์ž…์ด๋ผ๋Š” ์ ์œผ๋กœ ์ธํ•ด ๊ณ ๋ฏผ๋˜๋Š” ์š”์ธ๋“ค์ด ๊ฝค ๋งŽ์•˜๋Š”๋ฐ์š”.

์ •ํ™•ํžˆ๋Š” Optional์„ nullable ํ‘œํ˜„์˜ ์šฉ๋„๋กœ API response ํ•„๋“œ ๊ฐ’์— ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ๊ทธ ๊ณผ์ •์—์„œ ๊ณ ๋ฏผ๋˜๋Š” ์ ์ด ์žˆ์—ˆ์–ด์š”.
์˜ค๋Š˜์€ ๊ทธ ๋‚ด์šฉ์— ๋Œ€ํ•ด ๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ์„ ์ ์–ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


Optional์„ response ํ•„๋“œ์— ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ์ 

 

1. ์ง๋ ฌํ™”

"Optional์€ ์ง๋ ฌํ™”ํ•˜๋Š”๋ฐ ์˜๋„์น˜ ์•Š๋Š” ํ•„๋“œ๊ฐ€ ์ง๋ ฌํ™”๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

์ง๋ ฌํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ตฌํ˜„๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒ ์ง€๋งŒ ๋ชจ๋‘ Optional์„ ํ˜ธํ™˜ํ•˜๋Š”์ง€๋Š” ๋ณด์žฅ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ
์šฐ๋ฆฌ๊ฐ€ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์˜์—ญ์ด ์ค„์–ด๋“ค๊ณ  ์ปค์Šคํ…€ํ•  ์ˆ˜ ์žˆ๋Š” ์˜์—ญ์ด ์žˆ๋”๋ผ๋„ ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ์™€ ๋ณต์žก๋„๊ฐ€ ๋†’์•„์ง€๋Š” ๋ฐฉํ–ฅ์„ฑ์ด๋‹ˆ ์ข‹์€ ์„ ํƒ์€ ์•„๋‹Œ ๊ฑธ๋กœ ํŒ๋‹จ๋˜์—ˆ์–ด์š”.

๊ทธ๋ ‡๋‹ค๊ณ  ์‘๋‹ต์˜ ํ•ด๋‹น ํ•„๋“œ๋Š” nullableํ•˜๋‹ค๋Š” ํ‘œํ˜„์„ ํฌ๊ธฐํ•˜๊ธฐ์—๋Š” ์•„์‰ฌ์šด ๊ฒฐ์ •์ด์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฃผ์„์œผ๋กœ nullable์„ ํ‘œํ˜„ํ•ด๋„ ๋ดค์ง€๋งŒ ์ข€ ๋” ๋‹ค๋ฅธ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ? ๊ณ ๋ฏผ์„ ์ด์–ด๊ฐ”์Šต๋‹ˆ๋‹ค.



๊ทธ๋ฆฌ๊ณ  ์‚ฌ์‹ค ์ด ๋ฌธ์ œ๋Š” ๊ฝค ์น˜๋ช…์ ์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ์ง€๋งŒ
ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•œ ๊ฑด ์ข€ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์—†์„์ง€ ์ฐพ๋Š” ๊ณผ์ •์—์„œ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์™œ๋ƒ๋ฉด Spring boot์—์„œ๋Š” optional response๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ธ์ง€ ์ง๋ ฌํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ ๊ดœ์ฐฎ์€ ๊ฑฐ ์•„๋‹ˆ์•ผ? ์‹ถ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ง๋ ฌํ™” ์ด์Šˆ๋Š” ์กด์žฌํ•˜๋ฏ€๋กœ ์ผ๊ด€๋œ ์ปจ๋ฒค์…˜์„ ๊ฐ€์ ธ๊ฐ€๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

 

API ์กฐํšŒ ์‹œ ์ง๋ ฌํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ์ ์ ˆํ•˜๊ฒŒ ์‘๋‹ต ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ด๋ ค์˜ค๋Š” ๋ชจ์Šต

 

2.  ํŒŒ๋ผ๋ฏธํ„ฐ์— ์‚ฌ์šฉํ•  ๋•Œ์™€ Wrapper class์— ๋Œ€ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ

"Optional์€ wrapper class์ด๊ณ  ์ด์— ๋”ฐ๋ฅธ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค."

๊ทธ๋ฆฌ๊ณ  ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ๋ถˆํ•„์š”ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒฝํ—˜์„ ์ž์ฃผํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด nullableํ•œ ํ‘œํ˜„์„ ์œ„ํ•ด Optional์„ ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ์š”.
ํ‘œํ˜„๋ ฅ์€ ์˜ฌ๋ผ๊ฐ”์ง€๋งŒ ๋งค๋ฒˆ Optional์„ ์‚ฌ์šฉํ•ด์ค˜์•ผ ํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ์—๋„ ๋‚˜์˜์ง€ ์•Š์€ ์ ์ •์„ ์ด์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ด์ƒํ•˜๊ฒŒ ๊ฑฐ๋ถ€๊ฐ์ด ๋งŽ์ด ๋“ค์—ˆ๋˜ ๊ฒƒ ๊ฐ™์•„์š”.
๊ทธ๋ž˜์„œ ์ด๊ฒƒ๋„ ์ข€ ๋” ํŽธํ•˜๊ณ  ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ? ์ฐพ๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

๊ทธ๋ฆฌ๊ณ  ๋ฐœ๊ฒฌํ•œ @Nullable, @NotNull

@Nullable, @NotNull์€ ์ž๋ฐ”์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ธฐ๋ณธ ์–ด๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค.
์•„์‰ฝ๊ฒŒ๋„ ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒ€์ฆํ•ด์ฃผ๋Š” ๊ฑธ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜์ง„ ์•Š์ง€๋งŒ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ณ  ํ‘œํ˜„๋ ฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์•ˆ์ด ๋  ์ˆ˜ ์žˆ์„ ๊ฑธ๋กœ ํŒ๋‹จ๋์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ @Nullable์„ ๋‹ฌ์•„์ฃผ์ง€ ์•Š์œผ๋ฉด @NotNull๋กœ ํ‘œ๊ธฐํ•ด์ค€๋‹ค๋Š” ์ ์—์„œ ๋‚˜๋ฆ„์˜ ๊ทœ์น™์ด ์žˆ๋Š” ๊ฒƒ์ด ๋ง˜์— ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ˆœํ•˜๊ฒŒ @Nullable์ด ์—†๋Š” ๊ฑด NotNull๋กœ ์ทจ๊ธ‰ํ•˜๊ณ  @Nullable์ด ์žˆ๋Š” ๊ฒฝ์šฐ null check๋ฅผ ํ•ด์ฃผ๋Š” ์‹์œผ๋กœ ์ปจ๋ฒค์…˜์„ ์žก๊ณ 
๋น„๊ต์  ๋‹จ์ˆœํ•œ ๊ทœ์น™์ด๋ผ ๋ณต์žก๋„๋„ ๋‚ฎ์€ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ๋„ ๋“ค์—ˆ์–ด์š”.

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด IDE์—์„œ ๋งˆ์šฐ์Šค๋ฅผ hoverํ•˜๋ฉด ๋‚˜์˜ค๋Š” ๋ช…์„ธ์—๋„ @Nullable์ด ์ ํ˜€์žˆ๋Š” ์ ์ด ๋ง˜์— ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

@Nullable์„ ์ฝ”๋“œ์— ์ ์šฉํ•œ ๋ชจ์Šต AS-IS, TO-BE


๊ฐœ์ธ์ ์œผ๋กœ "ํ‘œํ˜„๋ ฅ ๋†’์ด๊ธฐ" + "์ปจ๋ฒค์…˜์„ ๋งŒ๋“ค์–ด ์†Œํ†ต ๋น„์šฉ ์ค„์ด๊ธฐ"๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ดค๋Š”๋ฐ
์ž˜ ํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ํŒ๋‹จ์€ ์‹œ๊ฐ„์ด ์ง€๋‚˜๊ณ  ์‚ฌ์šฉ์„ฑ์— ๋Œ€ํ•ด ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๋Š” ์‹œ์ ์—์„œ์•ผ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์€ ์–ด๋Š์ชฝ์ด ์ข€ ๋” ์ทจํ–ฅ์ด์‹ ๊ฐ€์š”?
ํ˜น์€ java์—์„œ nullableํ•œ ๊ฐ’์„ ๋‹ค๋ฃจ๋Š” ๋…ธํ•˜์šฐ๊ฐ€ ์žˆ์œผ์‹ ๊ฐ€์š”?
์•„๋‹ˆ๋ฉด ์—ญ์‹œ ์ž๋ฐ”๋Š” ๋ฒ„๋ฆฌ๊ณ  ์ฝ”ํ‹€๋ฆฐ์ด๋‚˜ ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.


๋งํ•˜๋Š” ๊ฐ์ž์—๊ฒŒ ์ข‹์€ ์˜๊ฒฌ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ™

๋ฐ˜์‘ํ˜•