ํฐ์คํ ๋ฆฌ ๋ทฐ
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ํ ๊ฐ์ ๋ค๋ฃจ๋ ๋
ธํ์ฐ๊ฐ ์์ผ์ ๊ฐ์?
์๋๋ฉด ์ญ์ ์๋ฐ๋ ๋ฒ๋ฆฌ๊ณ ์ฝํ๋ฆฐ์ด๋ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค ์๋ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋งํ๋ ๊ฐ์์๊ฒ ์ข์ ์๊ฒฌ ๋ถํ๋๋ฆฝ๋๋ค. ๊ฐ์ฌํฉ๋๋ค ๐
- Total
- Today
- Yesterday
- ์คํ/ํ
- ์ถ์ ์ง๋
- kotlin s3 upload
- mysql
- ํด์
- HTTP
- ์ข์ ์์ง๋์ด
- ์ฅ์ ํ๊ณ
- ์๊ณ ๋ฆฌ์ฆ
- ์ฝ๋ฉํ ์คํธ
- ๊น์ด/๋๋น ์ฐ์ ํ์(DFS/BFS)
- ๋ฑ ํฌ์๋ฌ๋ ๊ฐ๋ฐ์
- Golang
- Aws Reinvent 2023
- AWS re:Invent 2023
- grpc client
- ์ข์ ๊ฐ๋ฐ์
- mysql ์คํ ๊ณํ
- ์ข์ ๊ฐ๋ฐ์ ๋๊ธฐ
- ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค
- 2023 ๊ฐ๋ฐ์ ํ๊ณ
- 2023 ํ๊ณ
- ํ(Heap)
- rate limit
- ๋ฐฑ์ค
- 2๋ ์ฐจ ์๋ฒ ๊ฐ๋ฐ์
- ์ข์ ์ฝ๋๋ ๋ฌด์์ธ๊ฐ?
- golang oomkilled
- Go
- ํ๋ก๊ทธ๋๋จธ์ค
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |