1. 소개
많은 프로그래밍 언어에는 기능 콜백의 개념이 있습니다. C 및 C ++에는 기능 포인터가 있으므로 나중에 호출 할 수있는 다른 함수의 매개 변수로 함수를 전달할 수 있습니다. JavaScript에서는 기능 콜백이 극도로 가져옵니다. 다양한 이벤트, 특히 비동기 이벤트의 처리는 기본적으로 기능 콜백에 의해 완료됩니다.
Java에서는 기능 콜백도 구현할 수 있습니다. 함수 포인터가 없지만 Java는 반사 메커니즘을 통해 클래스 메소드를 얻을 수 있고, java.lang.reflect.method 유형의 매개 변수로 다른 함수로 전달한 다음 메소드 객체의 호출 메소드를 통해 함수를 호출 할 수 있습니다.
그럼에도 불구하고, 이러한 방식으로 호출 단계는 비교적 번거롭고, 실행이 비효율적이며, 디버그하기 어렵다. Java에는 기능 콜백, 즉 인터페이스보다 우아한 메커니즘이 있습니다.
2. 기능 콜백이 필요한 이유는 무엇입니까?
기능 콜백은 실제로 특정 기능의 구현을 지연시키는 방법입니다.
프로그램이 수행해야 할 작업을 미리 알면 기능 콜백이 전혀 필요하지 않으며 프로그래밍 중에 직접 구현할 수 있습니다.
그러나 코드를 작성할 때, 특히 도구 수업, 기능 라이브러리 또는 프레임 워크를 작성할 때 비교적 일반 및 추상 기능이 구현되는 반면, 특정 시나리오의 기능은 이러한 클래스를 사용하는 개발자가 구현합니다.
기능 콜백은 특정 구현을 미리 알지 못하는이 상황을 해결할 수 있습니다.
분류 기능의 예
예를 들어, 일반적인 분류 함수를 구현하려면 다른 개발자가 어떤 유형의 요소를 정렬하는 데 사용할 것인지 미리 알 수 없으며, 이러한 요소의 부분 순서 (크기) 관계를 판단하기위한 표준을 모릅니다.
따라서 다른 개발자는 정렬 기능을 사용할 때 비교 함수를 제공해야 할 수 있으므로 요소의 유형이 무엇인지 미리 알지 못하고 비교할 요소의 크기를 비교하여 비교하여 비교할 수 있습니다.
여기서 비교 함수는 정렬 함수의 콜백 함수입니다.
의사 코드는 다음과 같이 표시됩니다.
// 일반 정렬 함수 void sort (Object [] array, method compare) {// 배열에서 요소의 크기 관계를 비교하기 위해 기능 비교를 사용하여 배열} // 특정 비교 함수는 발신자 int 비교 (개체 a, 개체 b)에 의해 구현됩니다. {// 요소 A와 b 비교}비동기 처리 기능의 예
예를 들어, 비동기 처리 기능을 작성할 때 특정 시나리오에서 기능을 사용할 때만 이러한 작업을 알 수 있기 때문에 처리가 완료 될 때 다른 개발자가해야 할 일을 미리 알 수 없습니다.
따라서이 기능을 사용할 때 개발자는 콜백 기능 콜백을 제공해야 할 수 있습니다. 이런 식으로 비동기 처리 기능을 작성할 때 콜백 기능을 호출하여 최종 작업이 무엇인지 알지 못하고 최종 작업을 수행 할 수 있습니다.
의사 코드는 다음과 같이 표시됩니다.
// 비동기 처리 함수 void AsynProcess (메서드 콜백) {// 비동기 작업 콜백 ();} // 특정 콜백 함수 void 콜백 ()은 발신자가 구현됩니다 {// 비동기 처리가 완료된 후에 수행 할 작업}.3. 함수 콜백 대신 인터페이스를 사용하십시오
위에서 언급 한 기능 콜백이 사용되는 이유는 특정 기능의 특정 구현을 미리 알지 못하므로 특정 구현이 다른 개발자에게 완료되도록 맡겨집니다.
이 문장이 Java 인터페이스를 묘사하는 것처럼 보입니까? 인터페이스는 일련의 메소드의 추상 정의이며, 특정 구현은 인터페이스를 구현하는 클래스에 의해 완료됩니다.
따라서 객체 지향 및 인터페이스 지향의 두 가지 특성을 사용하여 기능 콜백을 대체 할 수 있습니다.
인터페이스가 함수 콜백을 어떻게 대체하는지 설명하기 위해 위의 두 가지 예를 제공합니다.
정렬 함수
인터페이스를 사용하여 정렬 함수를 구현할 수 있으므로 더 이상 개발자가 정렬 함수를 사용할 때 콜백 기능 비교를 제공 할 필요가 없지만 개발자는 정렬 할 요소가 비슷한 인터페이스를 구현하도록해야합니다. "정렬 될 요소가 이미 비슷한 인터페이스를 구현했다"는 전제를 바탕으로 정렬 할 요소의 유형을 모르면 분류 기능을 구현할 수 있습니다.
// 일반 정렬 함수 void sort (Object [] array) {// 비슷한 인터페이스 비교 방법 // 요소의 크기를 비교하여 배열을 정렬합니다. } // 기능 정렬 기능 공개 인터페이스에 의해 정의 된 인터페이스 {public int compareto (Object Other);} // 비교 가능한 인터페이스 공개 클래스 요소 구현 {@override public int compareto (Object Other) {// 요소와 기타 사이의 현재 크기 관계를 판단하고}}}비동기 처리 기능
인터페이스를 사용하여 비동기 처리 기능을 구현할 때 개발자는 콜백 함수 콜백이 필요하지 않지만 지정된 인터페이스를 구현하는 객체가 필요합니다. 함수를 제공하는 것과 비교하여 객체에는 더 많은 정보가 포함되어 있으며 사용하기에 더 유연합니다. 그러나 본질적 으로이 비동기 처리 기능은 여전히 인터페이스를 사용하여 마무리 작업을 완료합니다.
// 비동기 처리 함수 void Asynprocess (Acceplistener al) {// 비동기 작업을 실행합니다. // 비동기 처리 함수가 완료 될 때 필요한 추가 작업}} // 비동기 처리 함수 호출 public static void main (string [] args) {비동기 (new Extratask ());}4. 요약
콜백 메소드는 다음과 같이 요약 할 수 있습니다. 일반 기능 기능 구현. 특정 시나리오 에서이 일반 기능을 호출 할 때 발신자는 적절한 콜백 함수 콜백을 제공해야합니다. 일반 함수 func는이 콜백 기능을 사용하여 특정 시나리오에서 작업을 완료합니다.
인터페이스를 구현하는 방법은 다음과 같습니다. 일반 기능 기능을 구현하십시오. 특정 시나리오 에서이 일반 기능을 호출 할 때 작동중인 객체는 적절한 인터페이스 자체를 구현해야합니다. 일반 기능은이 인터페이스를 사용하여 특정 시나리오에서 작업을 완료합니다.
기능 콜백 또는 인터페이스를 사용하면 특정 구현을 미리 알지 못하는 상황을 해결할 수 있습니다. 함수 콜백 메소드는 함수를 전달하고 인터페이스 메소드는 인터페이스를 구현하는 객체를 전달합니다.
Java에서는 오류가 발생하기 쉬우 며 비효율적 인 반사 메커니즘을 사용하여 기능 콜백을 완료해야합니다. 인터페이스를 사용하면 코드의 논리를보다 명확하고 효율적이며 디버그하기 쉽습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.