์ด๋ฒ ๊ธ์ ํตํด API ์ค๊ณ ์๋ น๋ค์ ์ดํด๋ณด์. ์ด๋ฅผ ํ์ฉํ๋ฉด ๋ฐฐ์ฐ๊ธฐ ์ฝ๊ณ , ์ฐ๊ธฐ ์ฌ์ฐ๋ฉฐ, ์ค๋ฅ ๊ฐ๋ฅ์ฑ์ด ์ ์ API๋ฅผ ๋ง๋ค ์ ์์ ๊ฒ์ด๋ค.
๐ 1. ๋ฉ์๋ ์ด๋ฆ์ ์ ์คํ ์ง์.
๋ฉ์๋ ์ด๋ฆ์ ์ ์คํ ์ง๋ ๊ฒ์ ๋ํด์๋ ๋๋ฌด๋ ๋ง์ด ๋ค์ด๋ดค์ ๊ฒ์ด๋ค. ์๊ณ ์๋ ๊ฒ์ ํ๋ฒ ๋ ์๊ธฐ์ํจ๋ค๋ ์๊ฐ์ผ๋ก ๋ณด๊ณ ๋์ด๊ฐ์.
- ํญ์ ํ์ค ๋ช ๋ช ๊ท์น์ ๋ฐ๋ผ์ผ ํ๋ค.
- ์ดํดํ ์ ์๊ณ , ๊ฐ์ ํจํค์ง์ ์ํ ๋ค๋ฅธ ์ด๋ฆ๋ค๊ณผ ์ผ๊ด๋๊ฒ ์ง์.
- ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์์ ๋๋ฆฌ ๋ฐ์๋ค์ฌ์ง๋ ์ด๋ฆ์ ์ฌ์ฉํ์.
- ๊ธด ์ด๋ฆ์ ํผํ์.
- ์ ๋งคํ๋ฉด ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ API ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์.
๐ 2. ํธ์ ๋ฉ์๋๋ฅผ ๋๋ฌด ๋ง์ด ๋ง๋ค์ง ๋ง์.
๋ฉ์๋๊ฐ ๋๋ฌด ๋ง์ ํด๋์ค๋ ์ตํ๊ณ , ์ฌ์ฉํ๊ณ , ๋ฌธ์ํํ๊ณ , ํ ์คํธํ๊ณ , ์ ์ง๋ณด์ํ๊ธฐ ์ด๋ ต๋ค. ์ธํฐํ์ด์ค๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ํด๋์ค๋ ์ธํฐํ์ด์ค๋ ์์ ์ ๊ฐ ๊ธฐ๋ฅ์ ์๋ฒฝํ ์ํํ๋ ๋ฉ์๋๋ก ์ ๊ณตํ๋๋ก ํ์. ํ์ ์ด ์์ง ์์ผ๋ฉด ๋ง๋ค์ง ๋ง์!
๐ 3. ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก์ ์งง๊ฒ ์ ์งํ์.
4๊ฐ ์ดํ๊ฐ ์ข๋ค. ํนํ, ๊ฐ์ ํ์ ์ ๋งค๊ฐ๋ณ์ ์ฌ๋ฌ ๊ฐ๊ฐ ์ฐ๋ฌ์ ๋์ค๊ฒ ํ์ง ๋ง์. ์ด๋ ์ฌ์ฉ์๊ฐ ๋งค๊ฐ๋ณ์ ์์๋ฅผ ๊ธฐ์ตํ๊ธฐ ์ด๋ ต๊ฒ ํ๊ณ , ์ค์๋ก ์์๋ฅผ ๋ฐ๊ฟ ์ ๋ ฅํด๋ ๊ทธ๋๋ก ์ปดํ์ผ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๊ณผํ๊ฒ ๊ธด ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก์ ์งง๊ฒ ์ค์ฌ์ฃผ๋ ๊ธฐ์ 3๊ฐ์ง๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฌ๋ฌ ๋ฉ์๋๋ก ์ชผ๊ฐ ๋ค.
์๋ชปํ๋ฉด ๋ฉ์๋๊ฐ ๋๋ฌด ๋ง์์ง ์ ์์ง๋ง, ์ง๊ต์ฑ(orthogonality, ๊ณตํต์ ์ด ์๋ ๊ธฐ๋ฅ๋ค์ด ์ ๋ถ๋ฆฌ๋์ด ์๋ ๊ฒ)์ ๋์ฌ ์คํ๋ ค ๋ฉ์๋ ์๋ฅผ ์ค์ฌ์ฃผ๋ ํจ๊ณผ๋ ์๋ค. - ๋งค๊ฐ๋ณ์ ์ฌ๋ฌ ๊ฐ๋ฅผ ๋ฌถ์ด์ฃผ๋ ๋์ฐ๋ฏธ ํด๋์ค๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค.
์นด๋ ํด๋์ค์ ์ซ์(rank)์ ๋ฌด๋ฌ(suit)๋ฅผ ๋ปํ๋ ๋ ๋งค๊ฐ๋ณ์๊ฐ ํฌํจ๋์ด ์๋ ๊ฒ์ ์๊ฐํ๋ฉด ๋๋ค. - ๊ฐ์ฒด ์์ฑ์ ์ฌ์ฉํ ๋น๋ ํจํด์ ๋ฉ์๋ ํธ์ถ์ ์์ฉํ๋ค.
ํด๋ผ์ด์ธํธ๋ ๊ฐ์ฒด๋ฅผ ์ ์ํ๊ณ , ํ์ํ ๊ฐ๋ง ์ค์ ํ๋ฉด ๋๋ค.
๐ 4. ๋งค๊ฐ๋ณ์์ ํ์ ์ผ๋ก๋ ํด๋์ค๋ณด๋ค๋ ์ธํฐํ์ด์ค๊ฐ ๋ ๋ซ๋ค.
๋งค๊ฐ๋ณ์๋ก ์ ํฉํ ์ธํฐํ์ด์ค๊ฐ ์๋ค๋ฉด (์ด๋ฅผ ๊ตฌํํ ํด๋์ค๊ฐ ์๋) ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ์ง์ ์ฌ์ฉํ์.
์๋ฅผ ๋ค์ด, HashMap์ ๋๊ธฐ๋ ๊ฒ์ด ์๋๋ผ Map์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด TreeMap, ConcurrentHashMap, TreeMap์ ๋ถ๋ถ๋งต ๋ฑ ๋ค์ํ Map ๊ตฌํ์ฒด๋ฅผ ์ธ์๋ก ์ฌ์ฉํ ์ ์๋ค.
๐ 5. ๋งค๊ฐ๋ณ์์ ํ์ ์ผ๋ก๋ boolean๋ณด๋ค๋ ์์ 2๊ฐ์ง๋ฆฌ ์ด๊ฑฐ ํ์ ์ด ๋ซ๋ค.
์ด๊ฑฐ ํ์ ์ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ์ฝ๊ณ ์ฐ๊ธฐ๊ฐ ๋ ์ฌ์์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํ์ง๋ฅผ ์ถ๊ฐํ๊ธฐ๋ ์ฝ๋ค.
์จ๋๊ณ ํด๋์ค์ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๊ฐ ์ธ์๋ฅผ ํตํด ์ ํฉํ ์จ๋๊ณ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค๊ณ ํด๋ณด์.
// boolean์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
Thermometer.newInstance(true)
// ์ด๊ฑฐ ํ์
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
public enum TemperatureScale { FAHRENHEIT, CELSIUS }
Thermometer.newInstance(ThmperatureScale.CELSIUS)
์ด๊ฑฐ ํ์ ์ ์ด์ฉํ๋ฉด ํจ์ฌ ๋ ์๋ฏธ๊ฐ ๋ช ํํด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์จ๋ ํ์ ์ผ๋ก ์บ๋น์จ๋(KELVIN)๋ ์ถ๊ฐํ ์ ์๋ค.
๋ฌผ๋ก ๋ฉ์๋ ์ด๋ฆ์ boolean์ ๋ฐ์์ผ ์๋ฏธ๊ฐ ๋ ๋ช ํํ ๋๋ ์์ธ ์ํฉ์ด๋ค.
ํด๋น ๊ธ์ Joshua Bloch ๋์ 'Effective Java 3/E'๋ฅผ ์ฐธ๊ณ ํ์์ต๋๋ค.