๐ฃ ์๋ก
ํจ์๊ฐ ์ฝ๊ธฐ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฌ์ฐ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?, ์๋๋ฅผ ๋ถ๋ช ํ ํํํ๋ ค๋ฉด?, ์ฒ์ ์ฝ๋ ์ฌ๋์ด ํ๋ก๊ทธ๋จ ๋ด๋ถ๋ฅผ ์ง๊ด์ ์ผ๋ก ํ์ ํ๊ธฐ ์ํด์ ? ์ด์ ๊ฐ์ ์ง๋ฌธ์ ๋ต๋ณํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๊ฐํ๊ณ ์ ํ๋ค.
๐ ์๊ฒ ๋ง๋ค์ด๋ผ
ํจ์๋ฅผ ๋ง๋๋ ๊ท์น์ ์ฒซ์งธ๋ ์๊ฒ, ๋์งธ๋ ์์์ผ ํ๋ค. ์ผํธ ๋ฐฑ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ชจ๋ ํจ์๊ฐ 2~4์ค ์ ๋๋ผ๊ณ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์๊ฒ ๋ง๋ค์ด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น? ์ด์ ๋ํ ๊ทผ๊ฑฐ๋ฅผ ๋ช
ํํ ์ ์ํ๊ธฐ๋ ์ด๋ ต๋ค. ํจ์๊ฐ ํฌ๋ฉด ๊ทธ ๋งํผ ๋ง์ ์ผ์ ํ๊ณ ์๋ ๊ฒ์ด ์๋๊น?
๋ธ๋ก๊ณผ ๋ค์ฌ์ฐ๊ธฐ
์ค์ฒฉ ๊ตฌ์กฐ๊ฐ ์๊ธธ๋งํผ ํจ์๋ ์ปค์ง๋ฉด ์๋๋ค. ๋ค์ฌ์ฐ๊ธฐ ์์ค์ 1๋จ์ด๋ 2๋จ์ ๋์ด์๋ฉด ์๋๋ค๊ณ ์ฑ ์์ ์๊ฐํ๋ค. ํ์ง๋ง ๊ทน๋จ์ ์ผ๋ก 1๋จ์ ์ ์งํ๋ ์ฐ์ต์ ํ๋ ๊ฒ์ด ์ข๊ฒ ๋ค.
๐ ํ ๊ฐ์ง๋ง ํด๋ผ
ํจ์๋ ํ ๊ฐ์ง๋ฅผ ํด์ผํ๋ฉฐ, ๊ทธ ํ ๊ฐ์ง๋ ์ํด์ผ ํ๋ค. ํ์ง๋ง ํ ๊ฐ์ง๋ก ํํํ๋ ๊ฒ์ ์ด๋ ต๋ค. ์ฐ๋ฆฌ๋ ํจ์๋ก ์ด๋ ํ ๋์์ ํํํ๋ค. ์๋ฅผ ๋ค์ด ์ฐ๋ ๊ธฐ๋ฅผ ํด์งํต์ ๋ฒ๋ฆฌ๋ ๋์์ ์ธ๋ถ์ ์ผ๋ก ๋๋๋ฉด ์๋์ ๊ฐ๋ค.
- ์ฐ๋ ๊ธฐ๋ฅผ ํ๋จํ๋ค.
- ์ฐ๋ ๊ธฐ๋ฅผ ์ค๋๋ค.
- ์ฐ๋ ๊ธฐ๋ฅผ ํด์งํต์ ๋ฃ๋๋ค.
ํ ๊ฐ์ง ๋์์ ์ํํ๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก 3๊ฐ์ง ๋์์ ์ํํด์ผ ํ๋ค. ์ฑ ์์ ์ถ์ํ ์์ค์ด ํ๋์ธ ๋จ๊ณ๋ง ์ํํ๋ค๋ฉด ํด๋น ํจ์๋ ํ ๊ฐ์ง ์์ ๋ง ํ๋ ํจ์๋ผ๊ณ ํ๋ค. ๋ง์ด ์ด๋ ต๊ฒ ๋๊ปด์ง ์ ์์ง๋ง ์์๋ฅผ ๋ณด๋ฉด ๊ทธ๋ ๊ฒ ์ด๋ ค์ด ๊ฒ์ ์๋๋ค. ์ฐ๋ ๊ธฐ๋ฅผ ํด์งํต์ ๋ฒ๋ฆฌ๋ ํจ์ ์๋์์ 3๊ฐ์ง ํจ์๋ฅผ ํธ์ถํด์ผ ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ๋ฐ๋ผ์ ํจ์ ์ด๋ฆ ์๋์์ ์ถ์ํ ์์ค์ ํ๋๋ผ๊ณ ์ ์ ์๋ค. ์ฆ ํ ๊ฐ์ง ์์ ๋ง ํ๋ ํจ์๋ ํจ์ ์์์ ๋ชจ๋ ๋ฌธ์ฅ์ ์ถ์ํ ์์ค์ด ๋์ผํด์ผ ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ์ฃผ์ํด์ผ ํ ์ ์ ์ถ์ํ ์์ค์ ์์์๋ก ์ฝ๋๋ฅผ ์ฝ๋ ์ฌ๋์ ํท๊ฐ๋ฆฌ๊ธฐ ์ฝ๋ค.
๐ ๋ด๋ ค๊ฐ๊ธฐ ๊ท์น(์์์ ์๋๋ก ์ฝ๊ธฐ)
๋น์ฐํ ์์์ ์๋๋ก ์ฝ๋๊ฑฐ ์๋๊ฐ? ๋ผ๋ ์๊ฐ์ด ๋ค ์ ์์ง๋ง, ์ค์ํ ๊ฒ์ ์ด์ผ๊ธฐ์ฒ๋ผ ์ฝํ์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ฑ ์์ ์์์ ์๋๋ก ์ฝ์ผ๋ฉด ํจ์ ์ถ์ํ ์์ค์ด ํ ๋ฒ์ ํ ๋จ๊ณ์ฉ ๋ฎ์์ง๋ ๊ฒ์ ๋ด๋ ค๊ฐ๊ธฐ ๊ท์น์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. TO ๋ฌธ๋จ์ ์ฝ๋ฏ์ด ํ๋ก๊ทธ๋จ์ด ์ฝํ์ผ ํ๋ค๊ณ ํ๋๋ฐ ์ฌ๊ธฐ์ TO๋ ์์ด๋ก ~ํ๋ ค๋ฉด์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค. ๋ค์ ๋งํด TO ๋ฌธ๋จ์ ํ์ฌ ์ถ์ํ ์์ค์ ์ค๋ช ํ๋๋ฐ ์๋ ์์๋ฅผ ๋ณด๋ฉด์ ์ดํด๋ฅผ ํด๋ณด์.
- TO ๋ฌด์์ ํ๋ ค๋ฉด, A๋ฅผ ํ๊ณ , B๋ฅผ ํ๊ณ , C๋ฅผ ํด์ผ ํ๋ค.
- TO A๋ฅผ ํ๋ ค๋ฉด, ์ด๋ ๊ฒ ํด์ผ ํ๋ค.
- TO B๋ฅผ ํ๋ ค๋ฉด, ์ด๋ ๊ฒ ํด์ผ ํ๋ค.
- ...
์ฌ๊ธฐ์ ํต์ฌ์ ์ ์์์ฒ๋ผ ์์์ ์๋๋ก TO ๋ฌธ๋จ์ ์ฝ์ด๋ด๋ ค ๊ฐ๋ฏ์ด ์ฝ๋๋ฅผ ๊ตฌํํ๋ฉด, ์ถ์ํ ์์ค์ ์ผ๊ด์ฑ ์๊ฒ ์ ์งํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๐ Switch ๋ฌธ
switch ๋ฌธ์ N๊ฐ์ง ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ์๊ฒ ๋ง๋ค๊ธฐ ํ๋ค๋ค. ๋๋๋ก switch ๋ฌธ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๊ฒ ๋ค. switch ๋ฌธ์ ์ฌ์ฉํด์ N๊ฐ์ง ํ์๋ฅผ ํ๋ค๋ฉด ๋ฌด์์ด ๋ฌธ์ ์ผ๊น? ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ํ ๊ฐ์ง ์์ ๋ง ์ํํ์ง ์๊ณ , ๋ ๋ฒ์งธ๋ SRP๋ฅผ ์๋ฐํ๋ฉฐ, ์ธ ๋ฒ์งธ๋ OCP๋ฅผ ์๋ฐํ๋ ๊ฒ์ด๋ค. ์๋ก์ด ๊ฒ์ ์ถ๊ฐํ ๋๋ง๋ค ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฑ ์์๋ ๋คํ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ถ๋ถ๋ง switch ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ฐธ์์ค๋ค๊ณ ํ๋ค. ์ฐธ์์ค๋ค๋ ๊ฒ์ ๊ถ์ฅํ๋ ๊ฒ์ด ์๋๋ผ ๊ฐ๊ธ์ ์ด๋ฉด ์ฌ์ฉํ์ง ๋ง๋ผ๋ ์๋ฏธ์ด์ง ์์๊น?
๐ ์์ ์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํ๋ผ
์ฐ๋ฆฌ๋ ๋ค์ด๋ฐ ํ๋ ์๊ฐ์ ๋ฌด์ํ ์ ์๋ค. ์ด๋ฆ์ ์ ์ง๋ ๊ฒ์ ํจ์ ๋ฟ๋ง ์๋๋ผ ํด๋์ค๋ ๋ณ์๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ์ฌ๊ธฐ์ ํต์ฌ์ ํจ์๋ ์ข์ ์ด๋ฆ์ ๋ถ์ด๋ ๊ฒ๋ ์ค์ํ์ง๋ง, ์์์ ์ธ๊ธํ๋ ํ ๊ฐ์ง ์ผ์ ํ๋ ์์ ํจ์์ ์ข์ ์ด๋ฆ์ ๋ถ์ด๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํ๋ค. ๋ง์ ์ผ์ ํ๋ ํจ์์ ์ด๋ฆ์ ์ง๋ ๊ฒ์ด ์ฌ์ธ๊น? ์๋๋ค. ์ฆ ์ด๋ฆ๋ณด๋ค๋ ๋ ์ค์ํ ๊ฒ์ ์๊ณ ๋จ์ํด์ผ ์ด๋ฆ ์ง๊ธฐ๊ฐ ์ฌ์์ง๋ค. ์ด๋ฆ์ ๊ธธ์ด๋ ์ข๋ค. ์งง๊ณ ์ ํํํ๋ค๋ฉด ๋ฒ ์คํธ์ง๋ง, ๊ธธ์ด๋ ์ ๋ง ์ ํํํ๋ค๋ฉด ๊ทธ๊ฒ์ด ์ ๋ง๋ก ๋ฒ ์คํธ์ด์ง ์์๊น? ๊ฒฐ๋ก ์ ํจ์ ์ด๋ฆ๋ง ๋ด๋ ์ง์ํ๋ ๋๋ก ๋์๊ฐ์ผ ํ๋ค.
๐ ํจ์์ ์ธ์๋ ๋ช๊ฐ๊ฐ ์ ๋นํ ๊น?
๊ฒฐ๋ก ๋ถํฐ ์๊ธฐํ์๋ฉด 0๊ฐ์ด๋ค. ๊ฐ์ฅ ์ด์์ ์ธ ์ซ์์ด๋ค. ์ ์์๋ก ์ข๋ค. 4๊ฐ ์ด์์ ํน๋ณํ ์ด์ ๊ฐ ์๋ค๋ฉด ์ฌ์ฉํ์ง ๋ง์์ผ ํ๋ค. ๋ค๋ฅธ ์ฌ๋์ด ๋ง๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํด๋ณด์. ์ธ์๊ฐ ๋ง์ผ๋ฉด ๊ทธ ๋งํผ ์ดํดํ๊ธฐ๋ ์ด๋ ต๊ณ , ๋ชจ๋ ์กฐํฉ์ผ๋ก ํ ์คํธ๋ฅผ ํด์ผํ๊ธฐ์ ๋ถ๋ด์ค๋ฌ์์ง๋ค.
๋จํญ ํ์์ ์ธ์๊ฐ 1๊ฐ์ธ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํ๋ค. ๊ฐ์ฅ ์ ํฉํ ๊ฒฝ์ฐ๋ ์๋์ ๊ฐ์ด ์ธ์์๊ฒ ์ง๋ฌธ์ ๋์ง๋ ๊ฒฝ์ฐ์ด๋ค.
String color = "red";
isRed(color);
ํ๋๊ทธ ์ธ์๋ ์ฑ ์์๋ ๋์ฐํ๋ค๋ ํํ์ ํ๊ณ ์๋ค. ํจ์์ ๋ถ์ธ ๊ฐ์ ๋๊ธฐ๋ ๊ฒ์ ๋๋๊ณ ์ฌ๋ฌ ๊ฐ์ง๋ฅผ ์ฒ๋ฆฌํ๋ค๋ ๊ฒ๊ณผ ๊ฐ๋ค. ์๋ํ๋ฉด true๋ผ๋ฉด A๋ฅผ ํ๊ณ , false๋ผ๋ฉด B๋ฅผ ํด์ผ ํ๋ค๋ ๋ง์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ๋ถ์ธ ๊ฐ์ ๋๊ธฐ๋ ๊ฒ์ ๋ฌด์กฐ๊ฑด ํผํ์.
์ดํญ ํจ์๋ ์ธ์์ ํ์ ์ด ๊ฐ์ ๊ฒฝ์ฐ ์ค์ํ ์ฌ์ง๊ฐ ์๋ค. ๊ฐ๋ฐ์๊ฐ ๋ฐ๋๋ก ์ง์ด๋ฃ์ ์ ์๋ค๋ ์๋ฏธ์ด๋ค.
์ผํญ ํจ์๋ ์ธ์๊ฐ 2๊ฐ์ธ ํจ์๋ณด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ํ๋ฅ ์ด ๋ ๋์์ง๋ค. ๋ฐ๋ผ์ ์ ๋ง๋ก ์ ์คํด์ผ ํ๋ค. ์คํฐ๋์์ ๋ฐ์๋ ํผ๋๋ฐฑ ์ค์ ์ธ์๊ฐ ๋ง์ ๊ฒฝ์ฐ์ ๊ฐ์ ํ์ ์ ์ฐ์์ ์ผ๋ก ์ฌ์ฉํ์ง ๋ง๋ผ๋ ํผ๋๋ฐฑ์ด ์์๋ค. ์ฆ ์ธ์๊ฐ 2๊ฐ๊ฐ ๋์๊ฐ๋ ํจ์๋ฅผ ์ ๋ง๋ก ๋ง๋ค์ด์ผ ํ๋ค๋ฉด, ์ธ์์ ์์๋ ๊ณ ๋ คํด์ผ ํ๋ค. ์ธ์๊ฐ 2๊ฐ ์ด์์ด๋ผ๋ฉด ์๋์ ๊ฐ์ด ํด๋์ค ๋ณ์๋ฅผ ๋ง๋๋ ๊ฒ์ ๊ณ ๋ คํ๋ฉด ์ข๊ฒ ๋ค.
public Circle makeCircle(double x, double y, double radius) {
...
}
public Circle makeCircle(Point center, double radius) {
...
}
๋๋ก๋ ์ธ์ ๊ฐ์๊ฐ ๊ฐ๋ณ์ ์ธ ํจ์๊ฐ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๊ฒ์ N๊ฐ ์ธ์๋ฅผ ๊ฐ์ง ํจ์๋ณด๋ค, ์ฌ์ค์ List ํ ์ธ์ ํ๋๋ก ์ทจ๊ธํ๋ ๊ฒ์ด ๋ง๋ค. String.format ๋ฉ์๋๋ฅผ ๋ณด๋ฉด ์ฌ์ค์ ์ดํญ ํจ์๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
public String format(String format, Object... args)
ํจ์์ ์๋๋ ์ธ์์ ์์์ ์๋๋ฅผ ์ ๋๋ก ํํํ๋ ค๋ฉด ์ข์ ํจ์ ์ด๋ฆ์ด ํ์ํ๋ค. ๋จํญ ํจ์๋ ํจ์์ ์ธ์๊ฐ ๋์ฌ/๋ช ์ฌ ์์ ์ด๋ค์ผ ํ๋ค. writeField(name)์ ์๋๊ฐ ๋ถ๋ช ํ ๋ค์ด๋๊ณ , assertExpectedEqualsActual(expected, actual)์ ํจ์ ์ด๋ฆ์ผ๋ก ์ธํด ์ธ์ ์์๋ฅผ ๊ธฐ์ตํ ํ์๊ฐ ์์ด์ง๋ค.
๐ ๋ถ์ ํจ๊ณผ๋ฅผ ์ผ์ผํค์ง ๋ง๋ผ
๋ถ์ ํจ๊ณผ๋ ํจ์์์ ํ ๊ฐ์ง๋ฅผ ํ๊ฒ ๋ค๊ณ ์ฝ์ํ๊ณ ๊ฑฐ์ง๋ง ํ๋ ๊ฒ์ ๋งํ๋ค. ๋ถ์ ํจ๊ณผ๋ก ์จ๊ฒจ์ง ๊ฒฝ์ฐ ํผ๋์ด ์ปค์ง ์ ์๋ค.
๐ ๋ฐ๋ณตํ์ง ๋ง๋ผ
์ค๋ณต์ ๋ฌธ์ ๋ค. ์ฝ๋ ๊ธธ์ด ๋ฟ ์๋๋ผ ์๊ณ ๋ฆฌ์ฆ์ด ๋ณํ๋ฉด ์ค๋ณต๋ ๋ถ๋ถ ๋ชจ๋ ์๋ด์ผ ํ๋ค. ๋ง์ฝ์ ํ๊ณณ์ด๋ผ๋ ๋น ๋จ๋ฆฌ๋ฉด ์ฌ๊ฐํ ์ค๋ฅ๊ฐ ๋ฐ์ํ ํ๋ฅ ์ด ๋์์ง๋ค.
๐ ์ด๋ป๊ฒ ํจ์๋ฅผ ์งค๊น?
์ฝ๋๋ฅผ ์์ฑํ๋ ํ์๋ ์์์๋ฅผ ์ฐ๋ ๊ฒ๊ณผ ๊ฐ๋ค. ๋จผ์ ์๊ฐ๋๋ ๋๋ก ์ฐ๊ณ , ๋ค๋ฌ๋ ๊ฒ์ ๋ฐ๋ณตํ๋ค. ํจ์๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ์ฒ์์๋ ๊ธธ๊ณ ๋ณต์กํ ์ ์๋ค. ๋ค์ฌ์ฐ๊ธฐ๋ ์ค๋ณต๋ ๋ฃจํ, ์ธ์ ๋ชฉ๋ก๋ ๊ธธ์ด์ง ์ ์๋ค. ๋๊ตฌ๋ ์ง ํ๋ฒ์ ์๋ฒฝํ๊ฒ ์์ฑํ๋ ์ฌ๋์ด ์์๊น? ๋๋ ์ด๋ ต๋ค๊ณ ์๊ฐํ๋ค. ๊ณ์ํด์ ๋ค๋ฌ๊ณ , ์ด๋ฆ์ ๋ฐ๊พธ๊ณ , ์ค๋ณต์ ์ ๊ฑฐํด์ผ ํ๋ค. ์ข์ ํจ์๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ ์ด๋ฌํ ๊ท์น๋ค์ ํ์ฉํ์ฌ ์์์ ์ผ๋ก ์ฐ์ตํ๋ ๊ฒ์ด ์ค์ํ์ง ์์๊น?
'์ฑ > CleanCode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โจ Clean Code 7์ฅ: ์ค๋ฅ ์ฒ๋ฆฌ (0) | 2021.01.21 |
---|---|
โจ Clean Code 6์ฅ: ๊ฐ์ฒด์ ์๋ฃ๊ตฌ์กฐ (0) | 2021.01.20 |
โจ Clean Code 5์ฅ: ํ์ ๋ง์ถ๊ธฐ (0) | 2021.01.14 |
โจ Clean Code 3์ฅ: ํจ์ (0) | 2020.12.15 |
โจ Clean Code 2์ฅ: ์๋ฏธ ์๋ ์ด๋ฆ (0) | 2020.11.23 |
โจ Clean Code 1์ฅ: ๊นจ๋ํ ์ฝ๋ (0) | 2020.11.20 |