8์ฅ. ๊ฒฝ๊ณ ๐
์์คํ ์ ๋ค์ด๊ฐ๋ ๋ชจ๋ ์ํํธ์จ์ด๋ฅผ ์ง์ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ค. ๋๋ก๋ ํจํค์ง๋ฅผ ์ฌ๊ณ , ๋๋ก๋ ์คํ ์์ค๋ฅผ ์ด์ฉํ๋ค. ๋๋ก๋ ์ฌ๋ด ๋ค๋ฅธ ํ์ด ์ ๊ณตํ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋ค ์์ผ๋ก๋ ์ด ์ธ๋ถ ์ฝ๋๋ฅผ ์ฐ๋ฆฌ ์ฝ๋์ ๊น๋ํ๊ฒ ํตํฉํด์ผ๋ง ํ๋ค. ์ด ์ฅ์์๋ ์ํํธ์จ์ด ๊ฒฝ๊ณ๋ฅผ ๊น๋ํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฒ๊ณผ ๊ธฐ๊ต๋ฅผ ์ดํด๋ณธ๋ค.
- Map์ (ํน์ ์ ์ฌํ ๊ฒฝ๊ณ ์ธํฐํ์ด์ค๋ฅผ) ์ฌ๊ธฐ์ ๊ธฐ ๋๊ธฐ์ง ๋ง๋ผ.
Map sensors = new HashMap();
Sensor s = (Sensor)sensors.get(sensorId);
์์ ์ฝ๋๋ ์๋๊ฐ ๋ช ํํ ๋๋ฌ๋์ง ์๋ ๊นจ๋ํ์ง ์์ ์ฝ๋์ด๋ค. ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ์ ๋ค๋ฆญ์ค(Generics)๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋ ๊ฐ๋ ์ฑ์ด ํฌ๊ฒ ๋์์ง์ง๋ง Map<String, Sensor>๊ฐ ์ฌ์ฉ์์๊ฒ ํ์ํ์ง ์์ ๊ธฐ๋ฅ๊น์ง ์ ๊ณตํ๋ค.
Map<String, Sensor> sensors = new HashMap<Sensor>();
...
Sensor s = sensors.get(sensorId);
์๋ ์ฝ๋๋ ๊ฒฝ๊ณ ์ธํฐํ์ด์ค์ธ Map์ Sensors ์์ผ๋ก ์จ๊ธด๋ค. ๋ฐ๋ผ์ Map ์ธํฐํ์ด์ค๊ฐ ๋ณํ๋๋ผ๋ ๋๋จธ์ง ํ๋ก๊ทธ๋จ์๋ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค. ๋ํ Sensors ํด๋์ค๋ ํ๋ก๊ทธ๋จ์ ํ์ํ ์ธํฐํ์ด์ค๋ง ์ ๊ณตํ๋ค. ๊ทธ๋์ ์ฝ๋๋ ์ดํดํ๊ธฐ๋ ์ฝ์ง๋ง ์ค์ฉํ๊ธฐ๋ ์ด๋ ต๋ค.
public class Sensors {
private Map sensors = new HashMap();
public Sensor getById(String id) {
return (Sensor) sensors.get(id);
}
...
}
8์ฅ ๊ฒฐ๋ก
์ธ๋ถ ํจํค์ง๋ฅผ ํธ์ถํ๋ ์ฝ๋๋ ๊ฐ๋ฅํ ์ค์ฌ ๊ฒฝ๊ณ๋ฅผ ๊ด๋ฆฌํ์. ์๋ก์ด ํด๋์ค๋ก ๊ฒฝ๊ณ๋ฅผ ๊ฐ์ธ๊ฑฐ๋ ์๋๋ฉด ADAPTER ํจํด์ ์ฌ์ฉํด ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ธํฐํ์ด์ค๋ฅผ ํจํค์ง๊ฐ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค๋ก ๋ณํํ์. ์ด๋ ๋ฐฉ๋ฒ์ด๋ ์ฝ๋ ๊ฐ๋ ์ฑ์ด ๋์์ง๋ฉฐ, ๊ฒฝ๊ณ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ผ๊ด์ฑ๋ ๋์์ง๋ฉฐ, ์ธ๋ถ ํจํค์ง๊ฐ ๋ณํ์ ๋ ๋ณ๊ฒฝํ ์ฝ๋๋ ์ค์ด๋ ๋ค.
9์ฅ. ๋จ์ ํ ์คํธ ๐ซ
- ํ
์คํธ๋ ์ ์ฐ์ฑ, ์ ์ง๋ณด์์ฑ, ์ฌ์ฌ์ฉ์ฑ์ ์ ๊ณตํ๋ค.
์ฝ๋์ ์ ์ฐ์ฑ, ์ ์ง๋ณด์์ฑ, ์ฌ์ฌ์ฉ์ฑ์ ์ ๊ณตํ๋ ๋ฒํ๋ชฉ์ด ๋ฐ๋ก ๋จ์ํ ์คํธ๋ค. ํ ์คํธ ์ผ์ด์ค๊ฐ ์๋ค๋ฉด ๋ชจ๋ ๋ณ๊ฒฝ์ด ์ ์ ์ ์ธ ๋ฒ๊ทธ๋ค. ํ ์คํธ ์ผ์ด์ค๊ฐ ์๋ค๋ฉด ๋ณ๊ฒฝ์ด ์ฌ์์ง๋ค.
๋ฐ๋ผ์ ํ ์คํธ ์ฝ๋๊ฐ ์ง์ ๋ถํ๋ฉด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฅ๋ ฅ์ด ๋จ์ด์ง๋ฉฐ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ๋ ๋ฅ๋ ฅ๋ ๋จ์ด์ง๋ค. ํ ์คํธ ์ฝ๋๊ฐ ์ง์ ๋ถํ ์๋ก ์ค์ ์ฝ๋๋ ์ง์ ๋ถํด์ง๋ค. ๊ฒฐ๊ตญ ํ ์คํธ ์ฝ๋๋ฅผ ์์ด๋ฒ๋ฆฌ๊ณ ์ค์ ์ฝ๋๋ ๋ง๊ฐ์ง๋ค. - ๊ฐ๋
์ฑ, ๊ฐ๋
์ฑ, ๊ฐ๋
์ฑ
๊นจ๋ํ ํ ์คํธ ์ฝ๋๋ฅผ ๋ง๋ค๋ ค๋ฉด ์ธ ๊ฐ์ง๊ฐ ํ์ํ๋ค. ๊ฐ๋ ์ฑ, ๊ฐ๋ ์ฑ, ๊ฐ๋ ์ฑ. ์ด์ฉ๋ฉด ๊ฐ๋ ์ฑ์ ์ค์ ์ฝ๋๋ณด๋ค ํ ์คํธ ์ฝ๋์ ๋๋์ฑ ์ค์ํ๋ค. ์ด๋ฅผ ์ํด์๋ ๋ช ๋ฃ์ฑ, ๋จ์์ฑ, ํ๋ถํ ํํ๋ ฅ์ด ํ์ํ๋ค. ํ ์คํธ ์ฝ๋๋ ์ต์์ ํํ์ผ๋ก ๋ง์ ๊ฒ์ ๋ํ๋ด์ผ ํ๋ค. - ํ
์คํธ๋ ์ธ ๋ถ๋ถ์ผ๋ก ๋๋ ์ง๋ค.
์ฒซ ๋ถ๋ถ์ ํ ์คํธ ์๋ฃ๋ฅผ ๋ง๋ ๋ค. ๋ ๋ฒ์งธ ๋ถ๋ถ์ ํ ์คํธ ์๋ฃ๋ฅผ ์กฐ์ํ๋ฉฐ, ์ธ ๋ฒ์งธ ๋ถ๋ถ์ ์กฐ์ํ ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ๋ค. - ๊ฐ๋
๋น assert ๋ฌธ ์๋ฅผ ์ต์๋ก ์ค์ฌ๋ผ
๋ง์ฝ assert ๋ฌธ์ด ๋จ ํ๋์ธ ํจ์๊ฐ ์๋ค๋ฉด ํจ์๋ ๊ฒฐ๋ก ์ด ํ๋๋ผ์ ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ณ ๋น ๋ฅด๋ค. - ํ ์คํธ ํจ์ ํ๋๋ ๊ฐ๋ ํ๋๋ง ํ ์คํธํ๋ผ
- F.I.R.S.T
๊นจ๋ํ ํ ์คํธ๋ ๋ค์ ๋ค์ฏ ๊ฐ์ง ๊ท์น์ ๋ฐ๋ฅธ๋ค.
๋น ๋ฅด๊ฒ(Fast)
ํ ์คํธ๋ ๋นจ๋ผ์ผ ํ๋ค. ํ ์คํธ๋ ๋นจ๋ฆฌ ๋์์ผ ํ๋ค๋ ๋ง์ด๋ค. ํ ์คํธ๊ฐ ๋๋ฆฌ๋ฉด ์์ฃผ ๋๋ฆด ์๋๋ฅผ ๋ชป ๋ธ๋ค. ์์ฃผ ๋๋ฆฌ์ง ์์ผ๋ฉด ์ด๋ฐ์ ๋ฌธ์ ๋ฅผ ์ฐพ์๋ด ๊ณ ์น์ง ๋ชปํ๋ค. ์ฝ๋๋ฅผ ๋ง์๊ป ์ ๋ฆฌํ์ง๋ ๋ชปํ๋ค. ๊ฒฐ๊ตญ ์ฝ๋ ํ์ง์ด ๋ง๊ฐ์ง๊ธฐ ์์ํ๋ค.
๋ ๋ฆฝ์ ์ผ๋ก(Independent)
๊ฐ ํ ์คํธ๋ ์๋ก ์์กดํ๋ฉด ์ ๋๋ค. ํ ํ ์คํธ๊ฐ ๋ค์ ํ ์คํธ๊ฐ ์คํ๋ ํ๊ฒฝ์ ์ค๋นํด์๋ ์ ๋๋ค. ๊ฐ ํ ์คํธ๋ ๋ ๋ฆฝ์ ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ์ด๋ค ์์๋ ์คํํด๋ ๊ด์ฐฎ์์ผ ํ๋ค. ํ ์คํธ๊ฐ ์๋ก์๊ฒ ์์กดํ๋ฉด ํ๋๊ฐ ์คํจํ ๋ ๋๋จธ์ง๋ ์๋ฌ์ ์คํจํ๋ฏ๋ก ์์ธ์ ์ง๋จํ๊ธฐ ์ด๋ ค์์ง๋ฉฐ ํ๋ฐ ํ ์คํธ๊ฐ ์ฐพ์๋ด์ผ ํ ๊ฒฐํจ์ด ์จ๊ฒจ์ง๋ค.
๋ฐ๋ณต๊ฐ๋ฅํ๊ฒ(Repeatable)
ํ ์คํธ๋ ์ด๋ค ํ๊ฒฝ์์๋ ๋ฐ๋ณต ๊ฐ๋ฅํด์ผ ํ๋ค. ์ค์ ํ๊ฒฝ, QA ํ๊ฒฝ, ๋ฒ์ค๋ฅผ ํ๊ณ ์ง์ผ๋ก ๊ฐ๋ ๊ธธ์ ์ฌ์ฉํ๋ (๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋์ง ์์) ๋ ธํธ๋ถ ํ๊ฒฝ์์๋ ์คํํ ์ ์์ด์ผ ํ๋ค. ํ ์คํธ๊ฐ ๋์๊ฐ์ง ์๋ ํ๊ฒฝ์ด ํ๋๋ผ๋ ์๋ค๋ฉด ํ ์คํธ๊ฐ ์คํจํ ์ด์ ๋ฅผ ๋๋ฌ๋ผ ๋ณ๋ช ์ด ์๊ธด๋ค. ๊ฒ๋ค๊ฐ ํ๊ฒฝ์ด ์ง์๋์ง ์๊ธฐ์ ํ ์คํธ๋ฅผ ์ํํ์ง ๋ชปํ๋ ์ํฉ์ ์ง๋ฉดํ๋ค.
์๊ฐ๊ฒ์ฆํ๋(Self_Validating)
ํ ์คํธ๋ boolean ๊ฐ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ด์ผ ํ๋ค. ์ฑ๊ณต ์๋๋ฉด ์คํจ๋ค. ํต๊ณผ ์ฌ๋ถ๋ฅผ ์๋ ค๊ณ ๋ก๊ทธ ํ์ผ์ ์ฝ๊ฒ ๋ง๋ค์ด์๋ ์ ๋๋ค. ํต๊ณผ ์ฌ๋ถ๋ฅผ ๋ณด๋ ค๊ณ ํ ์คํธ ํ์ผ ๋ ๊ฐ๋ฅผ ์์์ ์ผ๋ก ๋น๊ตํ๊ฒ ๋ง๋ค์ด์๋ ์ ๋๋ค. ํ ์คํธ๊ฐ ์ค์ค๋ก ์ฑ๊ณต๊ณผ ์คํจ๋ฅผ ๊ฐ๋ ํ์ง ์๋๋ค๋ฉด ํ๋จ์ ์ฃผ๊ด์ ์ด ๋๋ฉฐ ์ง๋ฃจํ ์์์ ํ๊ฐ๊ฐ ํ์ํ๊ฒ ๋๋ค.
์ ์์(Timely)
ํ ์คํธ๋ ์ ์์ ์์ฑํด์ผ ํ๋ค. ๋จ์ ํ ์คํธ๋ ํ ์คํธํ๋ ค๋ ์ค์ ์ฝ๋๋ฅผ ๊ตฌํํ๊ธฐ ์ง์ ์ ๊ตฌํํ๋ค. ์ค์ ์ฝ๋๋ฅผ ๊ตฌํํ ๋ค์์ ํ ์คํธ ์ฝ๋๋ฅผ ๋ง๋ค๋ฉด ์ค์ ์ฝ๋๊ฐ ํ ์คํธํ๊ธฐ ์ด๋ ต๋ค๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ ์ง๋ ๋ชจ๋ฅธ๋ค. ์ด๋ค ์ค์ ์ฝ๋๋ ํ ์คํธํ๊ธฐ ๋๋ฌด ์ด๋ ต๋ค๊ณ ํ๋ช ๋ ์ง ๋ชจ๋ฅธ๋ค. ํ ์คํธ๊ฐ ๋ถ๊ฐ๋ฅํ๋๋ก ์ค์ ์ฝ๋๋ฅผ ์ค๊ณํ ์ง๋ ๋ชจ๋ฅธ๋ค.
9์ฅ ๊ฒฐ๋ก
ํ ์คํธ ์ฝ๋๊ฐ ๋ฐฉ์น๋์ด ๋ง๊ฐ์ง๋ฉด ์ค์ ์ฝ๋๋ ๋ง๊ฐ์ง๋ค. ํ ์คํธ ์ฝ๋๋ฅผ ๊นจ๋ํ๊ฒ ์ ์งํ์.
'๐ ๊ฐ๋ฐ ์์ > ํด๋ฆฐ ์ฝ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํด๋ฆฐ ์ฝ๋(Clean Code) - 11์ฅ, 12์ฅ (0) | 2023.01.11 |
---|---|
ํด๋ฆฐ ์ฝ๋(Clean Code) - 10์ฅ (0) | 2023.01.11 |
ํด๋ฆฐ ์ฝ๋(Clean Code) - 7์ฅ (0) | 2023.01.10 |
ํด๋ฆฐ ์ฝ๋(Clean Code) - 4์ฅ, 5์ฅ, 6์ฅ (0) | 2023.01.09 |
ํด๋ฆฐ ์ฝ๋(Clean Code) - 1์ฅ, 2์ฅ, 3์ฅ (0) | 2023.01.08 |