ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 클로저(Closure)란?
    Back-End/Language 2024. 4. 5. 11:33
    반응형

     Go 언어에서의 클로저(Closure)는 JavaScript의 클로저와 유사한 개념을 가지고 있습니다. 둘 다 외부 함수로부터 생성된 내부 함수가 그 외부 함수의 스코프에 있는 변수에 접근할 수 있게 해주는 프로그래밍 기능입니다. 하지만 언어의 특성과 구현 방식에서는 차이가 있을 수 있습니다.

    공통점

    • 변수의 스코프 유지: 클로저는 내부 함수가 외부 함수의 실행 컨텍스트가 종료된 후에도 외부 함수의 변수에 접근할 수 있게 해줍니다. 이를 통해 특정 함수 호출이 종료된 이후에도 변수의 상태를 유지할 수 있습니다.
    • 데이터 은닉과 캡슐화: 클로저는 데이터를 함수 내부에 은닉하고, 특정 함수를 통해서만 데이터에 접근할 수 있게 함으로써 캡슐화를 제공합니다.

    차이점

    • 언어적 특성: JavaScript는 프로토타입 기반의 객체 지향 언어로, 클로저는 일급 객체(first-class functions)로서의 함수와 함께 중요한 역할을 합니다. 반면, Go는 병렬 처리와 시스템 프로그래밍에 강점을 가진 정적 타입의 컴파일 언어로, 클로저는 주로 함수 리터럴과 익명 함수에서 찾아볼 수 있습니다.
    • 구현 방식: Go에서 클로저는 함수 리터럴이 외부 변수에 접근할 때 생성됩니다. 이 변수들은 클로저가 생성될 때의 상태를 캡처하고, 클로저 내에서 사용할 수 있습니다. JavaScript에서는 함수가 정의될 때의 렉시컬 환경(Lexical Environment)을 참조하여 클로저를 구현합니다.
    • 사용 사례: JavaScript의 클로저는 모듈 패턴, 콜백, 비동기 프로그래밍 등에서 널리 사용됩니다. Go에서 클로저는 주로 고루틴(goroutines)과 채널(channels)을 사용한 비동기 프로그래밍, 콜백 패턴 구현 등에 사용됩니다.

    예시

    JavaScript에서의 클로저 예시:

    function makeCounter() {
        let count = 0;
        return function() {
            return count++; // 외부 함수의 변수 `count`에 접근
        };
    }
    
    const counter = makeCounter();
    console.log(counter()); // 0
    console.log(counter()); // 1

     

    Go에서의 클로저 예시:

    package main
    
    import "fmt"
    
    func makeCounter() func() int {
        count := 0
        return func() int {
            count++
            return count // 외부 변수 `count`에 접근
        }
    }
    
    func main() {
        counter := makeCounter()
        fmt.Println(counter()) // 1
        fmt.Println(counter()) // 2
    }

     

     두 언어 모두 클로저를 통해 함수 외부의 변수를 참조하고, 해당 변수의 상태를 함수 호출 사이에 유지할 수 있습니다. 하지만, 각 언어의 특성에 따라 클로저의 사용 방식과 목적에 차이가 있을 수 있습니다.

    반응형

    'Back-End > Language' 카테고리의 다른 글

    정규표현식(Regex)이란?  (0) 2024.04.16
Designed by Tistory.