티스토리 뷰

 도입

- 지금까지 나는 OOP 방식으로 java 프로그래밍을 해왔다.(사실 배운게 이거 밖에 없다.)

- 즉, 비즈니스 요구나 문제를 해결함에 있어서 모든 것을 '객체로 추상화'한 다음에 풀이해 왔다는 것이다.

- 이러한 기존의 패러다임의 변화에 대해 알아보자

 

 

● 함수형 프로그래밍이란?

- 함수형 프로그래밍은 OOP(객체지향) 프로그래밍과 문제에 대한 접근 방식이 다르다.

- 아래의 글에서 조금 더 자세히 알아보자

Java에서
함수의 작명은 insertUser, deleteName과 같이 '동사형'으로 짓는다.
객체의 작명은 UserName, ProductPrice와 같이 '명사형'으로 짓는다.

명령형 프로그래밍(Imperative Programming)
- OOP 객체 지향 프로그래밍
- How to do?(어떻게 하여야 하는가?)
- 문제를 해결할 때 어떻게 해야하는지에 초점을 둔다.

선언형 프로그래밍(Declarative Programming)
- Functional Programming이 Declarative Programming의 일종이다.
- What to do?(무엇을 하여야 하는가?)
- 문제를 해결할 때 무엇을 해야하는지에 초점을 둔다.

 

 

ex) 유저 리스트가 주어졌을 때 검증되지 않은 유저들의 이메일 리스트를 출력해라

[명령형 프로그래밍(How to do?)]  →  문제를 해결할 때 어떻게 해야하는지에 초점을 둔다.
1. 이메일을 담을 리스트 선언
2. 루프(반복문)
3. 유저 선언
4. 검증되지 않았는지 체크
5. 않았다면 변수에 이메일 추출
6. 이메일 리스트에 넣기

[선언형 프로그래밍(What to do?)]  →  문제를 해결할 때 무엇을 해야하는지에 초점을 둔다.
1. 유저리스트에서
     1-1. 검증되지 않은 유저만 골라내서
     1-2. 이메일을 추출해서
2. 리스트로 받기

- 1 ~ 2 까지의 각 부분들이 각각 하나의 함수들이라고 생각하면 된다.
- 그렇다보니 하나의 함수들이 기존의 OOP 방식 프로그래밍에서의 함수보다 많은 역할을 수행해야한다.

- 위의 예시를 보면 명령형 프로그래밍은 선언형 프로그래밍 보다 거쳐야하는 과정이 많음을 알 수 있다.

- 선언형 프로그래밍은 훨씬 더 깔끔하고 명료하다.

 

 

1급 시민으로서의 함수

- 함수형 프로그래밍에서는 함수의 역할이 OOP 방식에서의 함수 보다 증대된다.

- 즉, 함수가 1급 시민이 되어야한다.

프로그래밍에서 1급 시민의 조건
1. 함수/메서드의 매개변수(parameter)로서 전달할 수 있는가
2. 함수/메서드의 반환값(return)이 될 수 있는가
3. 변수에 담을 수 있는가

- 기존 나의 java 상식에서 함수는 함수(method)의 parameter가 될 수도 없고, return 값이 될 수도 없고, 변수가 될 수도 없다. 이것은 객체(object)만 가능했다.

- 함수에서 위의 얘기가 가능하려면 함수(method)를 객체(object)의 형태로 나타낼 수 있어야한다.

- java8부터 추가된 Functional Programming에 대한 지원이 바로 함수(method)를 객체(object)의 형태로 나타낼 수 있도록 방법을 제공한다는 것이다.

 

 

그래서 왜 Functional Programming을 알아야 하는가?

1. 역할에 충실한 코드
- 가독성 좋은 코드  /  유지 및 보수 용이  /  버그로부터 안전  /  확장성에 용이

2. 패러다임의 전환
- Functional Programming을 이용한 툴(Tool)인 Stream, Optional 등 다양한 기능 활용 가능

- 단, 그렇다고 OOP를 버리라는 건 아니다. Functional Programming이 만능은 아니며 상황에 따라 OOP 접근 방식이 더 용이할 때도 있다.

- Functional Programming은 기존의 OOP 프로그래밍에 날개를 달아주는 거라고 생각하면 된다.

(OOP라는 큰 틀을 유지하면서 필요에 따라 Functional Programming을 쓰는 것이다.)

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함