ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 함수형 프로그래밍
    CS/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

    'CS > Java' 카테고리의 다른 글

    [JAVA] Garbage Collector  (2) 2021.07.17
    JAVA - 프레임워크, 라이브러리  (0) 2021.03.01
    JAVA - 디자인 패턴  (0) 2021.03.01
    JAVA - 데이터 타입, 변수  (0) 2021.02.28
    JAVA - Servlet  (0) 2021.02.28

    댓글

Designed by Tistory.