Java Interface
Synchronous Invocation/Calling
함수를 호출하면 함수 안에서 이러저러한 일들을 다 처리하고 return값에 최종 결과물을 태워서 caller에게 이를 보내준다. Context Switching이 일어나기 전까지 함수를 호출하는 놈들은 한번에 다 Stack Area에 함수들을 쌓아놓고 이런식으로 호출에 호출을 하게 된다.
이것이 동기식 호출 방법이다.
Asynchronous Invocation
하지만 그렇지 않는 경우가 많이 생긴다. 특히 함수내에서 처리를 하지 못하고 기다렸다가 결과를 받아야 하는 상황이 많다. Network을 다녀와야 하거나, 처리 할 것이 많이 바로 반응을 할 수 없는 경우이거나, 하드웨어가 바로 반응을 하지 않거나.. 그런 경우는 수도 없이 많다. 그럴 땐 Request요청을 해 놓고 결과가 오기를 기다려야 한다. Message Queue를 사용하거나 Intent를 사용하거나... 형태는 다양하지만 요청을 하고 결과를 기다리는 방식..
이것이 비동기식 호출 방법이다.
자바에서는 이런 비동기식 호출 방법을 위해 여러가지 결과들을 "추후"에 받아 볼 수 있도록 하고 있는데 이때 사용하는 것이 Java Interface이다.
요청에 대한 대답이 바로바로 되지 않을 경우 그 '대답'에 해당하는 것을 구현할 수 있도록 해준다. 즉 결과 Return 값이 바로 오지 않아도 왔다고 가정하고 코딩할 수 있도록 일종의 껍대기 코드를 제공하도록 하고 있다.
Interface라는 class를 정의할 때 이벤트 호출과 유사하게 onSuccess, onError, onReady, onResult, onXXXX 등 on이라는 함수를 정의한다.
이것은 요청한 Caller가 값을 바로 받지 않고 이 Interface의 껍대기를 받아서 이를 구현(override)한다.
즉 Callee가 요청을 받아 어떤 일을 수행하고 결과 값이 도착을 하면, 미리 정의된 Interface라는 껍대기 함수들을 호출하도록 코딩을 할 수 있고,
Caller는 요청에 대한 결과가 오면 Interface의 껍대기에 내용을 채워서 실제 구동하도록 만드는 방식이다.
그래서 Callee가 포함된 class에는 caller로 부터 해당 interface가 무엇인지 받아와서(내부 private 멤버 변수로 세팅) 그 interface로 필요한 정보를 넣어주도록 구현할 수 있게 되고
Caller가 포함된 class에는 interface에서 구현되지 않는 것을 implements 하게끔 되어 있다.
Override
객체지향 프로그래밍에서 상위 클래스의 유보된 기능, 즉 하위 클래스에서 구현하도록 하는 Override 함수의 구현에도 Java Interface가 사용된다. 즉 Async와 같이 실행단계에서 유보된 기능/값을 처리하는 방법과 동일하게 코딩단계에서 유보된 기능/값을 처리하는 방법으로, 그 용도가 동일하다.
요청에 의한 결과를 어떤 식으로 전달할 것인가를 미리 가상으로 정해놓고, 각각 그에 맞춰서 프로그래밍을 하도록 하는 것. 이것이 자바에서 말하는 Interface이다.
'나의 SW개발 이야기 > SW개발 일반' 카테고리의 다른 글
Fiddler 4.0/ Mobile HTTP 모니터링/ AutoResponder를 이용한 Test Server (0) | 2019.03.28 |
---|---|
TFS 변경집합을 다른 브랜치에 적용하기 (0) | 2019.03.18 |
윈도우 10에서 안드로이드 소스코드 받기 with Bash on Ubuntu (0) | 2018.06.26 |
Class Template 클래스 템플릿 (0) | 2017.02.15 |
UML 클래스 다이어 그램의 이해 (0) | 2017.02.14 |