본문 바로가기

Language/Java

Java 8과 함수형 프로그래밍

반응형

목차

 

· 선언형 프로그래밍

· 왜 함수형 프로그래밍인가?

· 1급 시민으로서 함수

 


 

 

함수형 프로그래밍이란 객체지향 프로그래밍과 같은 프로그래밍 패러다임중 하나이다. 

먼저 함수형 프로그래밍의 기반을 이루는 개념인 선언형 프로그래밍을(declarative programming)을 알아보자.

 

선언형 프로그래밍


프로그램으로 시스템을 구현하는 방식은 크게 두 가지로 구분할 수 있다.

명령형 프로그래밍과 선언형 프로그래밍

 

명령형 프로그래밍은 작업을 '어떻게' 수행할 것인지에 집중한다.

반면 선언형 프로그래밍은 '무엇'에 집중한다. 내부 구현 방법은 라이브러리가 결정한다.

두 방법이 무슨 차이가 있는지 의문이 들 것이다. 예시를 보자

 

예를 들어 유저 리스트에서 나이가 가장 많은 유저를 가져오는 상황에서 명령형 프로그래밍으로는 다음과 같이 작성할 수 있다.

User maxAgeUser = users.get(0);
for (User user : users.subList(1,users.size())) {
    if (user.getAge() > maxAgeUser.getAge())
        maxAgeUser = user;
}

가장 나이가 많은 사람을 구하는 방법(할당,  조건문, 루프)에 집중하고 있다.

 

반면 선언형 프로그래밍은 '무엇'에 집중한다.

Optional<User> user = users.stream()
                .max(Comparator.comparing(User::getAge))

상대적으로 간결하게 코드가 작성이 되었고 선언적으로 작성되어 있어 가독성이 좋다.

위에서 말했던 대로 가장 나이가 많은 사람을 구하는 방법은 라이브러리가 집중한다.

 

왜 함수형 프로그래밍인가?


함수형 프로그래밍을 통해 우리가 얻는 이점들이 있다.

 

1. 부작용이 없는 함수

불변이 아닌 변수는 예상치 못한 상황에 예상치 못한 값으로 변경될 가능성이 있다.

함수형 프로그램은 대입문이 없기 때문에 기본적으로 한 번 값이 변수에 할당되고 나면 이후에 값이 변경되지 않는다

 

2. 가독성 좋은 코드

스트림을 이용하면 여러 연산을 연결해서 복잡한 질의를 표현할 수 있다.

람다 표현식을 이용하면 선언형을 활용해 자연스럽게 읽고 쓸 수 있는 코드를 구현할 수 있다.

 

 

1급 시민으로서의 함수


함수형 프로그래밍은 함수를 값으로 취급한다.

1급 시민으로서 함수로 본다는 것인데 1급 시민의 조건은 다음과 같다.

  • 함수/메서드의 매개변수(parameter)로서 전달할 수 있는가
  • 함수/메서드의 반환값(return)이 될 수 있는가
  • 변수에 담을 수 있는가

함수형 프로그래밍은 함수를 object 타입으로 나타낼 수 있게 해 1급 시민으로 역할을 할 수 있게 한다.

반응형