From 810bc084374083561ce75d21c15d6b3885f419cc Mon Sep 17 00:00:00 2001 From: Nickolodeon98 Date: Fri, 13 Oct 2023 08:59:34 +0900 Subject: [PATCH] feat: #2631, #2282 translate callback to Korean and place it under localization/ko/callback --- localization/ko/callback/README.md | 71 ++++++++++++++++++++++ localization/ko/callback/etc/callback.png | Bin 0 -> 18256 bytes 2 files changed, 71 insertions(+) create mode 100644 localization/ko/callback/README.md create mode 100644 localization/ko/callback/etc/callback.png diff --git a/localization/ko/callback/README.md b/localization/ko/callback/README.md new file mode 100644 index 000000000000..b11c6dea68e7 --- /dev/null +++ b/localization/ko/callback/README.md @@ -0,0 +1,71 @@ +--- +title: Callback +category: Idiom +language: ko +tag: +- Reactive +--- + +## 의도 + +콜백은 다른 코드에 인자로 넘어가는 실행 가능한 코드의 일부로, 인자는 적절한 시점에 다시 호출 (실행) 된다. + +## 설명 + +실제 예제 + +> 실행 항목이 완료되었다는 사실을 고지받아야 할 때, 콜백 함수를 실행 항목을 담당하는 함수에게 넘겨주고 다시 호출할 때까지 기다린다. + +명확하게는 + +> 콜백은 실행 함수에 넘겨져서 정의된 순간에 호출되는 함수이다. + +위키피디아의 정의는 + +> 컴퓨터 프로그래밍에서, "사후-호출" 함수로도 알려진 콜백은, 다른 코드에 인자로 넘겨지는 실행 가능한 코드를 말한다; +> 다른 코드는 정해진 시간에 인자를 다시 호출 (실행) 할 것으로 기대되어진다. + +**코드 예제** + +콜백은 하나의 메서드를 가지고 있는 단순한 인터페이스이다. + +```java +public interface Callback { + + void call();} +``` + +다음으로 작업의 실행이 끝나고 나서 콜백을 실행시킬 Task 클래스를 정의한다. + +```java +public abstract class Task { + + final void executeWith(Callback callback) { execute(); Optional.ofNullable(callback).ifPresent(Callback::call); } + public abstract void execute();} + +@Slf4j +public final class SimpleTask extends Task { + + @Override public void execute() { LOGGER.info("우선순위의 작업을 마친 이후 콜백 메서드를 호출한다."); + }} +``` + +마지막으로, 다음은 작업을 실행한 후 마쳤을 때 콜백을 받는 방법의 예시이다. + +```java + var task = new SimpleTask(); task.executeWith(() -> LOGGER.info("완료되었음.")); +``` + +## 클래스 다이어그램 + +![alt text](./etc/callback.png "callback") + +## 적용 + +콜백 패턴을 사용할 수 있을 때는 + +* 동기 또는 비동기적인 임의의 행위가 정의된 어떠한 행위의 실행 이후에 수행되어야 할 때이다. + +## 실질적인 예시들 + +* [CyclicBarrier](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html#CyclicBarrier%28int,%20java.lang.Runnable%29) 생성자는 장벽이 넘어질 때마다 발동되는 콜백을 인자로 받을 수 있다. \ No newline at end of file diff --git a/localization/ko/callback/etc/callback.png b/localization/ko/callback/etc/callback.png new file mode 100644 index 0000000000000000000000000000000000000000..7b499f79fcaa1484dcdd485668c14549eef79b6e GIT binary patch literal 18256 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