You will be fine

<네티인액션> 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을 받으로 처리가 될 것 이다.  

  -  결국 비동기로 구성할 경우 시점을 관리하기 위해 콜백이 필요하다가 아닐까?  

           

 

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기