3์ฅ. ํจ์
๐ฏ ํจ์๋ ์๊ณ ๋ช ํํ๊ฒ
- ํจ์๋ ์์์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ์์์ผ ํ๋ค.
- ํจ์๊ฐ ์งง์์๋ก, ๋ค์ฌ์ฐ๊ธฐ ๋ ๋ฒจ์ด ์์์๋ก, ์ฝ๊ธฐ ์ฌ์ด ๊ตฌ์กฐ๊ฐ ๋๋ค.
- ํ๋์ ์ฝ๋๋ฅผ ์ฝ๊ณ ์ดํดํ ์ ์์ด์ผ ํ๋ฉฐ, ํ ๊ฐ์ง ์์ ๋ง ์ํํด์ผ ํ๋ค.
// ๊ธธ๊ณ ๋ณต์กํ ํจ์ ์์
public void processUser(User user) {
if (user.isActive()) {
sendEmail(user);
}
updateLastLogin(user);
saveToDatabase(user);
}
// ์๊ณ ๋ช
ํํ๊ฒ ๋ถ๋ฆฌํ ์์
public void processUser(User user) {
if (isActiveUser(user)) {
notifyUser(user);
}
recordLogin(user);
persistUser(user);
}
private boolean isActiveUser(User user) {
return user.isActive();
}
private void notifyUser(User user) {
sendEmail(user);
}
private void recordLogin(User user) {
updateLastLogin(user);
}
private void persistUser(User user) {
saveToDatabase(user);
}
๐ฏ ํ ํจ์๋ ํ๋์ ์์ ๋ง ํด์ผ ํ๋ค
- ํ๋์ ํจ์๊ฐ ์ฌ๋ฌ ์์ ์ ๋ด๋นํ๋ฉด, ์์ ์ด ํ์ํ ๋ ์ฌ๋ฌ ์ด์ ๋ก ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ค.
- ํจ์๋ ์ค์ง ํ๋์ ์ฑ ์๋ง์ ๊ฐ์ ธ์ผ ํ๋ฉฐ, ์ด๋ฆ๋ ๊ทธ ์ฑ ์์ ๋ถ๋ช ํ ํํํด์ผ ํ๋ค.
๐ฏ ์์์ ์๋๋ก ์ฝํ๋ ์ฝ๋
- ์ฝ๋๋ ์ด์ผ๊ธฐ์ฒ๋ผ ์์์ ์๋๋ก ์์ฐ์ค๋ฝ๊ฒ ์ฝํ์ผ ํ๋ค.
- ๊ฐ ํจ์๋ ๋ฐ๋ก ์๋์ ๋ฑ์ฅํ๋ ์ธ๋ถ ๋์์ ์ค๋ช ํด์ผ ํ๋ค.
public void generateReport() {
fetchReportData();
formatReport();
printReport();
}
private void fetchReportData() { /* ... */ }
private void formatReport() { /* ... */ }
private void printReport() { /* ... */ }
๐ฏ switch ๋ฌธ์ ์ต์ํํ๊ณ ์จ๊ฒจ๋ผ
- switch ๋ฌธ์ ๋ณธ์ง์ ์ผ๋ก ์ฌ๋ฌ ์์ ์ ํฌํจํ๊ธฐ ๋๋ฌธ์ ํจ์๊ฐ ์ปค์ง ์ํ์ด ์๋ค.
- ๋คํ์ฑ์ ์ฌ์ฉํด switch ๋ฌธ์ ๊ฐ์ฒด ์์ฑ ๋จ๊ณ๋ก ์จ๊ธฐ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
// ์ข์ง ์์ switch ๋ฌธ
public double calculatePay(Employee e) {
switch (e.type) {
case SALARIED: return calculateSalariedPay(e);
case HOURLY: return calculateHourlyPay(e);
default: throw new InvalidEmployeeType();
}
}
// ๋คํ์ฑ์ผ๋ก ๊ฐ์
abstract class Employee {
public abstract double calculatePay();
}
class SalariedEmployee extends Employee {
public double calculatePay() { /* ... */ }
}
class HourlyEmployee extends Employee {
public double calculatePay() { /* ... */ }
}
๐ฏ ์ข์ ํจ์ ์ด๋ฆ ์ง๊ธฐ
- ํจ์ ์ด๋ฆ์ ๊ทธ ์์ฒด๋ก ๋ฌด์์ ํ๋์ง ๋ช ํํ๊ฒ ์ค๋ช ํด์ผ ํ๋ค.
- ํจ์ ์ด๋ฆ๋ง ๋ณด๊ณ ๋ ๊ธฐ๋ฅ์ ์์ธกํ ์ ์์ด์ผ ํ๋ค.
์์:
- ๋์ ์ด๋ฆ: doStuff(), handleData()
- ์ข์ ์ด๋ฆ: saveUserProfile(), validateOrderRequest()
๐ฏ ์ธ์๋ ์ต๋ํ ์ค์ฌ๋ผ
- ํจ์ ์ธ์๋ 0~2๊ฐ๊ฐ ์ด์์ ์ด๋ค.
- ์ธ์๊ฐ ๋ง์ ๊ฒฝ์ฐ, ๊ด๋ จ ์๋ ๋ฐ์ดํฐ๋ผ๋ฆฌ ๋ฌถ์ด ๊ฐ์ฒด๋ก ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ด ์ข๋ค.
// ์ธ์๊ฐ ๋ง์ ๊ฒฝ์ฐ
public void registerUser(String name, String email, String password, String phone) {}
// ๊ฐ์ฒด๋ก ๋ฌถ์ด ๊ฐ์
public void registerUser(UserRegistrationInfo info) {}
๐ฏ ๋ถ์ ํจ๊ณผ๋ฅผ ํผํ๋ผ
- ํจ์๋ ์์์น ๋ชปํ ์ํ ๋ณํ๋ฅผ ์ผ์ผํค๋ฉด ์ ๋๋ค.
- ํนํ, ์ ๋ ฅ๊ฐ์ ์์ ํ๊ฑฐ๋ ์ ์ญ ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ ํ๋์ ์ฃผ์ํด์ผ ํ๋ค.
์๋ชป๋ ์์:
public void updateUser(User user) {
user.setLastLogin(LocalDate.now());
database.save(user);
// ๋ถ์ ํจ๊ณผ๋ก ๋ค๋ฅธ ๋ชจ๋์ ์ํ ๋ณ๊ฒฝ
SessionManager.resetSession(user);
}
๊ฐ์ ๋ ์์:
public void updateUser(User user) {
user.setLastLogin(LocalDate.now());
database.save(user);
}
public void resetSessionIfNeeded(User user) {
SessionManager.resetSession(user);
}
๐ฏ ๋ช ๋ น๊ณผ ์กฐํ๋ฅผ ๋ถ๋ฆฌํ๋ผ
- ํจ์๋ฅผ ํธ์ถํ ๋ "์ฝ๊ธฐ"์ "์ฐ๊ธฐ" ์ญํ ์ด ํผํฉ๋์ด ์์ผ๋ฉด ํผ๋์ ์ด๋ํ๋ค.
- ๋ฐ์ดํฐ ์กฐํ ํจ์๋ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์์์ผ ํ๊ณ , ๋ช ๋ น ํจ์๋ ๊ฐ์ ๋ฐํํ์ง ์์์ผ ํ๋ค.
// ์๋ชป๋ ์์
public boolean setName(String name) {
this.name = name;
return true;
}
// ๊ฐ์ ๋ ์์
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
โจ ์ ๋ฆฌํ๋ฉฐ
3์ฅ์ ์ฝ์ผ๋ฉด์ ๊ฐ์ฅ ํฌ๊ฒ ๋๋ ๊ฒ์, ์ข์ ํจ์๋ '์งง๊ณ ๋ช
ํํด์ผ ํ๋ค'๋ ๊ธฐ๋ณธ ์์น์ด์๋ค.
๋ํ, ํ๋์ ํจ์๊ฐ ์ฌ๋ฌ ์ฑ
์์ ์ง๋ ์๊ฐ ์ฝ๋๋ ๊ธ๊ฒฉํ ๋ณต์กํด์ง๋ค๋ ์ ์ ๊นจ๋ฌ์๋ค.
ํนํ ์ธ์ ๊น์๋ ๊ฒ์ "์์์ ์๋๋ก ์ฝํ๋ ํ๋ฆ" ์ด๋ค. ํ๋์ ํฐ ๊ทธ๋ฆผ์ ๋จผ์ ๋ณด์ฌ์ฃผ๊ณ ,
๊ทธ ๋ฐ์ ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ์ ๋จ๊ณ์ ์ผ๋ก ํ์ด๋ด๋ ๋ฐฉ์์ ์ ์ง๋ณด์์ฑ๊ณผ ๊ฐ๋
์ฑ์ ํฌ๊ฒ ๋์ฌ์ค๋ค.
์์ผ๋ก๋ ํจ์๋ฅผ ์์ฑํ ๋, ์ด ํจ์๊ฐ ์ ๋ง ํ๋์ ์ผ๋ง ํ๋์ง, ์ด ํจ์๊ฐ ์ถฉ๋ถํ ์์์ง,
ํจ์ ์ด๋ฆ๋ง์ผ๋ก ์๋๋ฅผ ์ ์ ์๋์ง, ํญ์ ์ค์ค๋ก ์ ๊ฒํด๊ฐ๋ฉฐ ์์ฑํด์ผ๊ฒ ๋ค.
'๐ > Clean Code(ํด๋ฆฐ ์ฝ๋)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํด๋ฆฐ์ฝ๋ ์คํฐ๋] 6์ฅ. ๊ฐ์ฒด์ ์๋ฃ ๊ตฌ์กฐ (0) | 2025.05.01 |
|---|---|
| [ํด๋ฆฐ์ฝ๋ ์คํฐ๋] 5์ฅ. ํ์ ๋ง์ถ๊ธฐ (0) | 2025.05.01 |
| [ํด๋ฆฐ์ฝ๋ ์คํฐ๋] 4์ฅ. ์ฃผ์ (0) | 2025.05.01 |
| [ํด๋ฆฐ์ฝ๋ ์คํฐ๋] 1&2์ฅ. ํด๋ฆฐ ์ฝ๋์ ์๋ฏธ ์๋ ์ด๋ฆ (0) | 2025.04.30 |