클로저는 함수와 그 함수가 선언된 환경을 함께 기억하는 개념입니다.
즉, 클로저를 사용하면 어떤 함수가 다른 함수 내에 중첩됐을 때 내부 함수가 외부 함수의 지역 변수에 접근할 수 있게 됩니다. 외부 함수에서는 내부 함수의 변수에 직접 접근할 수 없고 오직 클로저를 통해서만 변수에 접근이 가능하도록 변수의 스코프를 클로저에게 '닫혀있는' 상태로 제한합니다. 이는 객체 지향 프로그래밍의 캡슐화와 유사한 개념으로, 외부의 변수를 직접 조작하지 못하게 변수 접근을 막아주면 변수 충돌이나 오류를 방지하여 코드의 안전성을 높이고, 코드의 가시성이 좋아집니다.
따라서 클로저의 역할은 함수의 스코프를 제한해서 코드를 깔끔하게 만들고, 모듈성을 높여서 각각의 기능을 독립적으로 사용할 수 있도록 하는 데에 초점이 있습니다. 변수의 스코프를 제한하는 것도 간접적으로는 가능하지만, 주된 목적은 함수 스코프의 제한에 있습니다.
저는 클로저를 직접 사용한 경험은 없습니다. 객체 지향 프로그래밍에서는 클래스 내부에 데이터와 메서드를 함께 묶어서 캡슐화하여 객체의 상태를 외부에서 직접 접근하지 못하도록 데이터를 숨기고, 오직 객체의 메서드를 통해서만 데이터에 접근할 수 있도록 구현했습니다. 또한, 코드를 작은 독립적인 모듈 또는 컴포넌트로 나누어 개발하여 모듈성을 유지했고, 함수형 프로그래밍의 아이디어를 적용하기 위해 일급 함수와 고계 함수를 사용하여 코드를 작성한 경험이 있습니다.