Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- Generics
- event time
- java
- 가변성
- Heuristic Watermarks
- lambda
- Coroutine
- apache flink
- 불공변
- flink watermark
- contravariant
- 공변
- covariant
- Generic
- Perfect Watermarks
- HDFS
- kotlin
- watermarks
- Perfect Watermark
- ingestion time
- coroutines
- Heuristic Watermark
- processing time
- Hadoop
- MapReduce
- watermark
- flink
- flink watermarks
- Stream
Archives
- Today
- Total
mm Home
Java 8 본문
예전에 Java 8 공부했던 내용을 블로그에 옮겨본다.
Java 8에 함수형언어의 기능이 들어간게 가장 큰 특징이 아닐까?
함수형이란건?
- 함수가 중심인 언어
- 한마디로 수학적 함수는 참조 투명성!!
프로그램 동작의 변경없이 관련 값을 대체할 수 있다면 표현식을 참조상 투명하다고 한다.
- 관련 값은 모두 입력으로 받을 수 있기 때문에 동일한 값에 대해 동일한 결과를 반환하게 된다.
어떠한 상태도 가지고 있지 않으며(stateless), 동일한 값에 동일한 결과를 반환한다 (side-effect-free) - 위의 함수(표현식)를 순수 함수라고 부른다.
- 수학적 함수란,,
- 동일한 입력에 대해 동일한 출력 (출력은 입력에만 의존)
- side-effect-free
- stateless
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