티스토리 뷰

본 포스팅의 내용은 [깡샘의 코틀린 프로그래밍]을 공부하고 작성자가 생각을 정리하기 위해서 작성한 글이므로 더욱 자세한 내용을 알고 싶으신 분은 [깡샘의 코틀린 프로그래밍]을 강력 추천합니다!!


함수형 프로그래밍은 요새 가장 핫한 프로그래밍 패러다임이다.

누군가가 말했다. 함수형 프로그래밍을 이해하기는 매우 힘들지만 마침내 이해하고 나면 함수형 프로그래밍을 어떻게 말로 표현해야할지 모르게 된다고..

ㅋㅋㅋㅋㅋ저 말 자체가 왠지 모르게 재밌기도 했고 지금 당장 사용하지는 않더라도 이 패러다임이 어떤 배경에서 나왔고 대략적인 느낌은 알아두는게 낫지 않을까 싶은 마음에서 이렇게 정리해보려고 한다.

1. 함수형 프로그래밍 정의

1-1. 프로그래밍 패러다임으로서의 함수형 프로그래밍

소프트웨어 개발 패러다임은 대략적으로 다음과 같이 진행되어왔다.

1. 절차지향 프로그래밍

  • 알고리즘과 로직 중심으로 문제 해결이 주목적이다.

    2. 객체지향 프로그래밍

  • 클래스 선언이 최우선이다.
  • 데이터와 데이터를 처리할 메서드를 하나로 묶어 객체를 만들고 객체를 조합해서 프로그래밍을 작성한다.
  • 객체를 만들기 위한 추상화, 캡슐화, 상속, 다형성 등의 개념을 제공한다.

3. 함수형 프로그래밍

  • 함수 선언이 최우선이다.
  • 데이터의 흐름이 아니라 함수의 선언과 선언된 함수의 유기적인 흐름이 주목적이다.

1-2. 함수형 프로그래밍의 주요 원칙

함수형 프로그래밍에는 여러 원칙이 있다고 하지만 가장 핵심이 되는 원칙음 다음 두가지다.

  1. 일급 객체(First Class Citizen)로서의 함수
  2. 순수 함수(Pure Function)로서의 함수

보자마자 드는 생각은 이게 뭔말이야....하는 생각이었다.

일급 객체는 뭐고..순수 함수는 또 뭐야..

보다 자세한 내용은 뒷 단원에서 설명하도록 하겠다.

1-3. 함수형 프로그래밍에서의 데이터

앞서 말한 두 원칙에 따라 함수형 프로그래밍에서의 데이터는 다음과 같은 특징을 가진다.

  • 데이터는 변경되지 않으며 프로그램의 상태만 표현한다. (데이터 불변성)
  • 함수에서 데이터는 변경하지 않고 새로운 데이터를 만들어 반환한다.

위 말을 정리하자면 함수형 프로그래밍에서는 아예 변수가 없다는 뜻이다. 변경할 수 없는 상수 데이터만 이용하여 함수의 흐름에 따라 프로그래밍하는 개념이다.

1-4. 함수형 프로그래밍의 이점

  1. 코드가 간결하여 개발 생산성과 유지 보수성이 증대된다.
  2. 동시성 작업을 좀 더 쉽고 안전하게 구현할 수 있다.

2번째 이점을 조금 더 풀어보자.

현대의 소프트웨어는 규모가 커지고 처리량이 방대해졌기 때문에 멀티코어 프로세싱이 기본이 된 상황이다. 이때 함수형 프로그래밍은 순수 함수를 이용하고 부수효과(side-effect)를 발생하지 않으므로 스레드 안정성을 확보할 수 있고 병렬 처리에 도움을 준다고 한다.

(솔직히 말해서 대략적인 감만 오고 이점이 확 와닿지는 않는다. 아직 함수형 프로그래밍으로 뭘 만들어 본 적이 없어서 인것 같다.)

 

2. 함수형 프로그래밍의 원칙

이전에 말했던 함수형 프로그래밍의 핵심 원칙 2가지를 풀어보자.

2-1. 일급 객체로서의 함수

  • 프로그래밍에서 일급 객체로 함수를 이용한다는 뜻은 프로그램의 최상위 레벨에 함수를 정의하고 모든 구성요소를 함수 안에 작성한다는 개념과 함수를 변수처럼 이용할 수 있다는 개념이다.
  • 즉, 객체지향에서의 일급 객체는 클래스이고 함수지향에서 일급 객체는 함수인 것이다.
  • 함수 내에 변수, 다른 함수 심지어 다른 클래스를 작성할 수도 있어야 한다.
  • 함수가 변수처럼 다른 함수의 호출 인수로 함수를 이용할 수 있는지, 또한 함수를 반환값으로 사용할 수 있는지가 중요하다.

2-2. 순수 함수로 정의되는 함수

  • 순수 함수를 정의하면 부수효과(side-effect)가 발생하지 않고 동일한 매개변수 값으로 함수를 이용하면 항상 같은 값과 결과를 반환하는 함수를 말한다.
  • 부수효과는 다음과 같이 정의할 수 있다.
    • 함수 외부의 다른 값을 변경하지 않는다.
    • 함수 내부에서 별도의 입출력이 발생하지 않는다.(파일, DB, 네트워크 등)
깜짝 질문 : 부수효과가 발생하지 않는 함수? 프로그래밍에서 가능한가요?

Ans) 비즈니스 로직을 전산화하는 프로그램에서는 사실상 불가능할것이다.
파일이나 데이터베이스를 이용한다면 이를 이용하는 함수를 호출할 때마다 다른 값을 반환할 수 있다.
즉, 프로그램의 모든 코드를 함수형 프로그래밍으로 짜는 것은 사실상 불가능이지만 
이런 부수효과가 발생하는 함수를 일부 가지더라도 전체 프로그램에서 얼마나 많은 부분을 
함수형 프로그래밍 패러다임에 맞게 작성하는지가 중요할 것이다.

회고

  • 함수형 프로그래밍의 핵심 원칙인 일급 객체, 순수 함수란 개념을 가지고 가도록 하자.
  • 당연하게도 아직 함수형 프로그래밍을 이해했다고 말하긴 어려울 것 같다. 천천히 체감해가면서 배워가야겠다.
  • 코틀린에 존재하는 함수형 프로그래밍 친화적인 문법에 익숙해지면서 이점을 체득해가면 되지 않을까?
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함