[개발 일기] 2025.02.08 - 함수형 프로그래밍

2025. 2. 8. 18:32·개발 일기

💡 개요

오늘은 함수형 프로그래밍에 대해 정리해 보자.

 

 

 

📕 함수형 프로그래밍

함수형 프로그래밍이란 데이터를 변경하지 않고, 순수 함수를 사용해 기능을 구현하는 방식을 말한다.

 

 

이 방식에서는 하나의 기능을 여러 개의 순수 함수로 나누어 구현할 수 있으며, 이를 통해 코드의 가독성을 높이고 유지보수를 더 쉽게 할 수 있다.

 

 

또한 함수형 프로그래밍을 적용한 메서드는 순수함수이기 때문에 메서드 바깥에 있는 변수나 객체를 변경하지 않고 새로운 값을 반환한다. 이를 통해 불변성을 지킬 수 있다.

 

 

함수형 프로그래밍의 특징은 크게 ‘순수 함수, 부수 효과, 1급 객체’가 있다.

 

 

 

🚀 순수 함수 & 부수효과

 

순수 함수는 외부 상태에 의존하지 않으며, 외부 상태를 변경하지 않는 함수를 의미한다.

 

 

즉, 함수가 매개변수로 전달된 값만을 이용해 결과를 도출하고, 부수효과를 발생시키지 않는다.

 

 

그리고 순수 함수는 같은 입력에 대해 항상 동일한 출력을 보장한다.

 

 

이런 특성 덕분에, 예측 가능하고 테스트에 편리하게 사용할 수 있다.

 

 

 

🚀 1급 객체

 

1급 객체는 이 순수 함수가 다른 메서드에서 반환 값으로 사용될 수도 있고, 파라미터로 입력될 수 있는 것을 의미한다.

 

 

그 이유는 함수형 프로그래밍에선 함수를 객체처럼 사용할 수 있기 때문이다.

 

 

보통 자바에선 람다식을 사용해 한 메서드를 다른 메서드의 입력 파라미터로 사용한다.

 

 

 

🚀 명령형 프로그래밍 예시 코드

아래의 코드는 리스트에 있는 짝수의 합을 구하는 코드이다.

 

public class EvenSum {
    public static void main(String[] args) {
        List<Integer> numberList = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
        
        int sum = 0;

        for (int number : numberList) {
            if (number % 2 == 0) {
                sum += number;
            }
        }
        
        System.out.println("짝수 합 : " + sum);
    }
}

 

위 코드를 보면 메서드(for문)가 외부 상태(int sum)를 변경하는 부수효과가 발생하고 있다.

 

 

 

🚀 함수형 프로그래밍 예시 코드

public class EvenSum {
    public static void main(String[] args) {
        List<Integer> numberList = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);

        int sum = numberList.stream()
                .filter(n -> n % 2 == 0)
                .mapToInt(n -> n)
                .sum();

        System.out.println("짝수 합 : " + sum);
    }
}

 

명령형 프로그래밍에서 발생한 부수효과를 Stream API를 사용해 해결하였다.

 

 

이처럼 Stream을 사용하면 부수효과를 방지하면서 자연스럽게 불변성을 유지할 수 있게 된다.

 

 

위의 int sum 변수는 상태 변경 없이 새로운 값을 반환하는 방식으로 처리된다.

 

 

 

👨🏻‍💻 참고

 

https://mangkyu.tistory.com/111

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.02.10 - 디미터의 법칙  (1) 2025.02.10
[개발 일기] 2025.02.09 - IP보안  (0) 2025.02.09
[개발 일기] 2025.02.07 - CSRF  (0) 2025.02.07
[개발 일기] 2025.02.06 - 초기화하다?  (1) 2025.02.06
[개발 일기] 2025.02.05 - 식별 관계, 비식별 관계  (0) 2025.02.05
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.02.10 - 디미터의 법칙
  • [개발 일기] 2025.02.09 - IP보안
  • [개발 일기] 2025.02.07 - CSRF
  • [개발 일기] 2025.02.06 - 초기화하다?
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.02.08 - 함수형 프로그래밍
상단으로

티스토리툴바