안녕하세요, 오늘은 JavaScript에서 많이 사용되는 내용을 알려드리고자 합니다. 콜백에 대해 이야기하겠습니다. 언제, 어떻게 사용하는지 아시나요? Java 환경에서의 사용법을 정말로 이해하고 있습니까? 스스로에게 이러한 질문을 던지면서 이 연구를 시작하게 되었습니다. 이에 대한 아이디어는 Inversion of Control(PS: Wikipedia의 설명은 IoC로 약칭되는 Inversion of Control)이며, 이는 컴퓨터 코드 간의 결합을 줄이는 데 사용할 수 있는 객체 지향 프로그래밍의 설계 원칙입니다.) 이 예는 다음과 같습니다. 잘 알려진 "할리우드 원칙 - 나에게 전화하지 마십시오. 우리가 전화하겠습니다"를 기반으로 프레임워크가 작동하는 방식을 설명합니다.
이를 이해하려면 Java의 간단한 콜백 패턴을 사용하십시오.
인터페이스 CallBack { void methodToCallBack();}class CallBackImpl은 CallBack을 구현합니다. { public void methodToCallBack() { System.out.println("콜백을 받았습니다.") }}class Caller { public void Register(CallBack callback) { 콜백 .methodToCallBack(); } public static void main(String[] args) { 발신자 호출자 = new Caller(); CallBackImpl(); caller.register(콜백) }}
언제 이것을 사용해야 하는지, 직접 호출과 콜백 메커니즘의 차이점이 무엇인지 물어보고 싶을 수도 있습니다.
대답은 다음과 같습니다. 음, 이 예제는 Java 환경에서 그러한 콜백 함수를 구성하는 방법을 보여줍니다. 물론 그런 식으로 사용하는 것은 의미가 없습니다. 이제 좀 더 자세히 살펴보겠습니다.
그 안에 있는 아이디어는 통제의 역전입니다. 타이머를 실제 사례로 사용해 보겠습니다. 매시간 콜백을 지원하는 특수 타이머가 있다는 것을 알고 있다고 가정해 보겠습니다. 정확하게 말하면 매시간 타이머가 등록한 호출 방법을 호출한다는 의미입니다.
구체적인 예:
우리는 매시간 웹사이트를 업데이트하고 싶습니다. 다음은 예제에 대한 UML 모델입니다.
콜백 인터페이스:
먼저 콜백 인터페이스를 정의해 보겠습니다.
import java.util.ArrayList;import java.util.List;// 예: 이 인터페이스가 구현되도록 OS에서 제공된다고 가정해 보겠습니다.interface TimeUpdaterCallBack { void updateTime(long time);}// 이것이 구현입니다./ / 예: 매 시간마다 웹사이트 시간을 업데이트하고 싶습니다.class WebSiteTimeUpdaterCallBack Implements TimeUpdaterCallBack { @Override public void updateTime(long time) { // 업데이트된 시간을 인쇄합니다. 웹사이트 예시의 어느 곳에서나 System.out.println(time) }}
이 예에서 시스템 타이머는 콜백 메서드를 지원합니다.
// 이것은 운영 체제(OS)에 의해 구현된 SystemTimer입니다. // 이 타이머가 어떻게 구현되었는지는 알 수 없습니다. 이 예제는 // 콜백을 어떻게 구현할 수 있는지 보여줍니다. 원한다면 자신을 선택하세요.class SystemTimer { List<TimeUpdaterCallBack> callbacks = new ArrayList<TimeUpdaterCallBack>() public void RegisterCallBackForUpdatesEveryHour(TimeUpdaterCallBack) timerCallBack) { callbacks.add(timerCallBack); } // ... 이 SystemTimer에는 우리가 모르는 추가 논리가 있을 수 있습니다. // 이 SystemTimer 구현의 어느 시점에서(모르실 수도 있습니다) / / 이 메서드가 호출되고 등록된 모든 //timerCallBack이 호출됩니다. 등록된 모든 //timerCallBack은 // 완전히 다른 updateTime() 메서드 구현을 가질 수 있으며 // 다른 클라이언트에서 다른 방식으로 사용될 수 있습니다. oneHourHasBeenExprired() { for (TimeUpdaterCallBack 타이머CallBack : 콜백) { timeCallBack.updateTime(System.currentTimeMillis()) } }}
마지막으로 간단한 더미 예제의 웹사이트 시간 업데이터는 다음과 같습니다.
// 이것은 우리의 웹사이트 예제에서 사용될 것입니다. // 웹사이트의 시간을 매시간 업데이트합니다. class WebSiteTimeUpdater { public static void main(String[] args) { SystemTimer SystemTimer = new SystemTimer(); webSiteCallBackUpdater = 새로운 WebSiteTimeUpdaterCallBack(); SystemTimer.registerCallBackForUpdatesEveryHour(webSiteCallBackUpdater) }}
원문: http://cleancodedevelopment-qualityseal.blogspot.com/2012/10/understanding-callbacks-with-java.html