티스토리 뷰
본 포스팅의 내용은 [깡샘의 코틀린 프로그래밍]을 공부하고 작성자가 생각을 정리하기 위해서 작성한 글이므로 더욱 자세한 내용을 알고 싶으신 분은 [깡샘의 코틀린 프로그래밍]을 강력 추천합니다!!
함수형 프로그래밍은 요새 가장 핫한 프로그래밍 패러다임이다.
누군가가 말했다. 함수형 프로그래밍을 이해하기는 매우 힘들지만 마침내 이해하고 나면 함수형 프로그래밍을 어떻게 말로 표현해야할지 모르게 된다고..
ㅋㅋㅋㅋㅋ저 말 자체가 왠지 모르게 재밌기도 했고 지금 당장 사용하지는 않더라도 이 패러다임이 어떤 배경에서 나왔고 대략적인 느낌은 알아두는게 낫지 않을까 싶은 마음에서 이렇게 정리해보려고 한다.
1. 함수형 프로그래밍 정의
1-1. 프로그래밍 패러다임으로서의 함수형 프로그래밍
소프트웨어 개발 패러다임은 대략적으로 다음과 같이 진행되어왔다.
1. 절차지향 프로그래밍
- 알고리즘과 로직 중심으로 문제 해결이 주목적이다.
2. 객체지향 프로그래밍
- 클래스 선언이 최우선이다.
- 데이터와 데이터를 처리할 메서드를 하나로 묶어 객체를 만들고 객체를 조합해서 프로그래밍을 작성한다.
- 객체를 만들기 위한 추상화, 캡슐화, 상속, 다형성 등의 개념을 제공한다.
3. 함수형 프로그래밍
- 함수 선언이 최우선이다.
- 데이터의 흐름이 아니라 함수의 선언과 선언된 함수의 유기적인 흐름이 주목적이다.
1-2. 함수형 프로그래밍의 주요 원칙
함수형 프로그래밍에는 여러 원칙이 있다고 하지만 가장 핵심이 되는 원칙음 다음 두가지다.
- 일급 객체(First Class Citizen)로서의 함수
- 순수 함수(Pure Function)로서의 함수
보자마자 드는 생각은 이게 뭔말이야....하는 생각이었다.
일급 객체는 뭐고..순수 함수는 또 뭐야..
보다 자세한 내용은 뒷 단원에서 설명하도록 하겠다.
1-3. 함수형 프로그래밍에서의 데이터
앞서 말한 두 원칙에 따라 함수형 프로그래밍에서의 데이터는 다음과 같은 특징을 가진다.
- 데이터는 변경되지 않으며 프로그램의 상태만 표현한다. (데이터 불변성)
- 함수에서 데이터는 변경하지 않고 새로운 데이터를 만들어 반환한다.
위 말을 정리하자면 함수형 프로그래밍에서는 아예 변수가 없다는 뜻이다. 변경할 수 없는 상수 데이터만 이용하여 함수의 흐름에 따라 프로그래밍하는 개념이다.
1-4. 함수형 프로그래밍의 이점
- 코드가 간결하여 개발 생산성과 유지 보수성이 증대된다.
- 동시성 작업을 좀 더 쉽고 안전하게 구현할 수 있다.
2번째 이점을 조금 더 풀어보자.
현대의 소프트웨어는 규모가 커지고 처리량이 방대해졌기 때문에 멀티코어 프로세싱이 기본이 된 상황이다. 이때 함수형 프로그래밍은 순수 함수를 이용하고 부수효과(side-effect)를 발생하지 않으므로 스레드 안정성을 확보할 수 있고 병렬 처리에 도움을 준다고 한다.
(솔직히 말해서 대략적인 감만 오고 이점이 확 와닿지는 않는다. 아직 함수형 프로그래밍으로 뭘 만들어 본 적이 없어서 인것 같다.)
2. 함수형 프로그래밍의 원칙
이전에 말했던 함수형 프로그래밍의 핵심 원칙 2가지를 풀어보자.
2-1. 일급 객체로서의 함수
- 프로그래밍에서 일급 객체로 함수를 이용한다는 뜻은 프로그램의 최상위 레벨에 함수를 정의하고 모든 구성요소를 함수 안에 작성한다는 개념과 함수를 변수처럼 이용할 수 있다는 개념이다.
- 즉, 객체지향에서의 일급 객체는 클래스이고 함수지향에서 일급 객체는 함수인 것이다.
- 함수 내에 변수, 다른 함수 심지어 다른 클래스를 작성할 수도 있어야 한다.
- 함수가 변수처럼 다른 함수의 호출 인수로 함수를 이용할 수 있는지, 또한 함수를 반환값으로 사용할 수 있는지가 중요하다.
2-2. 순수 함수로 정의되는 함수
- 순수 함수를 정의하면 부수효과(side-effect)가 발생하지 않고 동일한 매개변수 값으로 함수를 이용하면 항상 같은 값과 결과를 반환하는 함수를 말한다.
- 부수효과는 다음과 같이 정의할 수 있다.
- 함수 외부의 다른 값을 변경하지 않는다.
- 함수 내부에서 별도의 입출력이 발생하지 않는다.(파일, DB, 네트워크 등)
깜짝 질문 : 부수효과가 발생하지 않는 함수? 프로그래밍에서 가능한가요?
Ans) 비즈니스 로직을 전산화하는 프로그램에서는 사실상 불가능할것이다.
파일이나 데이터베이스를 이용한다면 이를 이용하는 함수를 호출할 때마다 다른 값을 반환할 수 있다.
즉, 프로그램의 모든 코드를 함수형 프로그래밍으로 짜는 것은 사실상 불가능이지만
이런 부수효과가 발생하는 함수를 일부 가지더라도 전체 프로그램에서 얼마나 많은 부분을
함수형 프로그래밍 패러다임에 맞게 작성하는지가 중요할 것이다.
회고
- 함수형 프로그래밍의 핵심 원칙인 일급 객체, 순수 함수란 개념을 가지고 가도록 하자.
- 당연하게도 아직 함수형 프로그래밍을 이해했다고 말하긴 어려울 것 같다. 천천히 체감해가면서 배워가야겠다.
- 코틀린에 존재하는 함수형 프로그래밍 친화적인 문법에 익숙해지면서 이점을 체득해가면 되지 않을까?
'Programming > 기타' 카테고리의 다른 글
Delegate 패턴 (feat. Java 코드) (0) | 2021.09.05 |
---|---|
Reactive Programming이란? (0) | 2021.06.14 |
MVC, MVP, MVVM 디자인 패턴 간단 정리 (0) | 2021.04.16 |
"모바일 프로그래머"가 갖추어야 할 필수 역량 (0) | 2021.04.09 |
서버란? (feat. 얄팍한 코딩사전) (0) | 2021.03.12 |