분류 전체보기89 4.3. Reactive Streams 1. Single Thread 아래의 코드는 하나의 쓰레드(main)에서 publisher 과 subscriber 가 모두 수행된다. 옵저버 패턴을 쓸 때의 장점은 이벤트 발생은 백그라운드에서 실행하는 부분은 이벤트 발생시 (non-blocking) 수행 하지만 아래의 코드에서는 해당 장점을 찾을 수 없다. @Slf4j public class SchedulerEx { public static void main(String[] args) { Publisher pub = sub -> { sub.onSubscribe(new Subscription() { @Override public void request(long n) { sub.onNext(1); sub.onNext(2); sub.onNext(3); sub.. 2021. 3. 3. 4.2. Reactive Streams 1. Operator Reactive Streams 의 현재까지의 구조는 아래와 같다. Publisher 가 데이터를 만들어 Subscriber 에게 전달 Publisher -> Data -> Subscriber Operator들을 사용해서 데이터를 가공하는 플로우를 만든뒤에 Publisher.subscribe(Subscriber) 하여 플로우를 정의한다. Publisher -> [Data1] -> Operator1 -> [Data2] -> Operator2 -> [Data3] -> Subscriber Delegate 하는 클래스를 기반으로 재호출하는 방식으로 Operator 을 만들 수 있다. private static Publisher reducePub(Publisher publisher, R ini.. 2021. 2. 28. 4.1. Reactive Streams 1. Iterable Iterable 구조 Iterable을 구현하면 for-each loop에 타겟이 될 수 있다. public static void main(String[] args) { Iterable iter = Arrays.asList(1, 2, 3, 4, 5); // for-each loop for(Integer i : iter) { System.out.println(i); } } Iterable Interface 2개의 default 메소드, 1개의 메소드를 갖고있다. Iterator : Iterable Interface의 원소 순회를 하나씩 하기위해서 사용하는 도구 public interface Iterable { Iterator iterator(); default void forEach(.. 2021. 2. 28. 3.2. Generics 1. WildCard vs Generics 언제 제너릭을 사용하고 언제 wildcard를 사용할까? 아래의 예시에서는 wildcard의 한계를 보여준다. static void method1(List list) { } static void method2(List list) { /** * list.add(1); list.add("string"); -> 불가 */ list.add(null); list.size(); list.clear(); Iterator it = list.iterator(); list.equals(); } wildcard는 list 그 자체의 기능을 사용할 뿐, 원소를 추가할 수는 없는 모습이다. 예시) isEmpty() 함수를 만들어보자. public static void main(Stri.. 2021. 2. 25. 이전 1 ··· 7 8 9 10 11 12 13 ··· 23 다음