Skip to content

Commit 31362f1

Browse files
committed
[2장] 학습 정리
1 parent 40da2ca commit 31362f1

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
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+
- 변수의 재할당이나 상태를 변경하지 못하게함

0 commit comments

Comments
 (0)