'인터페이스'에 해당되는 글 16건

web/마이크로서비스

리액티브 스트림의 이해

리액티브 스트림은 총 4개의 인터페이스로 구성되어 있다. 

ㅁ 발행자(Publisher) 

- 데이터의 소스를 가지고 있으며 Subscriber의 요청이 오면 데이터를 발행한다. 구독자는 발행자에 대한 구독을 추가할 수 있다. Subscribe 메소드를 통해서 구독자를 추가할수 있다.

1
2
3
public interface Publisher<T> {
    public void subscribe(Subscriber<? Super T> s);
}
cs


ㅁ 구독자 (Subscriber) 

-  구독자는 데이터 스트림을 소비하기 위해 발행자를 구독한다. 구독자는 다양한 메서드를 제공하는데 대부분의 메서드가 콜백으로 등록되어 사용된다.

1
2
3
4
5
6
public interface Subscriber<T> {
  public void onSubscribe(Subscription s);
  public void onNext(T t);
  public void onError(Throwable t);
  public void onComplete();
}
cs


ㅁ 구독 (subscription) 

단 하나의 발행자와 단 하나의 구독자를 연결해주며 그 둘 사이에서만 데이터 교환을 중재한다. 데이터 교환은 구독자의 request 메서드 호출로 실행되고 cancel로 종료된다.

1
2
3
4
public interface Subscription {
  public void request(long n);
  public void cancel();  
cs


ㅁ 프로세서 (procesor) 

프로세서는 처리 단계를 나타내며, 발행자 인터페이스와 구독자 인터페이스를 모두 상속한다. 프로세서는 발행자와 구독자 사이의 계약을 반드시 준수해야한다. 프로세서는 발행자와 구독자를 연결해서 chaining(메서드가 반환하는 객체를 다른 변수에 할당하지 않고 객체가 가지고 있는 메소드를 호출하는 것)을 할 수도 있다.

1
2
public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {
}
cs



리액터에는 발행자 플로세서로 사용되는 flux와 mono가 있다. flux는 0 또는 N개의 이벤트를 발행할 수 있고, Mono는 0 또는 1 개의 이벤트만 발행할 수 있다. 그래서 다수의 데이터 요소 또는 값의 리스트를 스트림으로 전송할 때만 사용된다.

JAVA/Effective Java

규칙 62 - 메서드에서 던져지는 모든 예외에 대해 문서를 남겨라.

메서드를 올바르게 사용하려면 메서드에서 던져지는 예외에 대한 설명이 문서에 있어야 한다.


그리고 


메서드가 던질수있는 모든 무점검 예외까지 선언할 필요는 없지만 점검지점 예외들과 마찬가지로주의해서 문서로 남겨놓으면 좋다.


특히 Javadoc @throws 태그를 사용해서 메서드에서 발생 가능한 모든 무점검 예외에 대한 문서를 남겨야 한다. 하지만 메서드 선언부의 throws 뒤에 무점검 예외를 나열하지는 말아야 한다.





요약하자면 메서드가 던질 가능성이 있는 모든 예외를 문서로 남겨라. 

점검지점 예외, 무점검 예외도 남겨라.



이를 지키지 않으면 해당 API를 사용하는 다른사람들이 효과적으로 사용하는게 어려워진다.




출처 : 조슈아 블로크, 『 Effective Java 2/E』, 이병준 옮김, 인사이트(2014.9.1), 규칙62 인용

JAVA/Java 8

Java8 함수형 인터페이스 만들어서 사용하기

Java8 함수형 인터페이스 만들어서 사용하기

함수형 인터페이스 사용 
-> 정의한 함수형 인터페이스를 람다식을 이용하여 사용할 수 있다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//     함수형 인터페이스 선언 
//  함수형 인터페이스를 만들고자 할 경우에는 @FunctionalInterface 애노테이션을 붙혀야 한다.
 
@FunctionalInterface
public interface WedulInterface {
    public void print(int x);
}
 
public static void main(String args[]) {
    WedulInterface wedul = new WedulInterface() {
        @Override
        public void print(int x) {
            System.out.println(x);
        }
    };
        
    List<Integer> a = Arrays.asList(1,23);
    a.stream().forEach(wedul::print);
}
cs





JAVA/Java 8

자바 8에서 java.util.function 패키지에 추가된 기본 함수형 인터페이스 정리

자바 8에서 java.util.function 패키지에 추가된 기본 함수형 인터페이스 정리

Function <T, R> 
=> T 입력으로 R 출력하여 반환



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Java8Test {
 
    public static void main(String args[]) {
        
        Function<String, Integer> mapStrToInt = new Function<String, Integer>() {
            public Integer apply(String str) {
                if (str == "wedul") {
                    return 1;
                }
                return 2;
            }
        };
        
        List<String> testData = Arrays.asList("wedul","dd","babo");
        testData.stream().map(mapStrToInt).forEach(System.out::println);
    }
}
cs




Predicate<T> 
-> T 입력으로 boolean 출력으로 반환


1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String args[]) {
        
    Predicate<Integer> predictData = new Predicate<Integer> () {
        @Override
        public boolean test(Integer tes) {
            return tes > 10
        }
    };
        
    List<Integer> test = Arrays.asList(12,3,4,55);
        
    test.stream().filter(predictData).forEach(System.out::println);
}
cs



Consumer <T>  
-> T 입력으로 아무것도 반환하지 않는다
-> 단순하게 입력받은 데이터를 처리할때 사용된다.



1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String args[]) {
        
    Consumer<Integer> consumerData  = new Consumer<Integer>() {
        @Override
        public void accept(Integer idnt) {
            System.out.println(idnt);
        }
    };
        
    List<Integer> test = Arrays.asList(12,3,4,55);
        
    test.stream().forEach(consumerData);
}
cs




Supplier<T> : 입력을 취하지 않고 T 반환
입력한 데이터를 가지고 있으며get 메소드를 사용하여 호출한 곳에서 입력된 데이터를 사용할  있게 반환  주는 기능 제공



1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String args[]) {
        
    Supplier<Integer> supplier = new Supplier<Integer>() {
        @Override 
        public Integer get() {
            return 1;
        }
    };
        
//        List<Integer> test = Arrays.asList(12,3,4,55);
    System.out.println(supplier.get());
}
cs


JAVA/Java 8

Java8 인터페이스의 정적 메소드

인터페이스의 정적 메소드
 
 Java 8 부터는 인터페이스에 정적 메소드를 추가할  있다.
원래부터 인터페이스에 정적 메소드를 추가하면 안되는 이유는 없었으나단지 추상 명세로서 변하면 안된다는 인터페이스의 정신에 어긋 나는 것으로 여겨져 금지되어 왔다.




지금 까지는 일반적으로 인터페이스와 동반하는 클래스들에 정적 메소드를 두었다.

하지만 이제는 사용이 가능하다.





'JAVA > Java 8' 카테고리의 다른 글

Java8 스트림(stream) 연산  (0) 2018.05.31
Java8 스트림(Stream) API  (0) 2018.05.31
Java8 인터페이스의 정적 메소드  (0) 2018.05.30
Java8 인터페이스 default Method (디폴트 메소드)  (0) 2018.05.30
Java8 변수 유효 범위  (0) 2018.05.30
Java8 생성자 레퍼런스  (0) 2018.05.30
 [ 1 ]  [ 2 ]  [ 3 ]  [ 4 ] 

푸터바

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

카운터

  • Today : 36
  • Yesterday : 651
  • Total : 55,511