일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- coroutines
- HDFS
- watermarks
- Generic
- 불공변
- covariant
- kotlin
- 공변
- Coroutine
- flink watermarks
- apache flink
- ingestion time
- processing time
- Heuristic Watermark
- watermark
- Generics
- flink watermark
- MapReduce
- 가변성
- contravariant
- event time
- Stream
- Heuristic Watermarks
- Perfect Watermark
- lambda
- Perfect Watermarks
- Hadoop
- java
- flink
- Today
- Total
목록java (7)
mm Home
Generic JDK 1.5에서 타입 안정성을 위해 generic 추가 됨. //아래와 같이 raw type을 쓰게되면 ClassCastException을 발생하기 쉬웠다 List list = new ArrayList(); list.add(1); list.add("jess"); Generic을 만들었는데, JDK 1.5 미만의 버전의 호환을 선택. 그래서… Type Erasure 하위 호환을 위해 Type Parameter 정보를 지운다. JDK 1.5 미만에서 컴파일이 되어도 Generic을 사용했을때와 동일하게 하기 위함이다. List list = new ArrayList(); //위의 코드는 Type Erasure에 의해 실제 Runtime 시에 아래와 같다. List list = new Array..
Generic Kotlin의 Generic은 Java의 Jeneric과 비슷한 점이 많으므로 Java - Generics 글을 참고하면 좋을듯 하다. 위 글을 통해 아래의 내용을 이해하면 된다. Type Erasure 컴파일러가 하위 호환을 위해 Type Parameter 정보를 지운다. (런타임시에 타입 파라미터 정보를 알 수 없다) 공변 (Covariant) A -> A' 일때, C -> C *공변은 같은 기저타입에서 같은 방향으로 변한다. 반공변 (Contravariant) A -> A' 일때, C
스트림 API이란? 연속적인 데이터 항목들의 모임들을 처리하는 API 라고 생각한다. 연속적인 데이터를 생성하여, 사용자에 맞는 중간 연산과, 종료연산을 통해 원하는 결과를 추출하도록 도와준다. 가볍게 구조를 나누어보면 이렇게 나눌 수 있다. - Stream 생성 - 중간 연산 (Intermediate Operations) - 종료 연산 (Terminal Operations) 구조별로 살펴보자. 스트림 생성 스트림을 생성하는 방법은 여러가지 있다. 연속적인 데이터를 어떻게 Stream의 인터페이스로 생성하느냐의 문제이다. (parallelStream 은 나중에) Array to Stream //#1 String[] arr = { "program", "creek", "program", "creek", "j..
Lambda Translation어떻게 람다가 바이트코드로 변환되어지고, 사용되어지는지 대략적으로 살펴보자. 람다식은 functional interface를 구현한 구현체 오브젝트를 생성하는 것이 아니다. (익명 클래스와 다르다) 해당 클래스 내에 바이트코드를 생성한다. public void test5() { Consumer consumer = (Integer i) -> System.out.println(i); } 위와 같은 람다식이 있다고 가정하자. 저것은 람다식일 뿐, 실제 사용은 consumer.accept(1) 과 같이 클로져(closure)의 형태로 사용할 것이다. 이제 Translation 과정이 어떻게 이루어지는 살펴보자. 우선 (Integer i) -> System.out.println(i..
앞에서 변화하는 요구사항에 효과적으로 대응하는 코드 구현 방법을 살펴보았다. 람다 표현식을 어떻게 만드는지, 어떻게 사용하는지, 어떻게 간결하게 만들 수 있는지 살펴본다. 람다란 무엇인가? 익명함수를 단순화한 것이라고 할 수 있다. 람다는 세 부분으로 이루어져 있다. 파라미터 리스트, 화살표, 바디. 아래의 람다 표현식을 살펴보자. (Apple a1, Apple a2) -> log.debug("a1 : {}, a2 : {}", a1.getWeight(), a2.getWeight()) (Apple a1, Apple a2) : 파라미터 부분-> : 화살표 (파라미터와 람다 바디의 구분) log.debug("a1 : {}, a2 : {}", a1.getWeight(), a2.getWeight()) : 바디 람..
소비자의 요구사항은 항상 바뀐다. 기능은 쉽게 구현할 수 있어야 한다. 동작 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을 의미한다. 동작(함수)를 파라미터화 한 것. 동작 파라미터화의 과정은 이보다 훨씬 길지만.. 간략히 적어보면! 사과의 종류에 따른 분류를 하려고 한다면?? 매번 분류하는 작업마다 코드를 추가하는건 쉬운 방법이지만 코드의 중복 + 복잡. 동작 파라미터화를 사용하면,, filter를 하는 동작과 실제 분별하는 동작을 구분하여, 인자로 받게 된다. 실제 filter를 하는 시점에 분별하는 동작을 수행하게 되므로 다양한 분별 작업만 정의해서 건네주면 된다. 아래와 같은 코드로 표현할 수 있다. (ApplePredicate라는 test메소드가 있는 인터페이스. 인터페이스..
예전에 Java 8 공부했던 내용을 블로그에 옮겨본다. Java 8에 함수형언어의 기능이 들어간게 가장 큰 특징이 아닐까? 함수형이란건?함수가 중심인 언어한마디로 수학적 함수는 참조 투명성!! 프로그램 동작의 변경없이 관련 값을 대체할 수 있다면 표현식을 참조상 투명하다고 한다.관련 값은 모두 입력으로 받을 수 있기 때문에 동일한 값에 대해 동일한 결과를 반환하게 된다. 어떠한 상태도 가지고 있지 않으며(stateless), 동일한 값에 동일한 결과를 반환한다 (side-effect-free)위의 함수(표현식)를 순수 함수라고 부른다.수학적 함수란,,동일한 입력에 대해 동일한 출력 (출력은 입력에만 의존)side-effect-freestateless→ 그래서 함수형 언어에서 immutable 강조! Ja..