ํด๋น ๊ธ์ Robert C.Martin ํด๋ฆฐ ์ฝ๋ ๋ผ๋ ์ฑ ์ ์ฝ๊ณ ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌ ๋ฐ ํ๊ณ ํ๋ ๊ธ ์ ๋๋ค. ์์ธํ ์ฌํญ์ YES 24 ํด๋ฆฐ ์ฝ๋ - ์ ์์ผ ์ํํธ์จ์ด ์ฅ์ธ ์ ์ ์์ ํ์ธํด์ฃผ์ธ์.
ํด๋ฆฐ ์ฝ๋ - ์ ์์ผ ์ํํธ์จ์ด ์ฅ์ธ ์ ์ (Uncle Bob)
- ์ํค๋ถ์ค
- ์ง์์ด: Robert C.Martin (Uncle Bob)
- ์ฎ๊ธด์ด: ๋ฐ์ฌํธ, ์ดํด์
์ด๋ฒ ์ฅ์์ ์ด์ผ๊ธฐํ๊ณ ์ ํ๋ ๊ฒ
์ํํธ์จ์ด ๊ฒฝ๊ณ๋ฅผ ๊น๋ํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฒ๊ณผ ๊ธฐ๊ต๋ฅผ ์ค๋ช ํ๋ค
- ์ฐ๋ฆฌ๊ฐ ํต์ ํ ์ ์๋ ์ฝ๋
- ์ธ๋ถ ๋ชจ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ๋ฑ
- ์ด๋ฅผ ํ์ตํ๊ธฐ ์ํด ๋๋ฌด ๋ง์ ์๊ฐ์ ์์ง ์๋ ๊ฒ์ด ์ข๋ค.
- ์ฐ๋ฆฌ๊ฐ ํต์ ํ์ง ๋ชปํ๋ ์ํฉ์ ์ด๋ฅผ ์ ์๋ค
- ex) ์คํ ๋ณ๊ฒฝ
- ์ธ๋ถ ๋ชจ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ๋ฑ
- ์ธ๋ถ ์ฝ๋๋ฅผ ์ฌ์ฉํ ๋ ์ด๋ป๊ฒ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ฌ์ฉํ ์ ์์๊น?
- ๋ฌธ์๋ฅผ ์ฝ๋๋ค?
- ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค.
- ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
- ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉฐ ํ
์คํธ๋ฅผ ํต๊ณผ์ํค๋ฉด์ ์ธ๋ถ ์ฝ๋๋ฅผ ์ตํ๋ค.
- ์ง ๋ด์ปคํฌ๋ ์ด๋ฅผ ํ์ต ํ ์คํธ๋ผ๊ณ ํ์๋ค.
- ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ๋ฐฉ์๋๋ก ์ธ๋ถ API ๋ฅผ ํธ์ถํ๊ณ API ๋ฅผ ์ฑ๊ณต์ํฌ ์ ์๋๋ก ํ๋ค.
- ์ฌ์ฉ๋ฒ์ ์ตํ๋ ๊ฒ์ ์ด์ ์ ๋๋ค
- ํ ์คํธ๊ฐ ์ฑ๊ณตํ๋ฉด ์ฐ๋ฆฌ๊ฐ ๋ ์์ ์ผ๋ก ๋ง๋ ํด๋์ค๋ก ๊ฐ์ธ์ ์ฌ์ฉํ๋ค
- ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉฐ ํ
์คํธ๋ฅผ ํต๊ณผ์ํค๋ฉด์ ์ธ๋ถ ์ฝ๋๋ฅผ ์ตํ๋ค.
- ๋ฌธ์๋ฅผ ์ฝ๋๋ค?
- ์ด๋ป๊ฒ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์์๊น?
- ์ฐ๋ฆฌ๊ฐ ๊ฐ๋ฐํ ์์ค์ฝ๋์ ํผ๋๋์ง ์๋๋ก ํ๋ค.
- ์๋ ์ฝ๋์ ๋ชจ๋ฅด๋ ์ฝ๋์ ๊ฒฝ๊ณ๋ฅผ ๋์ด ํด๊ฒฐํ๋ค.
- ํต์ ๊ฐ ๋ถ๊ฐ๋ฅํ ์ธ๋ถ ํจํค์ง์ ์์กดํ๋ ๋์ ํต์ ๊ฐ ๊ฐ๋ฅํ ์ฐ๋ฆฌ์ ์ฝ๋์ ์์กดํ๋ ๊ฒ์ด ํจ์ฌ ์ข๋ค
๋์ ํด์๊ณผ ํ๊ณ
๊ฒฝ๊ณ๋ฅผ ๋ง๋ ๋ค๋ ๊ฒ์ ๋์๊ฒ ๋จธ๋ฆฟ์์ ์ฐ๋ฐ์ ์ผ๋ก ํฉ๋ฟ๋ ค์ง ๋ฌด์ธ๊ฐ๋ฅผ ์ ์ ๋ฆฌํ ์ ์๋ ๋๊ตฌ๊ฐ ๋์๋ค.
๋๋ ๊ฐ๋ฐ์ ํ๋ฉฐ ๋ฌด์์์ ์ผ๋ก ๊ฒฝ๊ณ๋ฅผ ๋ง๋ค๋ ค๊ณ ๋ ธ๋ ฅํ๋ ๋ถ๋ถ๋ค์ด ์๋ค. ์ญ์ ๊ทธ๋ ์ง ์์๋ ๋ถ๋ถ๋ค๋ ์กด์ฌํ๋ค.
์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ ๋ด๊ฐ ๊ฒฝ๊ณ๋ฅผ ๋๋ ๋ชจ๋ฅด๋ ์ฌ์ด์ ์ฒด๊ฐํ๊ณ ์๋๋ผ ๋ผ๋ ๊ฒ์ด๋ค.
์๋ก HTTP Client ๋ฅผ ์ด์ฉํด์ Open API ๋ฅผ ์กฐํํ ๋, ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋, ์กฐ๊ธ์ด๋ผ๋ ๋ ๋ด ์ ๋ง์ ๋ง๊ฒ ๋ง๋ค๊ธฐ ์ํด ๊ทธ๋ค์ ๊ณ ๋ฆฝ์ํค๋ ค ๋ ธ๋ ฅํ ํฌ์ธํธ๋ค์ด ์๋๋ฐ ์ด์ ๋ ํ์คํ ๊ทธ ํฌ์ธํธ๊ฐ ๊ฒฝ๊ณ์ ๋์์ด ๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
์ด ๊ฒฝ๊ณ๋ ๋น๋จ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํด๋น๋๋ ๋ง์ด ์๋๋ค.
์๋์ ์ฝ๋๋ฅผ ๋ด๋ณด์.
๊ฒฝ๊ณ๊ฐ ์ ์ค์ ๋์ง ์์ ์ฝ๋์ด๋ค.
class Teacher {
Homework assign() {
Homework homework = new Homework();
return homework;
}
}
class Student {
HomeworkResult doHomework(Homework homework) {
boolean isValid = HomeworkValidator.validate(homework);
if (!isValid) {
System.out.println("์์ ๊ฐ ์ด์ํ๋ค, ์ ํ๋ค");
}
System.out.println("์์ ๋ฅผ ํ๋ค");
}
}
๊ฐ์ฌ๋ assign()
์ ํตํด์ ๊ณผ์ ๋ฅผ ์ถ์ ํด์ค๋ค. ๊ทธ๋ผ ํ์์ ํด๋น ๊ณผ์ ๋ฅผ ์ด๋์ ๊ฐ ๋ฐ์์ ๊ณผ์ ๊ฐ ์ ํจํ์ง ํ์ธํ๊ณ ๊ณผ์ ๋ฅผ ์ํํ๋ค.
์ด ์ฝ๋๋ ๊ฒฝ๊ณ๊ฐ ์กด์ฌํ์ง ์๋๋ค.
์ฌ๊ธฐ์ ์ฐพ์ ์ ์๋ ๊ฒฝ๊ณ๋ ๊ฐ์ฌ๋ ๊ณผ์ ๋ฅผ ์ ์ถ์ ํ๋ ์ฑ ์์ ์ ์ ๊ทธ์ ์ ์๋ค.
๋ฐ๋ฉด ๊ฒฝ๊ณ๋ฅผ ์ ์ค์ ํด์ค ์ฝ๋๋ฅผ ํ์ธํด๋ณด์.
class Teacher {
Homework assignment() {
Homework homework = new Homework();
boolean isValid = HomeworkValidator.validate(homework);
if (isValid) {
throw IllegalStateException();
}
return homework;
}
}
๊ฐ์ฌ๋ ์์ ๊ฐ์ด ๊ณผ์ ๋ฅผ ์ถ์ ํ ๋ ์ค์ค๋ก ๊ณผ์ ๊ฐ ์ ํจํ์ง ํ์ธ์ ํ๊ณ ๊ทธ ์ฑ ์์ ๋คํ๊ณ ์์์ ์ ์ ์๋ค.
์ด๋ ๋ฏ ๊ฒฝ๊ณ๋ ๊ฐ์ฒด์งํฅ์์ ์ด๋ค, ๋ฟ๋ฆฌ๊ฐ ๋ ์ ์๋ ๊ฐ๋ ์ด๋ผ๊ณ ๋ค๊ฐ์๋ค.
๋๊ธ