2021-01-25-TIL
State Pattern
스테이트 패턴은 객체가 상태에 따라 다르게 행동해야 할 때, 객체가 직접 상태를 검사해 분기하는 대신 상태 자체를 클래스로 만든다. 각 상태 클래스는 그 상태에서 할 수 있는 행위를 메서드로 정의하고, 이 클래스들을 하나의 인터페이스로 캡슐화해 클라이언트는 인터페이스만 호출한다. 참고한 글은 노트북 전원이 켜진 상태에서 전원 버튼을 누르면 꺼지는 예로 설명한다.
비동기, promise
동기와 비동기
요청 시점에서 결과가 바로 나오는가? 바로 나오지 않는가? 동기카페에서는 커피가 나올때까지 마냥 기다려야한다. 비동기는 커피가 나올때까지 기다리지 않는다. 아무거나 할 수 있다. 그러면 커피는 어떻게 받는가? 진동벨이 울리면 받으러간다. (이벤트가 발생하면 받는다.) 커피를 받으러 가는 것은 내 마음이다. (이벤트 핸들러가 있다면 받으러 가도록 작성)
Synchronous vs Asynchronous in Java
Java에서 비동기를 다루는 방법을 찾아봤다. 콜백을 넘기는 방식, Future, 그리고 Java 8의 CompletableFuture가 있다. CompletableFuture는 값과 상태를 명시적으로 완료시킬 수 있는 Future이고, CompletionStage로서 완료 시점에 이어서 실행할 함수와 동작을 연결할 수 있다.
Synchronous, Asynchronous, Blocking, NonBlocking
두 쌍의 개념은 관심사가 다르다. homoefficio의 글은 이렇게 구분한다.
- Blocking/NonBlocking: 호출된 함수가 바로 리턴하느냐 마느냐
- Synchronous/Asynchronous: 호출된 함수의 작업 완료 여부를 누가 신경 쓰느냐
그래서 네 가지 조합이 모두 가능하다. 예를 들어 NonBlocking-Sync는 호출된 함수는 바로 리턴하지만, 호출한 쪽이 작업이 끝났는지 계속 물어보며 신경 쓰는 방식이다. Blocking-Async는 호출한 쪽이 완료를 신경 쓰지 않는데도 함수가 바로 리턴하지 않아 결국 기다리게 되므로, Blocking-Sync와 성능상 차이가 거의 없다.
블록과 논블록
제어권 관점에서 보면 blocking은 호출된 쪽이 작업이 끝날 때까지 제어권을 쥐고 있는 방식이고, non-blocking은 제어권을 바로 돌려주는 방식이다. 보통은 동기와 블로킹, 비동기와 논블로킹이 함께 쓰여서 두 개념이 섞여 보인다.
Event bus
Guava의 EventBus는 컴포넌트끼리 직접 참조하지 않고 이벤트를 게시(post)하고 구독(subscribe)하게 해 주는 라이브러리다. 다만 Guava 위키는 이제 EventBus 사용을 권하지 않는다. 오래전에 설계되었고 더 새로운 라이브러리가 컴포넌트 분리와 이벤트 처리에 더 나은 방법을 제공한다는 이유다.
스터디에서 나온 이야기
Completable Future / Future , 자바 컨커런트 패키지 <- 추천
notify, wait
토비, 케빈의 리액티브 자바, RX자바
구글 구아바 라이브러리
- 배울점이 많이 없다.
- 일정에 대한 압박때문에 양질의 결과가 나오기 힘들다.
- 개발과 유지보수가 분리되어서 의사소통이 안된다. -> 개발따로, 유지보수 따로
간단한 애플리케이션은 node가 훨씬 성능에 유리
lock은 공간에서 공유의 개념, 메모리 공유의문제, 동기 비동기는 시간의 공유개념
synchronous는 synchronize가 필요 x
asynchronous는 synchronize가 필요
blocking의 주체가 누구고, 목적어가 무엇인지가 단어의 의미를 포함
NIO는 면접에서 물어본다.
공부할거리
- NEXTSTEP 과정
- SQL첫걸음
- 도메인 드리븐 디자인
- JetBrains Academy
- 알고리즘 사이트에 ‘구현’ 카테고리
모더레이터?ㅋㅋㅋ
참고한 자료외부 출처 27
외부 출처
- [디자인패턴] 스테이트 패턴 ( State Pattern )
- Understanding Synchronous vs Asynchronous접속이 막혀 내용을 확인하지 못함
- 자바와 스프링의 비동기 기술
- Asynchronous and Synchronous Callbacks in Java
- What is asynchronous and synchronous in Java
- What is the Difference Between Synchronous and Asynchronous Calls in Java
- Blocking-NonBlocking-Synchronous-Asynchronous
- Blocking-NonBlocking-Synchronous-Asynchronous
- 동기와 비동기방식의 차이점(콜백함수와 프로미스)
- 동기, 비동기 처리
- Getting started with reactive systems
- syncasync-nonblock현재 열리지 않음
- 동기와 비동기, 그리고 블럭과 넌블럭
- 동기(synchronous)와 비동기(asynchronous) / 블로킹(blocking)과 논블로킹(non-blocking)
- 동기(Synchronous) vs 비동기(asynchronous) 그리고 IOC
- Synchronous vs. Asynchronous Programming접속이 막혀 내용을 확인하지 못함
- 동기와 비동기의 개념과 차이
- Asynchronous vs synchronous execution. What is the difference?
- 쓰레드와 프로세스, 그리고 자바 비동기 API
- [Java8] Java 비동기 - CompletableFuture
- CompletableFuture - 안정적 비동기 프로그래밍에 대해 - (1)
- 동기와 비동기 방식(Asynchronous processing model)
- l-async현재 열리지 않음
- CompletableFuture (Java Platform SE 8)
- java:guava:eventbus권남 위키: 현재 열리지 않음
- EventBusExplained
- NEXTSTEP for Enterprise현재 다른 과정 페이지로 열림
댓글
아직 댓글이 없습니다