14์ฅ. ์ ์ง์ ์ธ ๊ฐ์ ๐
๋์ ์ฝ๋๋ณด๋ค ๋ ์ค๋ซ๋์ ๋ ์ฌ๊ฐํ๊ฒ ๊ฐ๋ฐ ํ๋ก์ ํธ์ ์ ์ํฅ์ ๋ฏธ์น๋ ์์ธ๋ ์๋ค. ๋์ ์ผ์ ์ ๋ค์ ์ง๋ฉด ๋๋ค. ๋์ ์๊ตฌ์ฌํญ์ ๋ค์ ์ ์ํ๋ฉด ๋๋ค. ๋์ ํ ์ญํ์ ๋ณต๊ตฌํ๋ฉด ๋๋ค. ํ์ง๋ง ๋์ ์ฝ๋๋ ์ฉ์ด ๋ฌธ๋๋ฌ์ง๋ค. ์ ์ ๋ฌด๊ฒ๊ฐ ๋์ด๋ ํ์ ๋ฐ๋ชฉ์ ์ก๋๋ค. ์๋๊ฐ ์ ์ ๋๋ ค์ง๋ค ๋ชปํด ๊ธฐ์ด๊ฐ๊ธฐ๋ ํ๋ค. ๋๋ฌด ์๋๋ฅด๋ค๊ฐ ์ดํ๋ก ์์ํ ์์ ๋ค์ ์ด๋ช ์ ์ง๋ฐฐํ ์ ์ฑ ์ฝ๋๋ผ๋ ๊ตด๋ ๋ฅผ ์ง์ด์ง๋ค.
๋ฌผ๋ก ๋์ ์ฝ๋๋ ๊นจ๋ํ ์ฝ๋๋ก ๊ฐ์ ํ ์ ์๋ค. ํ์ง๋ง ๋น์ฉ์ด ์์ฒญ๋๊ฒ ๋ง์ด ๋ ๋ค. ์ฝ๋๊ฐ ์ฉ์ด๊ฐ๋ฉฐ ๋ชจ๋์ ์๋ก์๋ก ์ฝํ๊ณ ์ค์ผ ๋ค์ํค๊ณ ์จ๊ฒจ์ง ์์กด์ฑ์ด ์๋ ์์ด ์๊ธด๋ค. ์ค๋๋ ์์กด์ฑ์ ์ฐพ์๋ด ๊นจ๋ ค๋ฉด ์๋นํ ์๊ฐ๊ณผ ์ธ๋ด์ฌ์ด ํ์ํ๋ค. ๋ฐ๋ฉด ์ฒ์๋ถํฐ ์ฝ๋๋ฅผ ๊นจ๋ํ๊ฒ ์ ์งํ๊ธฐ๋ ์๋์ ์ผ๋ก ์ฝ๋ค. ์์นจ์ ์๋ง์ผ๋ก ๋ง๋ ์ฝ๋๋ฅผ ์คํ์ ์ ๋ฆฌํ๊ธฐ๋ ์ด๋ ต์ง ์๋ค. ๋์ฑ์ด 5๋ถ ์ ์ ์๋ง์ผ๋ก ๋ง๋ ์ฝ๋๋ ์ง๊ธ ๋น์ฅ ์ฒ๋ฆฌํ๊ธฐ ์์ฃผ ์ฝ๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์ฝ๋๋ ์ธ์ ๋ ์ต๋ํ ๊น๋ํ๊ณ ๋จ์ํ๊ฒ ์ ๋ฆฌํ์. ์ ๋๋ก ์ฉ์ด๊ฐ๊ฒ ๋ฐฉ์นํ๋ฉด ์ ๋๋ค.
(ํด๋น ์ฅ์์๋ Args.java๋ผ๋ ์ฝ๋๋ฅผ ์ ์ง์ ์ผ๋ก ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค. ์ฑ ์ ํตํด ์ด๋ป๊ฒ ์ ์ฐจ์ ์ผ๋ก ๊ฐ์ ํ๋์ง ์ดํด๋ณด๊ธธ ๋ฐ๋๋ค.)
15์ฅ. JUnit ๋ค์ฌ๋ค๋ณด๊ธฐ ๐
ํด๋น ์ฅ์์๋ ComparisonCompactorTest.java๋ก ComparisonCompactor ๋ชจ๋์ ๋ํด์ 100% ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๋ถ์์ ์ํํ ๊ฒ์ ๋ณด์ฌ์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๋ํฉํฐ๋ง(= ๋ฆฌํฉํฐ๋ง์ ๋ฐ๋ ๊ณผ์ )๋ ComparisonCompactor ์ฝ๋์์ ์ถ๋ฐํ์ฌ ์ด๋ป๊ฒ ์ด๋ ์ ๋ ์์ค์ ์ด๋ฅด๋ ComparisonCompactor๋ฅผ ๋ง๋ค์๋์ง ๋ณด์ฌ์ค๋ค. (์ฑ ์ ๋์จ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.)
16์ฅ. SerialDate ๋ฆฌํฉํฐ๋ง ๐
16์ฅ์์๋ http://www.jfree.org/jcommon/index.php์์ ์ ๊ณต๋ฐ์ JCommon ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ org.jfree.date ํจํค์ง์ SerialDate๋ผ๋ ํด๋์ค๋ฅผ ๋ฆฌํฉํฐ๋ง์ ์งํํ๋ค.
17์ฅ. ๋์์ ํด๋ฆฌ์คํฑ ๐คฟ
Refactoring์ ์ ์์ธ ๋งํด ํ์ธ๋ฌ๊ฐ ๋งก์ ์ฝ๋ ๋์์ ์ด ์ฑ ์ ์ ์๊ฐ ๋งก์ ๋์๋ฅผ ์ถ๊ฐํ์ฌ ๋์๋ค์ ์๊ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์๊ฐ ์ฝ๋๋ฅผ ์ง๋ฉด์ ์ฌ์ฉํ๋ ๊ธฐ๊ต์ ํด๋ฆฌ์คํฑ๋ ํฌํจํ๋ค.
- ์ฃผ์์ผ๋ก ์ฒ๋ฆฌ๋ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ์ฆ๊ฐ ์ง์๋ฒ๋ ค๋ผ!
๊ฑฑ์ ํ ํ์ ์๋ค. ์์ค ์ฝ๋ ๊ด๋ฆฌ ์์คํ ์ด ๊ธฐ์ตํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋๊ตฐ๊ฐ ์ ๋ง๋ก ํ์ํ๋ค๋ฉด ์ด์ ๋ฒ์ ์ ๊ฐ์ ธ์ค๋ฉด ๋๋ค. ์ฃผ์์ผ๋ก ์ฒ๋ฆฌ๋ ์ฝ๋๋ฅผ ๋ด๋ฒ๋ ค ๋์ง ๋ง๋ผ. - ๋น๋๋ ๊ฐ๋จํ ํ ๋จ๊ณ๋ก ๋๋์ผ ํ๋ค.
์์ค ์ฝ๋ ๊ด๋ฆฌ ์์คํ ์์ ์ด๊ฒ์ ๊ฒ ๋ฐ๋ก๋ฐ๋ก ์ฒดํฌ์์ํ ํ์๊ฐ ์์ด์ผ ํ๋ค. ๋ถ๊ฐํดํ ๋ช ๋ น์ด๋ ์คํฌ๋ฆฝํธ๋ฅผ ์๋ฌ์ ์คํํด ๊ฐ ์์๋ฅผ ๋ฐ๋ก ๋น๋ํ ํ์๊ฐ ์์ด์ผ ํ๋ค. ์จ๊ฐ JAR ํ์ผ, XML ํ์ผ, ๊ธฐํ ์์คํ ์ ํ์ํ ํ์ผ์ ์ฐพ๋๋ผ ์ฌ๊ธฐ์ ๊ธฐ ๋ค์ ์ผ ํ์๊ฐ ์์ด์ผ ํ๋ค. ํ ๋ช ๋ น์ผ๋ก ์ ์ฒด๋ฅผ ์ฒดํฌ์์ํด์ ํ ๋ช ๋ น์ผ๋ก ๋น๋ํ ์ ์์ด์ผ ํ๋ค. - ์ถ๋ ฅ ์ธ์๋ ์ง๊ด์ ์ ๋ช
์ผ๋ก ์๋ฐฐํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ ์๋ ์ธ์๋ฅผ (์ถ๋ ฅ์ด ์๋๋ผ) ์ ๋ ฅ์ผ๋ก ๊ฐ์ฃผํ๋ค. ํจ์์์ ๋ฌด์ธ๊ฐ์ ์ํ๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค๋ฉด (์ถ๋ ฅ ์ธ์๋ฅผ ์ฐ์ง ๋ง๊ณ ) ํจ์๊ฐ ์ํ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด ๋์ค๊ธฐ ์ ์๋ ์ถ๋ ฅ ์ธ์๊ฐ ๋ถ๊ฐํผํ ๊ฒฝ์ฐ๋ ์์๋ค. ํ์ง๋ง ๊ฐ์ฒด ์งํฅ ์ธ์ด์์๋ ์ถ๋ ฅ ์ธ์๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ๊ฑฐ์ ์๋ค. ์ถ๋ ฅ ์ธ์๋ก ์ฌ์ฉํ๋ผ๊ณ ์ค๊ณํ ๋ณ์๊ฐ ๋ฐ๋ก this์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ค์ ๋งํด, append Footer๋ ๋ค์๊ณผ ๊ฐ์ด ํธ์ถํ๋ ๋ฐฉ์์ด ์ข๋ค.
(์ถ๋ ฅ ์ธ์์ ๊ด๋ จํด์ ๋ค์ ๊ธ์ ์ฝ์ด๋ณด๊ธฐ๋ฅผ ๋ฐ๋๋ค. https://lordofkangs.tistory.com/m/194) - ๋น์ฐํ๊ฒ ์ฌ๊ธธ ๋งํ ๋์๊ณผ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ผ ํ๋ค.
์ต์ ๋๋์ ์์น(The Principle of Least Surprise)์ ์๊ฑฐํด ํจ์๋ ํด๋์ค๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋น์ฐํ๊ฒ ์ฌ๊ธธ ๋งํ ๋์๊ณผ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ผ ํ๋ค. ๋น์ฐํ๋ค๊ณ ์๊ฐ๋๋ ๋์๊ณผ ๊ธฐ๋ฅ์ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค. ์๋์ ๊ฐ์ด ์์ผ ๋ฌธ์์ด์์ ์์ผ์ ๋ํ๋ด๋ enum์ผ๋ก ๋ณํํ๋ ํจ์๊ฐ ์๋ค๊ณ ํ์. ๋ค๋ฅธ ํ๋ก๊ทธ๋๋จธ๋ ํจ์๊ฐ 'Monday'๋ฅผ Day.MONDAY๋ก ๋ณํํ๋ฆฌ๋ผ ๊ธฐ๋ํ๊ณ , ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ ์์ผ ์ฝ์ด๋ ์ฌ๋ฐ๋ก ๋ณํํ๋ฆฌ๋ผ ๊ธฐ๋ํ๊ณ , ๋์๋ฌธ์๋ ๋น์ฌํ ๊ตฌ๋ถํ์ง ์์ผ๋ฆฌ๋ผ ๊ธฐ๋ํ๋ค.
Day day = DayDate.StringToDay(String dayName);
- DRY (Don't Repeat Yourself)
์ฝ๋์์ ์ค๋ณต์ ๋ฐ๊ฒฌํ ๋๋ง๋ค ์ถ์ํํ ๊ธฐํ๋ก ๊ฐ์ฃผํ๋ผ. ์ค๋ณต๋ ์ฝ๋๋ฅผ ํ์ ๋ฃจํด์ด๋ ๋ค๋ฅธ ํด๋์ค๋ก ๋ถ๋ฆฌํ๋ผ.
๊ฐ์ฅ ๋ปํ ์ ํ์ ๋๊ฐ์ ์ฝ๋๊ฐ ์ฌ๋ฌ ์ฐจ๋ก ๋์ค๋ ์ค๋ณต์ด๋ค. ์ด๋ฐ ์ค๋ณต์ ๊ฐ๋จํ ํจ์๋ก ๊ต์ฒดํ๋ค.
์ข ๋ ๋ฏธ๋ฌํ ์ ํ์ ์ฌ๋ฌ ๋ชจ๋์์ ์ผ๋ จ์ switch/case๋ if/else ๋ฌธ์ผ๋ก ๋๊ฐ์ ์กฐ๊ฑด์ ๊ฑฐ๋ญ ํ์ธํ๋ ์ค๋ณต์ด๋ค. ์ด๋ฐ ์ค๋ณต์ ๋คํ์ฑ(polymorphism)์ผ๋ก ๋์ฒดํด์ผ ํ๋ค.
๋๋์ฑ ๋ฏธ๋ฌํ ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ด ์ ์ฌํ๋ ์ฝ๋๊ฐ ์๋ก ๋ค๋ฅธ ์ค๋ณต์ด๋ค. ์ค๋ณต์ ์ค๋ณต์ด๋ฏ๋ก TEMPLATE METHOD ํจํด์ด๋ STRATEGY ํจํด์ผ๋ก ์ค๋ณต์ ์ ๊ฑฐํ๋ค. - ์ ํ์ ์ธ์๋ฅผ ์ฌ์ฉํ์ง ๋ง๋ผ
์ ํ์(selector) ์ธ์๋ ๋ชฉ์ ์ ๊ธฐ์ตํ๊ธฐ ์ด๋ ค์ธ ๋ฟ ์๋๋ผ ๊ฐ ์ ํ์ ์ธ์๊ฐ ์ฌ๋ฌ ํจ์๋ฅผ ํ๋๋ก ์กฐํฉํ๋ค. ์ ํ์ ์ธ์๋ ํฐ ํจ์๋ฅผ ์์ ํจ์ ์ฌ๋ฟ์ผ๋ก ์ชผ๊ฐ์ง ์์ผ๋ ค๋ ๊ฒ์ผ๋ฆ์ ์์ฐ์ด๋ค. ๋ฌผ๋ก ๋ถ์ธ ์ธ์๋ง์ด ๋ฌธ์ ๋ผ๋ ๋ง์ ์๋๋ค. enum, int ๋ฑ ํจ์ ๋์์ ์ ์ดํ๋ ค๋ ์ธ์๋ ํ๋ ๊ฐ์ด ๋ฐ๋์งํ์ง ์๋ค. ์ผ๋ฐ์ ์ผ๋ก, ์ธ์๋ฅผ ๋๊ฒจ ๋์์ ์ ํํ๋ ๋์ ์๋ก์ด ํจ์๋ฅผ ๋ง๋๋ ํธ์ด ์ข๋ค. - ๋ถ์ ์ ํ static ํจ์๋ฅผ ์ฌ์ฉํ์ง ๋ง๋ผ
Math.max(double a, double b) // ์ข์ static ํจ์
HourlyPayCalculator.calculatePay(employee, overtimeRate); // ์ ์ ํ์ง ์์ static ํจ์
๋ ๋ฒ์งธ ์ค์ ํจ์๋ ์ ์ ํ์ง ์์ static ํจ์์ด๋ค. ํจ์๋ฅผ ์ฌ์ ์ํ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๊ณ ์๋น์ ๊ณ์ฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ๋ฌ ๊ฐ์ผ์ง๋ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก static ํจ์๋ณด๋ค ์ธ์คํด์ค ํจ์๊ฐ ๋ ์ข๋ค. ์กฐ๊ธ์ด๋ผ๋ ์์ฌ์ค๋ฝ๋ค๋ฉด ์ธ์คํด์ค ํจ์๋ก ์ ์ํ๋ค. ๋ฐ๋์ static ํจ์๋ก ์ ์ํด์ผ๊ฒ ๋ค๋ฉด ์ฌ์ ์ํ ๊ฐ๋ฅ์ฑ์ ์๋์ง ๊ผผ๊ผผํ ๋ฐ์ ธ๋ณด์.
- If/Else ํน์ Switch/Case ๋ฌธ๋ณด๋ค ๋คํ์ฑ์ ์ฌ์ฉํ๋ผ
์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค. ์ฒซ์งธ, ๋๋ค์ ๊ฐ๋ฐ์๊ฐ switch ๋ฌธ์ ์ฌ์ฉํ๋ ์ด์ ๋ ๊ทธ ์ํฉ์์ ๊ฐ์ฅ ์ฌ๋ฐ๋ฅธ ์ ํ์ด๊ธฐ๋ณด๋ค๋ ๋น์ฅ ์์ฌ์ด ์ ํ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก switch๋ฅผ ์ ํํ๊ธฐ ์ ์ ๋คํ์ฑ์ ๋จผ์ ๊ณ ๋ คํ๋ผ.
๋์งธ, ์ ํ๋ณด๋ค ํจ์๊ฐ ๋ ์ฝ๊ฒ ๋ณํ๋ ๊ฒฝ์ฐ๋ ๊ทนํ ๋๋ฌผ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ชจ๋ switch ๋ฌธ์ ์์ฌํด์ผ ํ๋ค. - ์กฐ๊ฑด์ ์บก์ํํ๋ผ
if (shouldBeDeleted(timer)) // ์ข๋ค.
if (timer.hasExpired() && !timer.isRecurrent()) // ๋์๋ค.
- ๋ถ์ ์กฐ๊ฑด์ ํผํ๋ผ
if (buffer.shouldCompact()) // ์ข๋ค.
if (!buffer.shouldNotCompact()) // ๋์๋ค.
- ์จ๊ฒจ์ง ์๊ฐ์ ์ธ ๊ฒฐํฉ
๋๋ก๋ ์๊ฐ์ ์ธ ๊ฒฐํฉ์ด ํ์ํ๋ค. ํ์ง๋ง ์๊ฐ์ ์ธ ๊ฒฐํฉ์ ์จ๊ฒจ์๋ ์ ๋๋ค. ํจ์๋ฅผ ์งค ๋๋ ํจ์ ์ธ์๋ฅผ ์ ์ ํ ๋ฐฐ์นํด ํจ์๊ฐ ํธ์ถ๋๋ ์์๊ฐ ๋ช ๋ฐฑํ ๋๋ฌ๋ธ๋ค. ์๋๋ ์๊ฐ์ ์ธ ๊ฒฐํฉ์ ๊ฐ์ ํ์ง ์์ ์ฝ๋์ ์ผ์ข ์ ์ฐ๊ฒฐ ์์๋ฅผ ์์ฑํด ์๊ฐ์ ์ธ ๊ฒฐํฉ์ ๋ ธ์ถํ ์ฝ๋์ด๋ค.
// ์๊ฐ์ ์ธ ๊ฒฐํฉ์ ๊ฐ์ ํ์ง ์์ ์ฝ๋
public class MoogDiver {
Gradient gradient;
List<Spline> splines;
public void dive(String reason) {
saturateGradient();
reticulateSplines();
diveForMoog(reason);
}
...
}
// ์ผ์ข
์ ์ฐ๊ฒฐ ์์๋ฅผ ์์ฑํด ์๊ฐ์ ์ธ ๊ฒฐํฉ์ ๋
ธ์ถํ ์ฝ๋
public class MoogDiver {
Gradient gradient;
List<Spline> splines;
public void dive(String reason) {
Gradient gradient = saturateGradient();
List<Spline> splines = reticulateSplines(gradient);
diveForMoog(splines, reason);
}
...
}
- ์ถ์ด์ ํ์์ ํผํ๋ผ
์ผ๋ฐ์ ์ผ๋ก ํ ๋ชจ๋์ ์ฃผ๋ณ ๋ชจ๋์ ๋ชจ๋ฅผ์๋ก ์ข๋ค. ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก, A๊ฐ B๋ฅผ ์ฌ์ฉํ๊ณ B๊ฐ C๋ฅผ ์ฌ์ฉํ๋ค ํ๋๋ผ๋ A๊ฐ C๋ฅผ ์์์ผ ํ ํ์๋ ์๋ค๋ ๋ป์ด๋ค. ์๋ฅผ ๋ค์ด a.getB(),getC().doSomething();์ ๋ฐ๋์งํ์ง ์๋ค.
์ด๋ฅผ ๋๋ฏธํฐ์ ๋ฒ์น(Law of Demeter)์ด๋ผ ๋ถ๋ฅธ๋ค. ์ด๊ฒ์ ์์ ์ด ์ง์ ์ฌ์ฉํ๋ ๋ชจ๋๋ง ์์์ผ ํ๋ค๋ ๋ป์ด๋ค. ๋ด๊ฐ ์๋ ๋ชจ๋์ด ์ฐ์ด์ด ์์ ์ด ์๋ ๋ชจ๋์ ๋ฐ๋ผ๊ฐ๋ฉฐ ์์คํ ์ ์ฒด๋ฅผ ํ์ ์ ํ์๊ฐ ์๋ค๋ ์๋ฏธ๋ค.
์ฌ๋ฌ ๋ชจ๋์์ a.getB().getC()๋ผ๋ ํํ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ค๊ณ์ ์ํคํ ์ฒ๋ฅผ ๋ฐ๊ฟ B์ C ์ฌ์ด์ Q๋ฅผ ๋ฃ๊ธฐ๊ฐ ์ฝ์ง ์๋ค. a.getB().getC()๋ฅผ ๋ชจ๋ ์ฐพ์ a.getB().getQ().getC()๋ก ๋ฐ๊ฟ์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋๋ฌด ๋ง์ ๋ชจ๋์ด ์ํคํ ์ฒ๋ฅผ ๋๋ฌด ๋ง์ด ์๋ค. ๊ทธ๋์ ์ํคํ ์ฒ๊ฐ ๊ตณ์ด์ง๋ค.
๋ด๊ฐ ์ฌ์ฉํ๋ ๋ชจ๋์ด ๋ด๊ฒ ํ์ํ ์๋น์ค๋ฅผ ๋ชจ๋ ์ ๊ณตํด์ผ ํ๋ค. ์ํ๋ ๋ฉ์๋๋ฅผ ์ฐพ๋๋ผ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ๋ฐ๋ผ ์์คํ ์ ํ์ํ ํ์๊ฐ ์์ด์ผ ํ๋ค. ๋ค์ ๋งํด, myCollaborate.doSomething();๊ณผ ๊ฐ์ ๊ฐ๋จํ ์ฝ๋๋ก ์ถฉ๋ถํด์ผ ํ๋ค. - ๊ธด import ๋ชฉ๋ก์ ํผํ๊ณ ์์ผ๋์นด๋๋ฅผ ์ฌ์ฉํด๋ผ
ํจํค์ง์์ ํด๋์ค๋ฅผ ๋ ์ด์ ์ฌ์ฉํ๋ค๋ฉด ์์ผ๋์นด๋๋ฅผ ์ฌ์ฉํด ํจํค์ง ์ ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋ผ. ๊ธด import ๋ชฉ๋ก์ ์ฝ๊ธฐ์ ๋ถ๋ด์ค๋ฝ๋ค. ์ฌ์ฉํ๋ ํจํค์ง๋ฅผ ๊ฐ๋จํ ๋ช ์ํ๋ฉด ์ถฉ๋ถํ๋ค.
๋ช ์์ ์ธ import ๋ฌธ์ ๊ฐํ ์์กด์ฑ์ ์์ฑํ์ง๋ง ์์ผ๋์นด๋๋ ๊ทธ๋ ์ง ์๋ค. ๋ช ์์ ์ผ๋ก ํด๋์ค๋ฅผ import ํ๋ฉด ๊ทธ ํด๋์ค๊ฐ ๋ฐ๋์ ์กด์ฌํด์ผ ํ๋ค. ํ์ง๋ง ์์ผ๋์นด๋๋ก ํจํค์ง๋ฅผ ์ง์ ํ๋ฉด ํน์ ํด๋์ค๊ฐ ์กด์ฌํ ํ์๊ฐ ์๋ค. import ๋ฌธ์ ํจํค์ง๋ฅผ ๋จ์ํ ๊ฒ์ ๊ฒฝ๋ก์ ์ถ๊ฐํ๋ฏ๋ก ์ง์ ํ ์์กด์ฑ์ด ์๊ธฐ์ง ์๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ชจ๋ ๊ฐ์ ๊ฒฐํฉ์ฑ์ด ๋ฎ์์ง๋ค.
๋ช ์์ ์ผ๋ก import ๋ฌธ์ ๊ธธ๊ฒ ๋์ดํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด์ ํ ์คํธ์ฉ ๋ชจ๋์ด๋ ์คํ ์ ๋น๋ํ ํด๋์ค๋ฅผ ์ฐพ์ผ๋ ค ํ๋ค๋ฉด, ๊ธฐ๋ค๋ import ๋ฌธ์ ํ๋์ฉ ์ง์ด๊ฐ๋ฉฐ ํด๋์ค ์ ์ฒด ์ด๋ฆ์ ์ฐพ์ ํ ์ ์ ํ ์คํ ์ ๋ฐฐ์นํด์ผ ํ๋ฆฌ๋ผ. ํ์ง๋ง ์ด๋ ๊ฒ ๋ช ์์ ์ผ๋ก import ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๊ทนํ ๋๋ฌผ๋ค. ๊ฒ๋ค๊ฐ ์์ฆ IDE ๋๋ค์๋ ๊ฐ๋จํ ๋ช ๋ น ํ๋๋ก ์์ผ๋์นด๋ import ๋ฌธ์ ๋ช ์์ ์ธ import ๋ฌธ ๋ชฉ๋ก์ผ๋ก ๋ฐ๊ฟ์ค๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ ๊ฑฐ์ง ์ฝ๋๋ผ๋ ์์ผ๋์นด๋ import ๋ฌธ์ ์ฌ์ฉํ๋ ํธ์ด ์ข๋ค.
์์ผ๋์นด๋ import ๋ฌธ์ ๋๋ก ์ด๋ฆ ์ถฉ๋์ด๋ ๋ชจํธ์ฑ์ ์ด๋ํ๋ค. ์ด๋ฆ์ด ๊ฐ์ผ๋ ํจํค์ง๊ฐ ๋ค๋ฅธ ํด๋์ค๋ ๋ช ์์ ์ธ import ๋ฌธ์ ์ฌ์ฉํ๊ฑฐ๋ ์๋๋ฉด ์ฝ๋์์ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋ ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ๋ช ์ํ๋ค. ๋ค์ ๋ฒ๊ฑฐ๋กญ์ง๋ง ์์ฃผ ๋ฐ์ํ์ง ์์ผ๋ฏ๋ก ์ฌ์ ํ ์์ผ๋์นด๋ import ๋ฌธ์ด ๋ช ์์ ์ธ import ๋ฌธ๋ณด๋ค ์ข๋ค. - Enum์ ๋ง์๊ป ํ์ฉํ๋ผ!
public static final int๋ผ๋ ์๋ ๊ธฐ๊ต๋ฅผ ๋ ์ด์ ์ฌ์ฉํ ํ์๊ฐ ์๋ค. int ์ฝ๋์์ ์๋ฏธ๋ฅผ ์์ด๋ฒ๋ฆฌ๊ธฐ๋ ํ๋ค. ๋ฐ๋ฉด enum์ ๊ทธ๋ ์ง ์๋ค. enum์ ์ด๋ฆ์ด ๋ถ์ฌ๋ ์ด๊ฑฐ์ฒด(enumeration)์ ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ ๊ฐ์ง ๋ง๋ถ์ด์๋ฉด, enum ๋ฌธ๋ฒ์ ์์ธํ ์ดํด๋ณด๊ธฐ ๋ฐ๋๋ค. ๋ฉ์๋์ ํ๋๋ ์ฌ์ฉํ ์ ์๋ค. int๋ณด๋ค ํจ์ฌ ๋ ์ ์ฐํ๊ณ ์์ ์ ์ธ ๊ฐ๋ ฅํ ๋๊ตฌ๋ค. - ์ด๋ฆ์ผ๋ก ๋ถ์ ํจ๊ณผ๋ฅผ ์ค๋ช
ํ๋ผ
ํจ์, ๋ณ์, ํด๋์ค๊ฐ ํ๋ ์ผ์ ๋ชจ๋ ๊ธฐ์ ํ๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ค. ์ด๋ฆ์ ๋ถ์ ํจ๊ณผ๋ฅผ ์จ๊ธฐ์ง ์๋๋ค.
public ObjectOutputStream getOos() throws IOException {
if (m_oos == null) {
m_oos = new ObjectOutputStream(m_socket.getOutputStream());
}
return m_oos;
}
์ ํจ์๋ ๋จ์ํ "oos"๋ง ๊ฐ์ ธ์ค์ง ์๋๋ค. ๋ง์ฝ ๊ธฐ์กด์ "oos"๊ฐ ์์ผ๋ฉด ์์ฑํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก createOrReturnOos๋ผ๋ ์ด๋ฆ์ด ๋ ์ข๋ค.
- ์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ผ!
์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ๋ ํ ์คํธ๊ฐ ๋น ๋จ๋ฆฌ๋ ๊ณต๋ฐฑ์ ์๋ ค์ค๋ค. ์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์คํธ๊ฐ ๋ถ์ถฉ๋ถํ ๋ชจ๋, ํด๋์ค, ํจ์๋ฅผ ์ฐพ๊ธฐ๊ฐ ์ฌ์์ง๋ค.
17์ฅ ๊ฒฐ๋ก
์ด ์ฅ์์ ์๊ฐํ ํด๋ฆฌ์คํฑ๊ณผ ๋์ ๋ชฉ๋ก์ด ์์ ํ๋ค ๋งํ๊ธฐ๋ ์ด๋ ต๋ค. ์๋, ์์ ํ ๋ชฉ๋ก์ด ๊ฐ๋ฅํ๋ค๊ณ ๋ ์๊ฐํ์ง ์๋๋ค. ํ์ง๋ง ์์ ํ ๋ชฉ๋ก์ด ๋ชฉํ๊ฐ ์๋๋ค. ์ฌ๊ธฐ์ ์๊ฐํ ๋ชฉ๋ก์ ๊ฐ์น ์ฒด๊ณ๋ฅผ ํผ๋ ฅํ ๋ฟ์ด๋ค.
์ผ๊ตฐ์ ๊ท์น๋ง ๋ฐ๋ฅธ๋ค๊ณ ๊นจ๋ํ ์ฝ๋๊ฐ ์ป์ด์ง์ง ์๋๋ค. ํด๋ฆฌ์คํฑ ๋ชฉ๋ก์ ์ตํ๋ค๊ณ ์ํํธ์จ์ด ์ฅ์ธ์ด ๋์ง๋ ๋ชปํ๋ค. ์ ๋ฌธ๊ฐ ์ ์ ๊ณผ ์ฅ์ธ ์ ์ ์ ๊ฐ์น์์ ๋์จ๋ค. ๊ทธ ๊ฐ์น์ ๊ธฐ๋ฐํ ๊ท์จ๊ณผ ์ ์ ๊ฐ ํ์ํ๋ค.
'๐ ๊ฐ๋ฐ ์์ > ํด๋ฆฐ ์ฝ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํด๋ฆฐ ์ฝ๋(Clean Code) - 13์ฅ (2) | 2023.01.12 |
---|---|
ํด๋ฆฐ ์ฝ๋(Clean Code) - 11์ฅ, 12์ฅ (0) | 2023.01.11 |
ํด๋ฆฐ ์ฝ๋(Clean Code) - 10์ฅ (0) | 2023.01.11 |
ํด๋ฆฐ ์ฝ๋(Clean Code) - 8์ฅ, 9์ฅ (0) | 2023.01.10 |
ํด๋ฆฐ ์ฝ๋(Clean Code) - 7์ฅ (0) | 2023.01.10 |