์ธํ๋ฐ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ - ์ต๋ฒ๊ท ๋ฅผ ๊ณต๋ถํ๋ฉฐ ์ ์ํ๊ธฐ ๋ ธํธ์ ๋๋ค.
์ง์ ์ค์ ์์ Java๋ฅผ ์ฐ๊ฒ ๋๋ฉด์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ค์์ฑ์ด ๋ผ๋ฅผ ๊ฐํํ๋ค... ๊ณต๋ถํ์!
"Software maintenance is not keep it working like before it is keep being useful in a changing world" - Jessica Kerr
์ ์ง๋ณด์๋ ๊ทธ๋๋ก๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ ์ ์ฉํ๊ฒ ๋ณ๊ฒฝํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋ถ์๊ณผ ์์ ์ด ๋น ๋ฅด๊ฒ ๋์ด์ผ ํ๋ค.
๋น์ฉ๊ณผ ๋ณํ ๋ฎ์ ๋น์ฉ์ผ๋ก ๋ณํํ ์ ์์ด์ผ ํ๋ค. 1. ํจ๋ฌ๋ค์ ๊ฐ์ฒด ์งํฅ, ํจ์ํ, ๋ฆฌ์กํฐ๋ธ ๋ฑ 2. ์ฝ๋, ์ค๊ณ, ์ํคํ ์ฒ DRY, TDD, SOLID, DDD, ... ํด๋ฆฐ ์ํคํ ์ฒ, MSA, ... 3. ์ ๋ฌด ํ๋ก์ธ์ค/๋ฌธํ ์ ์์ผ, DevOps, ... ๊ฐ์ฒด์งํฅ์ด ๋น์ฉ์ ๋ฎ์ถ๋ ๋ฐฉ๋ฒ ์บก์ํ + ๋คํ์ฑ(์ถ์ํ) |
๊ฐ์ฒด
์ ์ฐจ ์งํฅ vs ๊ฐ์ฒด ์งํฅ : ์ ์ฐจ ์งํฅ
์ ์ฐจ ์งํฅ์ ์๊ฐ์ด ๊ฐ์๋ก ๋ณต์กํด์ง๊ณ ์์ ์ด ์ด๋ ค์์ง๋ค.
-> ๋ฐ์ดํฐ๊ฐ ๋ง์ ๊ณณ์์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ณต์กํด์ง๊ณ ์ ํ์ฑ์ด ๋จ์ด์ง๋ค.
๊ฐ์ฒด์งํฅ์ ๊ฐ๊ฐ์ ๊ฐ์ฒด๊ฐ ๋ฐ์ดํฐ์ ํ๋ก์์ ๋ฅผ ํฌํจํ๊ณ ์์ด ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ํด๋น ๋ฐ์ดํฐ์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํ๋ค.
-> ํ๋ก์์ ๋ฅผ ํธ์ถํ์ฌ ์ฐ๊ฒฐํ๊ฒ ํ๋ค.
๊ฐ์ฒด์ ํต์ฌ -> ๊ธฐ๋ฅ ์ ๊ณต
๊ฐ์ฒด๋ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ผ๋ก ์ ์ -> ๋ด๋ถ์ ์ผ๋ก ๊ฐ์ง ๋ฐ์ดํฐ๋ก ์ ์ํ์ง ์๋๋ค.
์ด๋ฌํ ๊ฐ์ฒด์ ๊ฐ์ฒด๊ฐ ์ํธ ์์ฉํ๋ ๊ฒ์ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค๊ณ ํํํฉ๋๋ค.
-> ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฉ์์ง, ๋ฆฌํด ๋ฉ์์ง, ์ต์ ์ ๋ฉ์์ง
์บก์ํ
์บก์ํ๋ง ์ํด๋,,, ์ข์ ์ฝ๋๋ฅผ ๋ง๋ค ๊ฐ๋ฅ์ฑ์ ๋ํ๋ค...
- ๋ฐ์ดํฐ + ๊ด๋ จ ๊ธฐ๋ฅ ๋ฌถ๊ธฐ
- ๊ฐ์ฒด๊ฐ ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์ธ๋ถ์ ๊ฐ์ถ๋ค. ( ๋ฐ์ดํฐ ์์ธ ๋ด์ฉ์ ์ธ๋ถ์ ๊ฐ์ถค)
- ์ ๋ณด ์๋ ์๋ฏธ ํฌํจ
- ์ธ๋ถ์ ์ํฅ ์์ด ๊ฐ์ฒด ๋ด๋ถ ๊ตฌํ ๋ณ๊ฒฝ ๊ฐ๋ฅ
// ์ด๋ฐ ๊ธฐ๋ฅ์ด ์๋ค๋ฉด
if(acc.getMembership() == REGULAR && acc.getExpDate().isAfter(now())) {
...์ ํ์ ๊ธฐ๋ฅ
}
// ์๊ตฌ์ฌํญ์ด ๋ณ๊ฒฝ๋๋ฉด์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์
if(acc.getMembership() == REGULAR &&
(
(acc.getServiceDate().isAfter(fiveYearAgo) && acc.getExpDate().isAfter(now())) ||
์กฐ๊ฑด || ์กฐ๊ฑด || ์กฐ๊ฑด . . .)
)
{
...์ ํ์ ๊ธฐ๋ฅ
}
์๊ตฌ ์ฌํญ์ด ๋ณํ๊ฐ ๋ฐ์ํ์ฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ/์ฌ์ฉ์ ๋ณํ๊ฐ ์๊น -> ์์ ์ด ์ฐ์์ ์ผ๋ก ๋ฐ์๋๋ค.(์ ์ฐจ์งํฅ ๋ฐฉ์)
์บก์ํ๋ฅผ ํ์ฌ ํด๊ฒฐํ ๋ฐฉ๋ฒ
if(acc.hasRegularPermission()) {
... ์ ํ์ ๊ธฐ๋ฅ
}
pulbic class Account{
private Membership memvership;
private Date expDate;
// ํ์ ๊ด๋ จ๋ ๊ธฐ๋ฅ
public boolean hasRegularPermission(){
return membership == REGULAR && expDate.isAfter(now())
}
์ด๋ฐ์์ผ๋ก ๊ตฌ์กฐ๋ฅผ ์ก์ผ๋ฉด ์๊ตฌ์ฌํญ์ด ๋ณํ๊ฐ ์๊ฒจ๋ ์บก์ํํ ํ์ ๊ด๋ จ๋ ๊ธฐ๋ฅ ๋ฉ์๋๋ง ์์ ํด์ฃผ๋ฉด ๋๋ค.
- ์ฐ์์ ์ธ ๋ณ๊ฒฝ ์ ํ๋ฅผ ์ต์ํํ ์ ์์ด ์บก์ํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ์ฝ๋ ์ํฅ์ ์ต์ํํ ์ ์๋ค.
- ๊ทธ๋ฆฌ๊ณ ์บก์ํ๋ฅผ ์๋ํ๊ฒ ๋๋ฉด ๊ธฐ๋ฅ์ ๋ํ ์ดํด๋ฅผ ๋์ผ ์ ์๋ค.
- ์บก์ํ๋ฅผ ์ํ ๊ท์น
Tell, Don't Ask ๋ฐ์ดํฐ ๋ฌ๋ผ ํ์ง ๋ง๊ณ ํด๋ฌ๋ผ๊ณ ํ๊ธฐ --> ์บก์ํ ๊ฐ๋ฅ์ฑ ๋์์ง
if(acc.getMembership() == REGULAR(){
์ ํ์ ๊ธฐ๋ฅ
}
// --->
if(acc.hasRegularPermission()){
์ ํ์ ๊ธฐ๋ฅ
}
์บก์ํ๋ฅผ ์ํ ๊ท์น
- Demeter's Law
๋ฉ์๋์์ ์์ฑํ ๊ฐ์ฒด์ ๋ฉ์๋๋ง ํธ์ถ
ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ๊ฐ์ฒด์ ๋ฉ์๋๋ง ํธ์ถ
ํ๋๋ก ์ฐธ์กฐํ๋ ๊ฐ์ฒด์ ๋ฉ์๋๋ง ํธ์ถ
acc.getExpDate().isAfter(now) -> acc.isExpried()
Date date = acc.getExpdate(); -> acc.isValid(now)
date.isAter(now);
์ ๋ฆฌ
์บก์ํ : ๊ธฐ๋ฅ์ ๊ตฌํ์ ์ธ๋ถ์ ๊ฐ์ถค
์บก์ํ๋ฅผ ํตํด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ์ฝ๋์ ์ํฅ์ ์ฃผ์ง ์๊ณ (๋๋ ์ต์ํ) ๋ด๋ถ ๊ตฌํ์ ๋ณ๊ฒฝํ ์ ์๋ ์ ์ฐํจ
'๐ WEB > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ด๊ฐ ๋ณด๋ ค๊ณ ์ ๋ฆฌํ๋ JAVA ๋ฉํฐ ์ค๋ ๋ 2 - ๋๊ธฐํ ๋ฉ์๋์ ๋๊ธฐํ ๋ธ๋ก (0) | 2021.09.28 |
---|---|
๋ด๊ฐ ๋ณด๋ ค๊ณ ์ ๋ฆฌํ๋ JAVA ๋ฉํฐ ์ค๋ ๋ 1 - ๋ฉํฐ์ค๋ ๋ ๊ฐ๋ (0) | 2021.09.13 |
Enum Type ์ฌ์ฉํ๊ธฐ (0) | 2020.11.17 |
[JAVA] ์ ๋ฐ์ดํฐ ํ์ ์ ๋ถ๋ฅ (0) | 2020.06.23 |
Java Enum์ด๋? (0) | 2020.04.19 |