CS/Java

[JAVA] 함수형 프로그래밍

빈둥벤둥 2021. 8. 7. 18:31

📝 함수형 프로그래밍


💻 명령형 프로그래밍(절차지향, 객체지향)

어떻게 할지 표현한다. 알고리즘을 명시하고, 목표는 명시하지 않는다.

 

🔧 명령형 프로그래밍의 특징

  • 어플리케이션의 상태가 공유되고, 객체의 메서드와 함께 배치된다.
  • 상태와 상태를 변경시키는 관점에서 연산을 설명한다.

 

 

🔧 간단한 명령형 프로그램을 작성해 보자. with JAVA

for(int i = 0; i < 10; i++) {
	System.out.println(list.get(i);
}
  • i를 출력하기 위한 로직은 명시되어 있지만, 위 로직이 출력만을 위한 로직이라고 할 수는 없다.
  • 이 과정에서 i라는 변수에 대한 값이 변경된다.

 

 

💻 선언형 프로그래밍(함수형)

✔ 어떻게 보다는 무엇을 하는지 설명하는 방식이다. 알고리즘을 명시하지 않고 목표만 명시한다. 

 

🔧 함수형 프로그래밍의 특징

  • 부수효과(변수 값 변경, 예외 발생, 자료구조 수정 등)가 없는 순수 함수를 사용하여 Thread에 안전성을 보장 받을 수 있다.
  • 병렬 처리를 동기화 없이 진행할 수 있다.

 

 

🔧  간단한 함수형 프로그램을 작성해 보자. with JAVA

list.stream().forEach(System.out::println);
  • 명령형 프로그래밍 코드와 비교해 보면, 어떻게 동작하는지에 대한 로직이나 알고리즘이 겉으로 드러나지 않는다.
  • 변수값도 사용하고 있지 않다.
  • 위 코드는 출력을 하기 위한 목표를 가진 프로그램이라는 것이 명확함을 알 수 있다.

 

 

🔧 JAVA 8버전 이상에서는 람다식, Stream API 등이 추가되며 함수형 프로그래밍이 가능해 졌다.

  • 람다함수: 익명함수 라고도 하며, 함수형 인터페이스를 사용한다. (파라미터) -> {몸체}로 표현한다.
  • Stream API: 컬렉션과 같은 저장 요소를 반복적으로 처리할 수 있는 기능이다.

 

 

REFERENCE

https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Software%20Engineering/Fuctional%20Programming.md

https://mangkyu.tistory.com/111