본문 바로가기

Language24

Golang Closure 클로저(Closure)는 함수 안에서 함수를 선언 및 정의할 수 있고, 바깥쪽 함수에 선언된 변수에도 접근할 수 있는 함수를 말한다. 내부에 있는 함수의 입장에서 보았을 때 바깥 함수가 변수와 자기 자신(함수)을 에워싸고(close over) 있다고 해서 Closure라고 한다. func main() { a, b := 5, 10 f := func(x int) int { // main 함수내에 함수 f 정의 return a\*x + b // a, b는 f 외부에서 정의된 변수 } fmt.Println(f(2)) // 20 } 언뜻 보기에는 필요 없어 보일 수 있겠지만, 같은 지역변수를 계속해서 사용하고 싶을 때 유용하다. 지역변수는 함수 실행이 끝나면 소멸된다. 하지만 클로저에서 선언한 지역변수는 함수를 .. 2019. 9. 6.
[JVM] Java 메모리 구조 JVM JVM(Java Virtual Machine, 자바 가상 머신)은 자바 바이트 코드를 실행한다. 일부 프로그램(예를 들어 C로 개발된)은 실행되기 위해 OS에 의해 메모리가 제어되며 실행되는 반면 자바 프로그램은 JVM이 OS로부터 메모리를 할당받아 실행하는 구조이다. 덕분에 OS로부터의 종속이 없어서 널리 사용되고 있다. 이론적으로 모든 자바 프로그램은 CPU와 OS의 종류와 무관하게 독립적으로 동작하는 것을 보장한다. JVM 내부 구조 Runtime Data Area: JVM이 프로그램을 수행하기 위해 OS로 부터 할당받은 메모리 공간이다. Class Loader: Runtime에 컴파일러에 의해 변환된 Byte Code(.class)를 읽어서 JVM내의 Runtime Data Area(메모리.. 2019. 9. 5.
[Intellij] Error running 'Scala Console': Module is not specified 해결 Run Scala Console을 실행하였을 때 "Error running 'Scala Console': Module is not specified" 메세지가 나오면서 동작하지 않는 경우 Run Configuration에서 module specify 설정을 추가한다. 2019. 9. 4.
Golang first-class function (일급함수) Go에서 함수는 일급함수로서 Go의 기본 타입과 같게 취급되며, 따라서 다른 함수의 파라미터로 전달하거나 다른 함수의 리턴값으로도 사용될 수 있다. func main() { // 정의된 함수를 파라미터에 전달 sum := func(i int, j int) int { return i + j } fmt.Println(calc(sum, 5, 10)) // 15 // 파라미터에 익명함수를 직접 정의 fmt.Println(calc(func(a int, b int) int { return a \- b }, 5, 10)) // -5 } func calc(f func(int, int) int, a int, b int) int { return f(a, b) } first-class citizens 일급/이급 객체의 개념.. 2019. 9. 3.