폐쇄에 대해 왜 그렇게 많은 소문이 있습니까? [닫은]


9

개발자들 사이의 폐쇄에 대해 왜 그렇게 화제가됩니까? 내 경력에서 나는 그들이 무엇인지 명확하게 이해하지 못했지만 의도적으로 사용하지 않았습니다.

UPD : 명확히하기 위해. 질문은 왜 폐쇄 개념이 요즘 화제가되었는지에 관한 것입니다.


3
자신이 무엇인지 모르는 것을 의도적으로 사용할 수있는 방법은 무엇입니까? 따라서 기본적으로 클로저가 무엇인지 묻거나 검색해야합니다.
Steven Jeuris

1
위키 백과 기사를 읽었습니까? 그것에 대해 무엇을 이해하지 못했습니까?
케빈 클라인

2
당신의 경력은 무엇입니까?

4
이것은 어떤 종류의 질문입니까? 무슨 "버즈"? 당신은 무엇을 이해하지 못합니까? 왜 대신 질문을 하지 않았 습니까?
Aaronaught

4
OP를 방어하기 위해 폐쇄는 오래된 개념이지만 최근에야 도시와 대화를 나누었습니다. 그리고이 개념은 실제로 조금 더 많은 수학을 배운 사람에게는 매우 단순합니다. 또한 사람들이 왜 이해하기 어려운 것처럼 말하는지 이해할 수 없습니다. 어쩌면 그것은 스스로를 더 똑똑하게 보이게하는 방법일지도 모른다.
quant_dev

답변:


22

클로저는 가져온 세계를 계속 사용할 수있는 상태를 기억하는 코드입니다.

예를 들어, Java에서 익명 함수를 정의하여 해당 함수가 YourObject 내부에 있으며 해당 메소드와 함수를 조작 할 수 있음을 알고 있습니다. 그런 다음이 함수는 예를 들어 리스너에 전달됩니다. 예를 들어 리스너 내부로 깊숙이 들어가지만 여전히 루트에 생명선이 있습니다.

이것은 코드를 사용하여 코드에 알려지지 않은 코드를 다른 코드 부분으로 다시 전달할 수있게 해주는 매우 강력한 개념입니다.


1
예. 프로 시저뿐만 아니라 상태를 다른 코드에 삽입하는 방법입니다. 이것은 알고리즘 설계에있어 매우 높은 유연성을 허용합니다. 스테이트 풀 서브 루틴에 의존하는 템플릿 메소드를 디자인 할 수 있으며 컴파일 타임에는 알지 못할 수도 있습니다. 단점은 그 방법의 원래 소스에 대한 링크, 즉 상태는 소비하는 방법에 대해 알지 못하면 깨질 수 있다는 것입니다. 그럴 때 찾기 어려운 런타임 오류가 발생합니다.
KeithS

1
하하, 자바 익명 함수 ... 웃긴.
구성자

1
@configurator는 재미 있지 않습니다.

stackoverflow.com/questions/2755445/… Java 7이 아직 출시되지 않았습니다.
BlueRaja-대니 Pflughoeft

java 7에는 클로저가 없습니다.

6

클로저는 다양한 문제를 우아한 방식으로 해결하기위한 것입니다. 실제로 클로저가없는 프로그래밍 언어에서는 유사한 기능을 구현하는 기술이 만들어집니다.

C ++의 펑 터나 Java의 Runnables를 생각해보십시오. 그것들은 클로저와 유사한 기능을 허용하는 기술 일뿐입니다. 어떤 종류의«수동 폐쇄».

클로저는 인기있는 언어로 통합되어 인기가 높아지고 있습니다. 예를 들어 Google 문서와 같은 온라인 애플리케이션, C # 구현, PHP 5.3 이후 구현 등으로 인해 자바 스크립트가 증가하고 있습니다.

이제 더 많은 기술에서 클로저를 사용할 수있게되면서 점점 더 많은 사람들이 관심을 갖는 것이 매우 간단 해졌습니다.

이제 폐쇄는 무엇입니까? 이것은 매우 간단합니다. 클로저는 함수와이를 실행하기위한 컨텍스트입니다. 이것은 객체로 조작됩니다. 왜 이것이 유용한가요? 이것은 고유 코드를 기존 코드에 연결하는 데 유용합니다.

스레드 풀을 사용한 멀티 스레딩과 같이 다른 코드 조각으로 작업을 관리하거나 선택한 이벤트 (UI의 경우 자바 스크립트에서 자주 사용됨)에서 작업을 실행해야하는 경우 두 가지 일반적인 상황이 있습니다.


내가 분명히 이해 했습니까? "수동 폐쇄"(실제 폐쇄가 아니라 동작과 유사한 것)가 있고 "TRUE 폐쇄"가 있습니까?

폐쇄는 언어 능력입니다. 일부 언어에는 해당 기능이 없으므로 언어가 제공하는 도구를 사용하여 수동으로 폐쇄해야합니다. 그들이 참인지 아닌지는 매우 흥미로운 토론 IMHO가 아닙니다.
deadalnix

2
@gasan, 당신은 항상 어셈블리를 꺼내고 많은 GOTO 문으로 원하는 패턴을 수동으로 수행 할 수 있습니다. 마찬가지로 "while"루프 (C ++에서)를 사용하여 "for"루프를 수동으로 수행 할 수 있습니다. 고급 수준 일수록 일반적인 일을하는 표준화 된 방법을 제공합니다.
Philip

6

나는 다른 날에 재미있는 인용문을 보았습니다. "클래스는 함수가있는 데이터입니다. 클로저는 데이터가있는 함수입니다."

예, 지나치게 단순화 된 것이지만 요점을 파악하는 데 도움이됩니다.


+1 폐쇄가 무엇인지 보는 좋은 방법 : D
deadalnix
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.