본문 바로가기
Programming/Java, Spring

자바와 함수형 프로그래밍

by Renechoi 2023. 6. 2.

함수형 프로그래밍과 자바의 객체지향 프로그래밍은 문제에 대한 접근 방식이 다르다. 

 

1. 함수형 프로그래밍 ? 

 

함수란 ? f(x) 

=> input을 입력할 때 output을 반환하는 것 

=> 자바에서는 method 

 

함수는 역할을 고려할 때 동사에 가깝다. => method 명명을 동사로 짓는다. 

 

반대로 객체는 명사 형태로 짓는다. 

 

동사의 형태로 추상화하는 것이 쉬울 때가 있다. 

 

 

명령형 프로그래밍
Imperative Programming
선언형 프로그래밍
Declarative Programming
OOP 객체 지향 프로그래밍 
How to do? 
어떻게 해야 할까? 

Functional Programming
What to do? 
무엇을 해야 할까?

 

예를 들어, 유저 리스트가 주어졌을 때 검증되지 않은 유저들의 이메일을 리스트로 반환하고 싶다면 ? 

 

명령형 프로그래밍 

- 이메일을 담을 리스트 선언

- 루프

- 유저 선언

- 검증 되지 않았는지를 체크

- 않았다면 변수에 이메일 추출

- 이메일 리스트 넣기 

 

함수형 프로그래밍

- 유저리스트에서 

  - 검증되지 않은 유저만 골라내서 

  - 이메일을 추출해서

- 리스트로 담는다 

 

 

 

 

 

2. 1급 시민으로서의 함수

 

 

1급 시민이란 ? 

 

조건 

- 함수/메서드의 매개 변수로서 전달할 수 있는가

- 함수/메서드의 반환값이 될 수 있는가

- 변수에 담을 수 있는가 

 

=> 이 3가지 조건을 만족하면 1급 시민이라고 할 수 있다. 

=> Object를 고려하면 3가지 조건을 만족한다 따라서 Object는 1급 시민 

 

그런데 함수는 ? 

 

매개 변수로 지정을 하거나, 반환 값으로서 지정하거나, 변수에 담는 것 => 잘 와닿지 않을 수 있다. 

 

즉 함수를 Object 형태로 나타낸다는 것. 

 

 

 

3. 왜 알아야 할까? 

 

함수형 프로그래밍을 통해 얻을 수 있는 것들 

 

1. 역할에 충실한 코드: 함수는 역할을 수행한다 

-> 딱 역할을 나눠서 사용할 수 있다 

- 가독성 좋은 코드

- 유지/보수에 용이

- 버그로부터 안전 

- 확장성에 용이 

 

 

2. 패러다임의 전환

- Stream, Optional -> 간결하고 짧은 코드를 작성할 수 있다. 

 

그렇다면 OOP랑 대치되는 개념일까? 

 

그렇지 않다. 

FP는 OOP에 날개를 달아준다 

 


ref. https://fastcampus.co.kr/dev_red_lsh

반응형