[Refactoring] 반복문

서준교·2023년 12월 23일
0

Refactoring

목록 보기
3/8
post-thumbnail

👉 이 게시글은 inflearn의 코딩으로 학습하는 리팩토링 강의 내용을 바탕으로 작성되었습니다.

초창기 프로그래밍 언어부터 있었던 반복문은 최근 여러 언어들이 함수형 프로그래밍을 지원함에 따라, 반복문을 처리할 때 파이프라인 기능을 통해 리팩토링을 할 수 있게 되었습니다. Java또한 함수형 프로그래밍을 지원하고 이에 따라 반복문에 비해 더 나은 대안책이 생겼다고 할 수 있습니다.

이 글에서는 반복문을 파이프라인으로 바꾸는 리팩토링 기법을 살펴보도록 하겠습니다. filter나 mapping과 같은 파이프라인 기능을 사용해 보다 빠르게 함수가 어떤 작업을 하는지 파악할 수 있습니다.

  • filter(필터): 전달받은 조건을 만족하는(true) 데이터만 다음 오퍼레이션으로 전달한다.
  • map(맵): 전달받은 함수를 사용해 입력값을 원하는 출력값으로 변환하여 다음 오퍼레이션으로 전달한다.

반복문을 파이프라인으로 바꾸기

public class Author {

    static public List<String> TwitterHandles(List<Author> authors, String company) {
        var result = new ArrayList<String>();
        for (Author a : authors) {
            if (a.company.equals(company)) {
                var handle = a.twitterHandle;
                if (handle != null)
                    result.add(handle);
            }
        }
        return result;
    }

}

Author 클래스 타입의 리스트를 순회하면서 특정 조건을 만족하는 객체만을 result 리스트에 담아 반환하는 코드입니다. 위에서 언급한 filter와 map을 적용하면 코드를 다음과 같이 리팩토링할 수 있습니다.

public class Author {

    static public List<String> TwitterHandles(List<Author> authors, String company) {
        return authors.stream()
                .filter(author -> author.company.equals(company))
                .map(author -> author.twitterHandle)
                .filter(Objects::nonNull)
                .collect(Collectors.toList());
    }
}

객체의 인스턴스 변수의 값이 특정 값과 일치하는지, 또는 null인지 아닌지와 같은 조건을 판단하는 부분을 filter를 통해, 전달하는 값에 변환이 필요한 경우에는 map을 통해 위와 같이 보다 직관적으로 코드를 리팩토링할 수 있습니다.

profile
매일 성장하는 개발자가 되고 싶습니다. 😊

0개의 댓글