코드 스멜(Code Smell)

겉보기에는 동작에 문제가 없어 보이지만, 코드 구조나 설계에 문제가 있을 가능성이 있는 코드

버그는 아니지만, 소프트웨어의 품질을 저하시키는 요인이 되므로 리팩토링의 신호로 간주된다.

코드 스멜 예시


Duplicated Code (중복 코드)

같은 코드가 여러 곳에 반복될 때. 수정 시 실수 가능성이 높아지고 유지보수 어려움.


Long Method (너무 긴 메서드)

한 메서드가 너무 많은 일을 처리하고 있을 때. 읽기 어렵고 재사용이 어려움.


Large Class (너무 큰 클래스)

하나의 클래스가 너무 많은 책임을 가질 때. SRP(Single Responsibility Principle) 위반 가능성 있음.

public class User {
    private String name;
    private String email;
    public void login() { ... }
    public void logout() { ... }
    public void sendEmail() { ... }
    public void calculateTax() { ... }
}
=============================================
단일 책임의 원칙 (SRP) 적용
=============================================
public class UserAccount {
    public void login() { ... }
    public void logout() { ... }
}

public class EmailService {
    public void sendEmail(User user) { ... }
}

public class TaxCalculator {
    public double calculateTax(User user) { ... }
}

Long Parameter List (매개변수 과다)

함수나 메서드의 파라미터가 너무 많을 때. 이해하기 어렵고 테스트하기 힘듦.

public void createUser(String name, String email, String phone, String address, int age) { ... }
=============================================
매개 변수를 객체로 묶어주기
=============================================
public class UserInfo {
    private String name;
    private String email;
    private String phone;
    private String address;
    private int age;
}

public void createUser(UserInfo userInfo) { ... }