개발을 하다 보면 어느 포인트에서 클린코드라는 것을 접하게 됩니다.
대부분은 혼자 프로그래밍을 하면서 변수명, 함수명 혹은 로직 구조 설계에 대해 개개인적으로 습관이 굳어지게 됩니다.
따라서 사람마다 코드 스타일이 달라지게 되는데, 이는 협업할 때 타인이 코드 이해를 할 때 더 오랜 시간을 소모하게 됩니다.
따라서 개발자들은 클린코드를 작성하기 위해 노력해야 합니다.
클린코드
클린코드란 네이밍, 중복 제거, 하나의 역할만 수행하게 끔 코드를 작성해서 가독성이 높은 코드를 의미합니다.
즉, 위와 같은 조건으로 프로그래밍을 하면서 코드를 누구나 이해할 수 있는 것이 바로 클린코드를 의미합니다.
다음 예시를 통해 클린코드가 어떤 의미인지 조금 더 직관적으로 확인해보겠습니다.
기존 클린코드 적용 전 코드
public class CleanCode {
public static void main(String[] args) {
System.out.println(func1(10));
}
public static int func1(int a) {
int b=0;
for (int i=1; i<=a; i++) {
b+=i;
}
return b;
}
}
위에 코드를 보면 func1 메서드가 정확히 무슨 역할을 하는지 한눈에 파악하기 힘듭니다.
이를 조금 더 이해하기 쉽게 리팩토링을 진행해보겠습니다.
리팩토링 코드
public class CleanCode {
public static void main(String[] args) {
System.out.println(sumFromZeroToIndex(10));
}
public static int sumFromZeroToIndex(int index) {
int sum = 0;
for (int i = 1; i <= index; i++) {
sum += i;
}
return sum;
}
}
0부터 Index의 합이라는 이름을 부여하고, 간격을 두어 이전의 코드보다 조금 더 보기 좋은 코드가 되었습니다.
예시를 하나 더 보겠습니다.
기존 클린코드 적용 전 코드
public void exception1(String str) {
for (int i = 0; i < str.length(); i++) {
if (!str.matches("[1-9]+")) {
throw new IllegalArgumentException("1~9의 숫자만 입력해주세요.");
}
}
}
위에 코드를 보고 어떤 코드인지 한눈에 알아보실 수 있나요? 역시나 파악하기 힘듭니다.
위에 코드를 다시 리팩토링을 해보겠습니다.
리팩토링 코드
private static final String ONLY_NUMBER_REGEX = "[1-9]+";
public void isContainedOnlyNumber(String numberTypeOfString) {
for (int i = 0; i < numberTypeOfString.length(); i++) {
if (!isUserInputContainsOnlyNumber(numberTypeOfString)) {
throw new IllegalArgumentException("1~9의 숫자만 입력해주세요.");
}
}
}
public boolean isUserInputContainsOnlyNumber(String numberTypeOfString) {
if (numberTypeOfString.matches(ONLY_NUMBER_REGEX)) {
return true;
}
return false;
}
위와 같이 상수를 통해 정규표현식을 지정해주고, if문 안의 조건을 따로 빼주고, 메서드 이름을 보다 명확한 이름으로 지어주면서 메서드가 어떤 역할을 하는지 쉽게 알 수 있습니다.
우리는 위와 같이 코드를 쉽게 이해하려면, 지속적으로 클린코드를 통한 리팩토링을 진행해줘야 합니다.
가독성이 좋게끔 클린 코드를 적용하고, 유지보수를 위한 리팩토링(메서드 분리) 진행한다면 이를 통해 개발 생산성이 더 좋아지고 동료들과 더 편한 협업을 진행할 수 있을 겁니다.
'Develop > Java' 카테고리의 다른 글
[Java] 원시값 포장에 대해 알아보자 (2) | 2023.02.23 |
---|---|
[Java] 쉽다 쉬워! 전래동화를 통해 알아보는 단위 테스트 (0) | 2023.02.16 |
[Java] 만취한 사람도 쉽게 이해할 수 있는 '일급 컬렉션'에 대해 알아보자! (0) | 2023.02.13 |
[Java] final 키워드에 대해 알아보자 (0) | 2023.02.13 |
[Java] AssertJ 문법과 간단한 예시 (예외처리 검증 추가) (0) | 2023.02.13 |