함수형 프로그래밍과 자바의 객체지향 프로그래밍은 문제에 대한 접근 방식이 다르다.
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에 날개를 달아준다
'Programming > Java, Spring' 카테고리의 다른 글
자바의 여러가지 functional interface + comparator (0) | 2023.06.03 |
---|---|
자바의 Functional Interface와 andThen 메서드 이해하기 (0) | 2023.06.02 |
[Spring Cloud] Kafka 를 사용한 마이크로서비스 간 데이터 전송, 단일 데이터베이스를 사용해 동기화 문제를 해결하기 (0) | 2023.06.02 |
[Spring Cloud] 마이크로서비스 간의 통신 RestTemplate, FeignClient, Error decoder, 동기화 문제 (0) | 2023.06.02 |
[Spring cloud] 비대칭키로 암호화하기 (0) | 2023.06.01 |