Functional Programming
-
CS) Functional Programming2023.02.08
CS) Functional Programming
2023. 2. 8. 17:58
728x90
명령형, 선언형 프로그래밍
- 명령형 프로그래밍이란 특정 기능을 수행하기 위해 어떻게(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
함수형 프로그래밍
함수형 프로그래밍이란
- 함수형 프로그래밍은 선언형 프로그래밍을 따르는 대표적인 프로그래밍 패러다임이다.
- 함수형 프로그래밍은 함수들의 집합으로 프로그램이 구성된다.
함수형 프로그래밍을 사용하는 이유
- 기존 명령형 프로그래밍으로 개발한 소프트웨어의 크기가 커짐에 따라 복잡하게 엉켜있는 코드를 유지보수하기가 너무힘듬, 이를 해결하기위해 함수형프로그래밍을 사용하여 작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이하게 해준다.
함수형 프로그래밍의 특징
- 순수함수(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가 없다고 볼수있다.
- No Iterate
- for,while문에는 가변적인 값들과 처리에 대한 코드가 섞여있어 반복문을 사용하지않는다.대신 map,filter같은 함수를 매개변수로 받는 메서드를 이용한다.
- 불변의 자료구조(Immutable)
- 일급 객체
- 일급객체란 다음과 같은 것들이 가능한 객체이다.
- 함수를 변수 혹은 특정 데이터 구조에 담을수 있다.
- 함수를 파라미터를 통해 전달할수있다
- 함수를 결과로 반환할수 있다.
- 할당에 사용된 이름과 무관하게 고유한 구별이가능하다.
- 자바에서 일급객체는 함수형 인터페이스(추상 메서드가 하나인 인터페이스)를 통해 구현이 가능하다.
- 일급객체란 다음과 같은 것들이 가능한 객체이다.
Lambda,Stream에 관하여
Reference
728x90
'CS' 카테고리의 다른 글
CS) 프로세스와 스레드 (0) | 2023.02.08 |
---|---|
CS) Function,Predicate (0) | 2023.02.08 |
CS) Mutable,Immutable (0) | 2023.02.08 |
CS) Tokenizer,Lexer,Parser (0) | 2023.02.08 |
CS) DOM (0) | 2023.02.08 |