ํด๋น ๋ถ๋ถ์ ๋๋ฌด ์ฝ๋๊ฐ ๋ง์, ์ด์ ์ํ์ ์ดํ ์ํ๋ฅผ ๋๊ณ ๊ทธ ์ฌ์ด์์ ์ ์๊ฐ ์ด๋ ํ ํ๋ฆ์ผ๋ก ์ด๋ฅผ ์ฒ๋ฆฌํ๋์ง ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํ๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ํ๋ค.
Intro
ํด๋น ๋ถ๋ถ์์๋ ์ถ๋ฐ์ ์ข์์ผ๋, ํ์ฅ์์ ๋ถ์กฑํ๋ ๋ชจ๋์ ์๊ฐํ๋ค. ๊ทธ ๋ค์, ์ด๋ฅผ ๊ฐ์ ํ๊ณ ์ ๋ฆฌํ๋ ๋จ๊ณ๋ฅผ ์์ฐจ์ ์ผ๋ก ์์๋ณผ ์์ ์ด๋ค.
๋ค์์ ์ฝ๋๋ ๋ช
๋ นํ ์ธ์์ ๊ตฌ๋ฌธ์ ๋ถ์ํ๋ ํด๋์ค Args
๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
ArgsException์ด ๋ฐ์ํ์ง ์๋๋ค๋ฉด ๋ช
๋ นํ ์ธ์์ ๊ตฌ๋ฌธ์ ์ฑ๊ณต์ ์ผ๋ก ๋ถ์ํ์ผ๋ฉฐ Args ์ธ์คํด์ค์ ์ง์๋ฅผ ๋์ ธ๋ ์ข๋ค๋ ๋ง์ด๋ค. ์ธ์ ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด get~()
๋ฑ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
Args ๊ตฌํ
์ด์ ํด๋น ํด๋์ค๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์ ์ด๋ณด๊ฒ ๋ค. ์ด๋ฆ, ํจ์ ํฌ๊ธฐ, ์ฝ๋ ํ์์ ์ฃผ๋ชฉํ๋ฉฐ ์ฝ๋๋ค.
Args.java
์์์ ์๋๋ก ์ฝ๋๊ฐ ๋ฌผ ํ๋ฅด๋ฏ ์ฝํ๋ค. ๋ฐ๊นฅ์ชฝ์์ ์ฌ์ฉํ๋ method๋ ์ต์๋จ์ ์์นํด์๊ณ , ์๋๋ก ๋ด๋ ค๊ฐ ์๋ก ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ด ๋์ด๋์ด ์๋ค. ํ ๊ฐ์ง ๋จผ์ ์ฝ์ด๋ณผ ์ฝ๋๊ฐ ์๋ค๋ฉด ArgumentMarshaler
์ ์์ด๋ค. ์๋์ ์ ์๋์ด ์๋ ArgumentMarshaler
๊ฐ ๋ฐ๋ฅด๋ interface์ด๋ค.
ArgumentMarshaler.java
BooleanArgumentMarshaler.java
StringArgumentMarshaler.java
IntegerArgumentMarshaler.java
DoubleArgumentMarshaler
, StringArrayArgumentMarshaler
๋ ํจํด์ด ๊ฐ์ ์๋ตํ๋ค. ํด๋น ์ฝ๋๋ฅผ ๋ณด๋ค๊ฐ ์๋ฌธ์ด ๋๋ ๊ฒ์ด ํ๋ ์๋ค๋ฉด, ๋ฐ๋ก Error ์ฒ๋ฆฌ์ด๋ค.
ArgsException.java
์ ๋ฆฌ
๊ต์ฅํ ๋จ์ํ ๊ฐ๋
์์๋ ๋ถ๊ตฌํ๊ณ ์ฝ๋๊ฐ ๋ง์ด ํ์ํ๋ค. ์ด๋ฅผ ์ ์ ํ์
์ธ์ด์ธ ์๋ฐ๋ฅผ ์ฌ์ฉํด์ ์ด๋ค. (Swift๋ ๋ํ ์ง๋) ํ์ง๋ง ์ฝ์ด๋ณด๋ฉด ์๊ฒ ์ง๋ง ๊ต์ฅํ ๊ตฌ์กฐ๋ ๊น๋ํ๊ณ ์์ง์ธ ํ๋ก๊ทธ๋จ์ด๋ค.
์ธ์ ์ ํ์ ์ถ๊ฐํ๊ธฐ ์ํด์๋ ArgumentMarshaler
๋ฅผ ์ฑํํ์ฌ get ํจ์๋ฅผ ์ถ๊ฐํ๊ณ , parseSchemaElement
ํจ์์ case ํ๋๋ง ์ถ๊ฐํ๋ฉด ๋๋ค.
์ด๋ป๊ฒ ์งฐ๋๋๊ณ ?
์ฒ์๋ถํฐ ์ด๋ ๊ฒ ๊ตฌํํ ์ ์์์๊น? ์๋๋ค. ์ ์ง์ ์ผ๋ก ๊ฐ์ ํ๋ค. ํ๋ก๊ทธ๋๋ฐ์ ๊ณผํ๋ณด๋ค ๊ณต์(craft)์ ๊ฐ๊น๋ค. ๊นจ๋ํ ์ฝ๋๋ฅผ ์ง๋ ค๋ฉด ๋จผ์ ์ง์ ๋ถํ ์ฝ๋๋ฅผ ์ง ๋ค์ ์ ๋ฆฌํด์ผ ํ๋ค๋ ์๋ฏธ์ด๋ค.
๋๋ค์์ ์ ์ฐธ ํ๋ก๊ทธ๋๋จธ๋ (๋๋ค์ ์ด๋ฉ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก) ์ด ์ถฉ๊ณ ๋ฅผ ์ถฉ์คํ ๋ฐ๋ฅด์ง ์๋๋ค. ๊ทธ๋ค์ ๋ฌด์กฐ๊ฑด ๋์๊ฐ๋ ํ๋ก๊ทธ๋จ์ ๋ชฉํ๋ก ์ก๋๋ค. ์ผ๋จ ํ๋ก๊ทธ๋จ์ด โ๋์๊ฐ๋ฉดโ ๋ค์ ์
๋ฌด๋ก ๋์ด๊ฐ๋ค. โ๋์๊ฐ๋โ ํ๋ก๊ทธ๋จ์ ๊ทธ ์ํ๊ฐ ์ด๋ป๋ ๊ทธ๋๋ก ๋ฒ๋ ค๋๋ค. ๊ฒฝํ์ด ํ๋ถํ ์ ๋ฌธ ํ๋ก๊ทธ๋๋จธ๋ผ๋ฉด ์ด๋ฐ ํ๋์ด ์ ๋ฌธ๊ฐ๋ก์ ์์ด ํ์๋ผ๋ ์ฌ์ค์ ์ ์๋ค.
Args: 1์ฐจ ์ด์
๊ทธ๋ผ ์ฒ์์ ์ด ์ฝ๋๊ฐ ์ด๋ ๋์ง ํ์ธํด๋ณด์.
์ด๋ฐ ์ฝ๋๋ฅผ ์ฒ์๋ถํฐ ์๋ํ ๊ฒ์ ์๋์๋ค. ํจ์ ์ด๋ฆ์ด๋ ๋ณ์ ์ด๋ฆ์ ์ ํํ ๋ฐฉ์, ์ด์คํ์ง๋ง ๋๋ฆ๋๋ก ๊ตฌ์กฐ๊ฐ ์๋ค๋ ์ฌ์ค ๋ฑ์ด ๋
ธ๋ ฅ์ ์ฆ๊ฑฐ๋ค. ํ์ง๋ง ์ด๋ ์๊ฐ ํ๋ก๊ทธ๋จ์ ๋ด ์์ ๋ฒ์ด๋ฌ๋ค. ์ฒซ ๋ฒ์ ์ด๋ Boolean ์ธ์๋ง ์ง์ํ๋ ์ด๊ธฐ ๋ฒ์ ์์ String๊ณผ Integer ์ธ์ ์ ํ์ ์ถ๊ฐํ๋ฉด์ ๋ถํฐ ์ฌ์์ด ์์๋๋ค.
๊ทธ๋์ ๋ฉ์ท๋ค
์ถ๊ฐํ ์ธ์ ์ ํ์ด ์ ์ด๋ ๋ ๊ฐ๋ ๋ ์์์ง๋ง, ์ด ์ํ์์ ์ถ๊ฐํ๋ฉด ์ฝ๋๊ฐ ๋ ๋๋น ์ง ๊ฒ์ด๋ผ๋ ์ฌ์ค์ด ์๋ช
ํ๋ค. ๊ณ์ ๋ฐ์ด๋ถ์ด๋ฉด ํ๋ก๊ทธ๋จ์ ์ด๋ป๊ฒ๋ ์์ฑํ๊ฒ ์ง๋ง ๊ทธ๋ฌ๋ค๊ฐ๋ ๋๋ฌด ์ปค์ ์๋๊ธฐ ์ด๋ ค์ด ๊ณจ์นซ๊ฑฐ๋ฆฌ๊ฐ ์๊ฒจ๋ ์ฐธ์ด์๋ค. ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ ์ง๋ณด์ํ๊ธฐ ์ข์ ์ํ๋ก ๋ง๋ค๋ ค๋ฉด ์ง๊ธ์ด ์ ๊ธฐ๋ผ ํ๋จํ๋ค.
์ด๋ฐ ํ์ด๋ฐ์ ์ฌ์ค ์ฐ๋ฆฌ๊ฐ ์ฝ๋๋ฅผ ์ง๋ฉด์๋ ์์ฐ์ค์ ๋๋ผ๋ ํฌ์ธํธ์ด๋ค. ์ฆ, ์ง๊ธํ๋ ๋ฐฉ์์ ๊ณ ์งํ์ ๋ ์ป๋ ํจ์ฉ๋ณด๋ค, ์ข์ ๊ตฌ์กฐ๋ฅผ ์ ํํ์ฌ ์งํํ์ ๋ ์ป๋ ํจ์ฉ์ด ํฌ๋ค๊ณ ์ง๊ด์ ์ผ๋ก ๋๋ผ๋ ์ง์ ์ด๋ค. ๋ฆฌํฉํ ๋ง์ ํ๋ฉด์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ๋๊ผ๋ ์ ์ ์ ๋ฆฌํ๋ค.
- ์ธ์ ์ ํ์ ์ถ๊ฐํ๋ฉด์, ์ ์ธ์ ์ ํ์ ์ถ๊ฐํ๊ธฐ ์ํด์๋ ์ฃผ์ ์ง์ ์ธ๊ณณ์ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค๋ ์ฌ์ค์ ์์๋ค.
- ๋ช
๋ นํ ์ธ์์์ ์ธ์ ์ ํ์ ๋ถ์ํด์ ์ง์ง ์ ํ์ผ๋ก ๋ณ๊ฒฝํด์ผ ํ๋ค.
- get~ ๋ฉ์๋๋ฅผ ํตํด ์ง์ง ์ ํ์ ๋ฐํํ๋ค.
์ด๋ฌํ ์กฐ๊ฑด์ ๊ธฐ๋ฐ์ผ๋ก ArgumentMarshaler
๋ผ๋ ๊ฐ๋
์ ๋ง๋ค์๋ค.
์ ์ง์ ์ผ๋ก ๊ฐ์ ํ๋ค
ํ๋ก๊ทธ๋จ์ ๋ง์น๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ ์ค ํ๋๋ ๊ฐ์ ์ด๋ผ๋ ์ด๋ฆ ์๋ ๊ตฌ์กฐ๋ฅผ ํฌ๊ฒ ๋ค์ง๋ ํ์๋ค. ์ด๋ฌํ ์ ์์ TDD๋ฅผ ์ฌ์ฉํ๋ค. ์ฆ, ์ธ์ ๋ผ๋ ์์คํ
์ด ๋์๊ฐ์ผ ํ๋ค๋ ์์น์ ์ ์ฉํ๊ธฐ ์ํ ์์ง๋ค.
๋ณ๊ฒฝ ์ ํ์ ์์คํ
์ ์ค์๋ ์ฌ๋ถ๋ฅผ ๊ฒ์ฆํ๊ธฐ ์ํด์๋ ์ธ์ ๋ ์คํ์ด ๊ฐ๋ฅํ Test Suit๊ฐ ํ์ํ๋ค. ์ด๋ฅผ ์ํด ํ์ฌ Class์ ๋์์ ํ์ธํ ์ ์๋ test case๋ฅผ ๋ง๋ค์ด ๋์๋ค. ์ด ์ฝ๋๋ค์ ํต๊ณผํ๋ค๋ฉด ์ฌ๋ฐ๋ก ๋์ํ๋ค๊ณ ๋ด๋ ๋ฌด๋ฐฉํ๋ค.
์ด ๋ค์์์ผ ์์คํ
์ ๋ณ๊ฒฝ์ ๊ฐํ๊ธฐ ์์ํ๋ค. ๋จผ์ , ArgumentMarshaler
์ ๊ณจ๊ฒฉ์ ์ถ๊ฐํ๋ค.
๊ทธ ๋ค์์ผ๋ก
String ์ธ์
์ฒ์ Bool์ด ํต๊ณผํ๋ค๋ฉด String ์ฒ๋ฆฌ๋ ๊ฐ๋จํ๋ค. ์ ์ฌํ๊ฒ ์ฒ๋ฆฌํด์ฃผ๋ฉด ๋๋ค. parse~
, set~
, get~
ํจ์๋ฅผ ์๋ก ๋ง๋ ArguementMarshaler
๋ฅผ ๊ตฌํํ StringArguementMarshaler
๋ก ํ์ฒดํ์.
์ด๋ ๊ฒ ์ ์ฌํ ๋ถ๋ถ์ ์ฐพ์์ ๊ตฌํ์ ์๋ฃํ๋ค๋ฉด ๋ค์ ๋ฌธ์ ๋ Exception์ด๋ค. Exception์ ์ ๋ง ๊ผด๋ดฌ๊ธฐ ์ซ์ ์ฝ๋์ด๋ค. ์ ์ดํด๋ณด๋ฉด, Exception ์ฝ๋๋ Args์ ์ํ์ง ์๋ ์ฝ๋์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด ๋ชจ๋ ์์ธ๋ฅผ ํ๋ฐ๋ก ๋ชจ์ Args ๋ชจ๋๊ณผ ์๋ฒฝํ๊ฒ ๋ถ๋ฆฌ์ํค์. ์ด๋ ๊ฒ ํด์ ์์ ์ฝ๋๊ฐ ๋์ค๊ฒ ๋์๋ค.
๊ฒฐ๋ก
๊ทธ์ ๋์๊ฐ๋ ์ฝ๋๋ง์ผ๋ก๋ ๋ถ์กฑํ๋ค. ๋จ์ํ ๋์๊ฐ๋ ์ฝ๋์ ๋ง์กฑํ๋ ํ๋ก๊ทธ๋๋จธ๋ ์ ๋ฌธ๊ฐ ์ ์ ์ด ๋ถ์กฑํ๋ค. ๋์ ์ฝ๋๋งํผ ์ง๋ฐฐ์ ์ผ๋ก ๊ฐ๋ฐ ํ๋ก์ ํธ์ ์
์ํฅ์ ๋ฏธ์น๋ ์์ธ๋ ์๋ค. ๋์ ์ผ์ ์ ๋ค์ ์ง๋ฉด ๋๋ค. ๋์ ์๊ตฌ์ฌํญ์ ๋ค์ ์ ์ํ๋ฉด ๋๋ค. ๋์ ํ ์ญํ์ ๋ณต๊ตฌํ๋ฉด ๋๋ค. ํ์ง๋ง ๋์ ์ฝ๋๋ ์ฉ์ด ๋ฌธ๋๋ฌ์ง๋ค. ์ ์ ๋ฌด๊ฒ๊ฐ ๋์ด๊ฐ ๋ฐ๋ชฉ์ ์ก๋๋ค.
์ฝ๋๋ ์ ๋ฆฌํ ์๋ ์๋ค. ํ์ง๋ง ๋น์ฉ์ด ํฌ๋ค. ์ค๋๋ ์์กด์ฑ์ ๊นจ๊ธฐ ์ํด์๋ ์๋นํ ์๊ฐ๊ณผ ์ธ๋ด์ฌ์ด ๋ ๋ค. ๋ฐ๋ฉด ์ฒ์๋ถํฐ ๊นจ๋ํ ์ํ๋ก ์ ์งํ๋ ค๋ ์ต๊ด์ ๊ฐ๋๋ค๋ฉด ์ด๋ ต์ง ์๋ค. ์ธ์ ๋ ์ฝ๋๋ ์ต๋ํ ๊น๋ํ๊ณ ๋จ์ํ๊ฒ ์ ๋ฆฌํ์.
Reference