안녕하세요.
오늘은 Clean Code, Refactoring, Test에 대해서 공부해보았습니다.
처음에는 Clean Code를 단순히 “깔끔한 코드”라고 생각했지만, 강의를 듣고 나니 핵심은 다른 사람이 읽고 이해하고 수정하기 쉬운 코드라는 점이었다.
코드는 한 번 작성되지만 여러 번 읽힌다.
그래서 좋은 코드는 실행만 잘 되는 코드가 아니라, 의도가 드러나고 변경하기 쉬운 코드여야 한다.
1. 이름은 의도를 드러내야 한다
public boolean check(int age) {
return age >= 18;
}
check()라는 이름만 봐서는 무엇을 확인하는지 알기 어렵다.
public boolean isAdult(int age) {
return age >= 18;
}
isAdult()처럼 이름을 바꾸면 함수의 목적이 바로 보인다.
이름은 코드의 가장 작은 설명이라고 느꼈다.
2. 함수는 한 가지 일에 집중해야 한다
public void signup(String email, String password) {
if (!email.contains("@")) {
throw new IllegalArgumentException("이메일 형식 오류");
}
if (password.length() < 8) {
throw new IllegalArgumentException("비밀번호 길이 오류");
}
System.out.println("회원가입 성공");
}
이 함수는 회원가입, 이메일 검증, 비밀번호 검증을 모두 처리한다.
지금은 짧지만 기능이 늘어나면 금방 복잡해질 수 있다.
public void signup(String email, String password) {
validateEmail(email);
validatePassword(password);
System.out.println("회원가입 성공");
}
private void validateEmail(String email) {
if (!email.contains("@")) {
throw new IllegalArgumentException("이메일 형식 오류");
}
}
private void validatePassword(String password) {
if (password.length() < 8) {
throw new IllegalArgumentException("비밀번호 길이 오류");
}
}
함수를 나누면 signup()에서는 전체 흐름이 보이고, 세부 조건은 각각의 함수에서 확인할 수 있다.
3. 리팩토링은 구조를 개선하는 일이다
리팩토링은 기능을 바꾸는 것이 아니라, 외부 동작은 유지한 채 내부 구조를 개선하는 과정이다.
public int getPrice(int price, boolean isStudent) {
if (isStudent) {
return price - 1000;
}
return price;
}
public int calculateDiscountedPrice(int price, boolean isStudent) {
if (isStudent) {
return price - 1000;
}
return price;
}
동작은 같지만 함수 이름이 더 명확해졌다.
이처럼 작은 이름 변경도 코드를 이해하기 쉽게 만드는 리팩토링이 될 수 있다.
4. 테스트는 리팩토링의 안전장치다
리팩토링을 할 때 가장 걱정되는 것은 기존 기능이 깨지는 것이다.
그래서 테스트가 필요하다.
@Test
void 학생이면_1000원을_할인한다() {
PriceCalculator calculator = new PriceCalculator();
int result = calculator.calculateDiscountedPrice(10000, true);
assertEquals(9000, result);
}
테스트가 있으면 내부 코드를 수정해도 기존 기능이 그대로 동작하는지 확인할 수 있다.
즉, 테스트는 코드를 고칠 수 있게 해주는 안전장치다.
오늘의 정리
Clean Code는 예쁘게 보이는 코드가 아니라 읽고 수정하기 쉬운 코드다.
좋은 이름은 의도를 드러내고, 함수는 한 가지 일에 집중해야 한다.
리팩토링은 코드의 구조를 개선하는 과정이며, 테스트는 그 과정에서 기능이 깨지지 않도록 도와준다.
이번 강의를 통해 앞으로 코드를 작성할 때 단순히 “동작하는가”만 보지 않고, 다른 사람이 읽었을 때 이해할 수 있는가도 함께 고민해야겠다고 느꼈다.
'TIL' 카테고리의 다른 글
| MOTIPE 프로젝트 회고: 회원가입 데이터 흐름과 프로젝트 기준 문서 만들기 (0) | 2026.06.16 |
|---|---|
| AI를 활용하자 - chatbot만들기 (0) | 2026.06.05 |
| POKEAPI 이용해서 포켓몬 도감 만들기 (0) | 2026.06.01 |
| 메모앱 그리고 CALLBACK과 PROMISE (0) | 2026.05.29 |
| DOM과 EVENT 그리고 BOM (0) | 2026.05.28 |
