[JAVA] functional programming

chanyoun·2023년 1월 30일
0

명령형, 선언형 프로그래밍

  • 명령형 프로그래밍이란 특정 기능을 수행하기 위해 어떻게(how)에 집중하는 방식을 의미한다.
//명령형 프로그래밍의 예시
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
int result = 0;
for(int n:list){
		if(n%2==0){
			result +=n;
		}
}
System.out.println("result = " + result);
//출력
//result = 30
  • 선언형 프로그래밍이란 특정기능을 수행하기위해 무엇(what)에 집중하는 방식이다.
//선언형 프로그래밍의 예시
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
int result = 0;
result = list.stream()
		.filter(n-> n%2==0)
    	.mapToInt(Integer::intValue)
    	.sum();
System.out.println("result = " + result);
//출력
//result = 30

함수형 프로그래밍

함수형 프로그래밍이란

  • 함수형 프로그래밍은 선언형 프로그래밍을 따르는 대표적인 프로그래밍 패러다임이다.

    함수형 프로그래밍은 함수들의 집합으로 프로그램이 구성된다.


함수형 프로그래밍을 사용하는 이유

  • 기존 명령형 프로그래밍으로 개발한 소프트웨어의 크기가 커짐에 따라 복잡하게 엉켜있는 코드를 유지보수하기가 너무힘듬, 이를 해결하기위해 함수형프로그래밍을 사용하여 작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이하게 해준다.

함수형 프로그래밍의 특징

  1. 순수함수(Pure Function)

    • 동일한 입력값에 대해서 항상 같은값을 반환한다(참조 투명성). 또한 전역변수를 사용하거나 변경해서 예상하지 못한 Side effect(부수효과)를 발생시키지 않는다.
    private String name = "chanyoun";
    
    //Not Pure 
    public String greeting() {
        return "Hello " + name;
    }
    
    //Pure function 
    public static String greeting(String name) {
        return "Hello" + name;
    }
    • Pure function은 name(입력)에 대해 항상 같은 결과 "Hello" + name를 가진다 따라서 참조 투명성의 특성을 가지며, 함수가 결과값 외 다른 상태를 변경시키지 않으므로 Side effect가 없다고 볼수있다.
  2. No Iterate

    • for,while문에는 가변적인 값들과 처리에 대한 코드가 섞여있어 반복문을 사용하지않는다.대신 map,filter같은 함수를 매개변수로 받는 메서드를 이용한다.
  3. 불변의 자료구조(Immutable)

  4. 일급 객체

    • 일급객체란 다음과 같은 것들이 가능한 객체이다.
      • 함수를 변수 혹은 특정 데이터 구조에 담을수 있다.
      • 함수를 파라미터를 통해 전달할수있다
      • 함수를 결과로 반환할수 있다.
      • 할당에 사용된 이름과 무관하게 고유한 구별이가능하다.
    • 자바에서 일급객체는 함수형 인터페이스(추상 메서드가 하나인 인터페이스)를 통해 구현이 가능하다.

Lambda,Stream에 관하여

Reference

profile
기록은 힘들어

0개의 댓글