mm Home

Java 8 본문

개발/Java

Java 8

jess_m 2017. 8. 10. 14:25

예전에 Java 8 공부했던 내용을 블로그에 옮겨본다.




Java 8에 함수형언어의 기능이 들어간게 가장 큰 특징이 아닐까?


함수형이란건?

  • 함수가 중심인 언어
  • 한마디로 수학적 함수는 참조 투명성!! 
    • 프로그램 동작의 변경없이 관련 값을 대체할 수 있다면 표현식을 참조상 투명하다고 한다.

    • 관련 값은 모두 입력으로 받을 수 있기 때문에 동일한 값에 대해 동일한 결과를 반환하게 된다.
       어떠한 상태도 가지고 있지 않으며(stateless), 동일한 값에 동일한 결과를 반환한다 (side-effect-free)
    • 위의 함수(표현식)를 순수 함수라고 부른다.
  • 수학적 함수란,,
    • 동일한 입력에 대해 동일한 출력 (출력은 입력에만 의존)
    • side-effect-free
    • stateless
    → 그래서 함수형 언어에서 immutable 강조!

 

Java 8 에는?

  • Stream
    • 스트림이란, 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임.
    • 하나의 출력 스트림은 다른 곳의 입력 스트림이 될 수 있다. (Lazy 처리)
  • 동작 파라미터화 
    • 동작을 파라미터로!
  • 병렬성과 공유 가변 데이터
    • 쉽게 병렬성 구현
    • thread-safe 하게 실행되어야 함! → 가변데이터 접근하지 않아야 함 (stateless)
  • 익명함수 (Lambda)
  • default Method

 


※ 함수형언어를 보면 일급 시민, 이급 시민에 대한 이야기가 나온다.

일급 시민에 대한 조건은 아래와 같다. 아래의 조건에 만족하지 않는다면 이급 시민이다.

  • 1급 시민은 함수의 인자가 될 수 있어야 한다.
  • 1급 시민은 함수의 리턴이 될 수 있어야 한다.
  • 1급 시민은 변수에 할당 될 수 있어야 한다.

예로 든다면, Java 에는 Integer와 메소드(함수)라는 시민이 있다.
Integer는,

  • Integer는 함수의 매개변수로 사용될 수 있다. functionTest(1); ← 1이 인자로 사용됨.
  • Integer는 함수의 리턴으로 사용될 수 있다. return 1;
  • 변수에 할당이 된다.   Integer a = 1;

따라서 Integer는 Java의 시민 중에 일급 시민이다. 
반면에 JDK7 버전 이하에서, 메소드(함수)는 이급 시민이었다.

  • Method는 매개변수로 사용될 수 없다. functionTest( TestClass.functionTest2() ) → X
  • 함수의 리턴으로 되지 않는다.
  • 변수에 할당이 되지 않는다.

그리고 이제 JDK8에서 Method와 Lambda가 일급 시민이 되었다. 당연하지만, 일급 시민은 프로그래밍에 유용하게 사용될 수 있다.

'개발 > Java' 카테고리의 다른 글

Java - static  (0) 2017.09.06
Java 8 - Stream  (0) 2017.08.11
Java 8 - Lambda Translation  (0) 2017.08.10
Java 8 - 람다 표현식  (2) 2017.08.10
Java 8 - 동작 파라미터화  (0) 2017.08.10
Comments