File tree Expand file tree Collapse file tree 1 file changed +91
-0
lines changed
src/main/kotlin/kms/chapter02 Expand file tree Collapse file tree 1 file changed +91
-0
lines changed Original file line number Diff line number Diff line change 1+ ### 람다식
2+
3+ - 함수형 인터페이스를 구현하기위해 도입한 표현식
4+ - 구현해야하는 메서드가 ** 1개**
5+ - kotlin 에서는 SAM (Single Abstract Method) 를 이용
6+ - JAVA 8 부터 도입
7+ - JAVA 8 이전 버전에서는 Retrolambda 라는 ** 백포트** 를 이용해 사용 가능
8+
9+ > [ !note] 백포트
10+ > 상위 버전의 기능을 하위 버전에 반영해주는 것
11+
12+ ### Rx에서 제공하는 인터페이스
13+
14+ #### Function/Predicate
15+
16+ - 인자 O
17+ - 반환 O
18+ | 인터페이스| 반환값| 메서드|
19+ | ---| ---| ---|
20+ | Function\< T, R\> | R | apply(t: T) |
21+ | Predicate\< T\> | boolean | test(t: T) |
22+
23+ #### BooleanSupplier
24+
25+ - 인자 X
26+ - 반환 O
27+ | 인터페이스| 반환값| 메서드|
28+ | ---| ---| ---|
29+ | BooleanSupplier | boolean | getAsBoolean() |
30+
31+ #### Action/Consumer
32+
33+ - 어떤 부가 작용이 발생하는 메서드
34+ - 반환 X
35+ | 인터페이스| 반환값| 메서드|
36+ | ---| ---| ---|
37+ | Action | 없음 | run() |
38+ | Consumer\< T\> | 없음 | accept(t: T) |\\
39+
40+ #### Cancellable
41+
42+ - 취소처리를 구현하는데 사용
43+ - 반환 X
44+ - 인자 X
45+ | 인터페이스| 반환값| 메서드|
46+ | ---| ---| ---|
47+ | Cancellable | 없음 | cancel() |
48+
49+ ### 람다식과 익명 클래스의 차이
50+
51+ - ** this** 의 대상이 다름
52+ - 람다식
53+ - ** 람다식을 구현한 클래스** 의 인스턴스
54+ - 익명 클래스
55+ - ** 구현한 익명 클래스** 의 인스턴스
56+
57+ ### 비동기 처리
58+
59+ > 작업의 처리가 끝나지 않고 다음 작업을 실행
60+
61+ - 싱글 스레드에서는 작업이 순차적으로 진행
62+ - DB, 네트워크 작업시에는 CPU를 사용하지 않는 순간 이 있기 때문에 기다리기 보다 다른 작업을 하는게 효율적
63+ - 스레드 생성 작업자체가 부하가 걸리는 작업이라 작은 작업은 순차처리하는게 이득
64+
65+ ### 비동기 처리시 주의할 점
66+
67+ #### 메모리와 캐시
68+
69+ - 클래스 필드 값과 실제 메모리가 가리키는 값이 동일하지 않을 수 있다
70+ - 필드가 다루는 값은 메모리에서 캐시된 값
71+ - 나중에 적절한 시점에 실제 메모리에 값을 변경
72+ - 캐시 값은 ** 쓰레드 별** 로 존재
73+
74+ #### 원자성
75+
76+ - ** volatile**
77+ - 실제 메모리의 최신 값을 받을 수 있다
78+ - 업데이트시 원자성을 보장하지 않는다
79+ - ** Atomic**
80+ - 원자성을 보장하는 클래스
81+ - 자신의 변경 처리에서만 원자성을 보장
82+ - ** synchronized**
83+ - 자신의 스레드가 해당 블록을 처리하는 도중에 다른 스레드에서 접근하는 것을 막는다
84+ - Lock 객체를 이용하고 해당 객체를 가지고 있으면 해당 블록에서 작업을 실행할 수 있다.
85+
86+ ### 비동기 처리 대응 방안
87+
88+ #### final 제한자와 불변 객체
89+
90+ - 비동기처리할때 가변 필드나 객체를 다루면 스레드에 의해 다른 캐시 값을 가질 위험이 있다
91+ - 변수의 재할당이나 상태를 변경하지 못하게함
You can’t perform that action at this time.
0 commit comments