<네티인액션> Java로 콜백 만들기
by BFine책 읽던중 콜백이 나와서 Java로 만들어 봐야겠다. Javascript는 당연히 많이 봤지만 Java에서 콜백을
쓰는거는 본적이 있었나? 싶은 생각이 들어서 정리해보았다.
가. 콜백
a. 무엇인가?
- 다른 메서드의 인수로 어떤 객체의 참조값을 전달하여 값이 아닌 이 객체의 메서드를 실행시키는 것을 의미한다.
=> Java 8부터는 람다식으로 전달이 가능하다.
나. 클래스
a. Animal (Caller)
- 콜백 구현체를 인터페이스를 통해 참조값 전달 받는다.
- 콜백 메서드를 실행시키고 그 값을 전달받는다.
public class Animal{
Type type;
Animal(Type type){
this.type = type;
}
public void getType(){
System.out.println("전달받은 type을 실행");
String name = type.printMyType();
System.out.println("Animal : 전달 "+name+"를 받음\n");
}
}
b. Dog, Cat (CallBack)
- 콜백의 구현체로 사용되는 객체다. 어떤 동물인지를 return 한다.
public class Dog implements Type {
@Override
public String printMyType() {
System.out.println("Dog : 강아지");
return "강아지";
}
}
public class Cat implements Type {
@Override
public String printMyType() {
System.out.println("Cat : 고양이");
return "고양이";
}
}
c. Type (CallBack interface)
- 콜백 참조에 활용하는 인터페이스이다. 구현체의 통로로 사용한다.
public interface Type {
String printMyType();
}
다. 실행
a. Main
- 각각의 구현체를 CallBack 인터페이스로 전달한다.
public static void main( String[] args )
{
Animal animal = new Animal(new Cat());
Animal animal2 = new Animal(new Dog());
animal.getType();
animal2.getType();
}
b. 결과
c. 의미
- 이렇게 한번 만들어 봤는데 어떤 장점이 있을까라는 생각이 많이 들었다.
- 전달받아서 공통처리를 할 수 있는 장점이 있겠지만 다른방법으로도 충분히 가능할 것 같다.
- 내생각에는 비동기가 핵심인 것 같다.
=> Javascript에서 빈번하게 콜백을 쓰는 이유는 비동기로 함수가 호출되니 원하는 함수가 마무리 될때까지
기다렸다가 그 결과 값(콜백 리턴값)을 가지고 다른 로직을 처리한다. 이래야 정상적인 결과를 얻을 수 있다.
이 테스트를 콜백없이 비동기로 처리한다면 전달 Null을 받으로 처리가 될 것 이다.
- 결국 비동기로 구성할 경우 시점을 관리하기 위해 콜백이 필요하다가 아닐까?
'공부 > Java' 카테고리의 다른 글
<Java> Future (0) | 2022.05.06 |
---|---|
<Java> Thread 와 비동기 (0) | 2022.01.20 |
ForkJoinPool의 Thread Size 고정이 안되는 경우 (3) | 2021.02.26 |
<모던자바인액션> Stream API, JMH, Parallel Stream (0) | 2021.02.21 |
Exception, 예외처리에 대해서.. (0) | 2021.01.22 |
블로그의 정보
57개월 BackEnd
BFine