소프트웨어 개발 과정에서 기능 구현만큼이나 중요한 요소는 코드의 가독성과 유지보수성입니다. 간단한 작업이라도 어떻게 구성하느냐에 따라 코드의 품질은 크게 달라질 수 있습니다. 이 글에서는 displayItems()
메서드를 예시로 들어, 관심사 분리(Separation of Concerns) 원칙이 실제 코드에 어떻게 반영될 수 있는지 살펴봅니다.
다음은 장바구니의 상품 목록과 합계를 출력하는 코드입니다. 두 코드 모두 동일한 기능을 수행하지만 구성 방식에서 차이를 보입니다.
// 첫 번째 코드
public void displayItems(){
System.out.println("장바구니 상품 출력");
int sum = 0;
for (int i = 0; i < itemCount; i++) {
System.out.println("상품명:" + items[i].getName() + ", 합계:" + items[i].getTotalPrice());
sum += items[i].getTotalPrice();
}
System.out.println("전체 가격 합:" + sum);
}
// 두 번째 코드
public void displayItems() {
System.out.println("장바구니 상품 출력");
for (int i = 0; i < itemCount; i++) {
Item item = items[i]; // 명확한 객체 참조
System.out.println("상품명:" + item.getName() + ", 합계:" + item.getTotalPrice());
}
System.out.println("전체 가격 합:" + calculateTotalPrice()); // 별도 메서드 분리
}
두 번째 코드에서는 items[i]
를 반복적으로 호출하는 대신, Item item = items[i];
를 통해 해당 객체에 의미 있는 이름을 부여합니다. 이로 인해 다음과 같은 이점이 생깁니다.
이러한 구조는 코드의 명료성을 높이고, 유지보수 과정에서도 실수를 줄이는 데 도움을 줍니다.
두 번째 코드에서는 가격 합계를 직접 계산하지 않고 calculateTotalPrice()
라는 별도 메서드로 책임을 분리합니다. 이 방식은 다음과 같은 장점을 가집니다.
이처럼 로직을 역할에 따라 나누는 것은 관심사 분리 원칙을 지키는 기본적인 접근 방식입니다.
작은 코드 차이가 전체 구조에 주는 영향은 결코 작지 않습니다. Item item = items[i];
와 같은 사소한 습관은 코드의 가독성을 높이고, 실수를 줄이며, 궁극적으로 더 나은 유지보수성을 제공합니다.
또한 출력과 계산을 구분하는 방식은 단순한 메서드 분리를 넘어, 하나의 함수가 하나의 책임만 갖도록 설계하는 데 기반이 됩니다.
잘 정돈된 코드란 단순히 작동하는 것이 아니라, 이해하기 쉽고, 변경하기 쉬우며, 함께 일하기 쉬운 코드를 말합니다. 관심사 분리를 고려한 작고 명확한 리팩토링이 그러한 코드를 만드는 출발점이 됩니다.