반응형

Language 24

[Javascript] Arrow Function에서의 this / arguments 바인딩 형태

Arrow Function에서의 this 바인딩 일반적으로 Javascript에서의 this는 가장 가까이 있는 객체를 바인딩하게 됩니다. 하지만 화살표 함수에서는 조금 다르게 작동하는데 화살표 함수에서는 일반 함수와 다르게 this와 arguments가 바인딩되지 않습니다. 이와 같이 화살표 함수에서는 this 바인딩이 되지 않는 이유는 일반 함수에서는 this 바인딩으로 인한 버그가 발생할 수 있기 때문입니다. 일반적으로 일반 함수에서는 this를 사용하면 호출 시점에 사용된 객체로 바인딩되게 됩니다. 따라서 객체에 바인딩된 일반 함수를 다른 변수에 할당해서 호출하게 되면 버그가 발생하게 됩니다. 아래의 예시를 살펴보겠습니다. const obj = { count: 1, increase: functio..

[Java] syncronized: multi-thread 환경에서 동기화 문제를 해결하는 키워드

자바에서 멀티 스레드를 잘 사용하면 좋은 성능을 내는 프로그램을 개발할 수 있지만, 스레드 간 동기화 문제를 필수적으로 해결해야 합니다. 예를 들어 스레드 간 공유 자원으로 사용하고 있는 데이터가 있을 경우, 여러 개의 스레드가 하나의 데이터에 접근할 경우 신뢰성을 보장할 수 없게 됩니다. 이러한 스레드 동기화 문제는 자바 heap영역에서 발생하게 됩니다. 왜냐하면 자바 스레드는 스레드 안에 스택 영역을 포함하고 있기 때문에 스택 영역의 경우에는 Thread-Safe 하게 되지만 heap영역 같은 경우에는 공유하는 메모리 영역이기 때문에 Thread 간에 safe하지 못하게 됩니다. [OS] Synchronization 동기화란? 1. 동기화란? 동기화란 컴퓨터 공학의 영역 뿐만 아니라 클라우드 저장소와..

Language/Java 2020.06.22

[Typescript] Typescript는 private을 js로 어떻게 구현할까? feat. 클로저

저는 요즘 Typescript의 매력에 빠져있습니다. 3월 11일에 페이스북에 타입스크립트 왜 쓰는지 모르겠다고 독설을 늘여놓았다가 1달 만에 우디르급 태세 전환을 했거든요ㅋㅋㅋ 밑에 이미지에서도 TMI로 구구절절 언급하고 있지만, JS의 가벼움을 그대로 가지면서도 트랜스파일링 시점에 에러를 잡아내 주는 이 녀석은 정말 물건입니다. bbb 그런데 문득 친구가 오늘 JS로 클로저 공부를 했다는 이야기를 듣고 뜻밖의 궁금증이 떠올랐습니다. TS는 private을 어떻게 구현할까? 처음 JS 책에서 클로저에 대해 공부할 때가 생각납니다. 대체 이놈은 왜 있는거지? 라는 생각이 들었고, 시간이 지남에 따라 private을 따로 지원하지 않는 javascript에서 정보은닉을 구현하기 위해 사용하지 않을까?라는 ..

[Javascript] Tutorial(5): 싱글 스레드 기반 이벤트 루프와 비동기

이번 포스팅에서는 조금은 자바스크립트에서 벗어난 이야기를 해볼 예정입니다. 바로 이벤트 루프라는 녀석 때문입니다. 자바스크립트 튜토리얼이나 책에서 이벤트 루프에 관해서는 잘 언급하지 않습니다. 왜냐하면 정확히 이야기하자면 ECMAScrpt 스펙에는 이벤트 루프가 포함되어있지 않습니다. 이벤트 루프는 브라우저나 Node.js가 담당하는 부분이기 때문입니다. 하지만 이 튜토리얼에서 이벤트 루프를 언급하는 이유는 자바스크립트가 브라우저나 Node.js와의 연관성은 필연적이기 때문에 이 시점에서 비동기와 함께 짚고 넘어가는 것이 좋다고 생각했기 때문입니다. 이번 포스팅에서는 총체적인 접근이 조금 필요할 것 같습니다. 그래서 먼저 동기/비동기의 개념을 다루고, 자바스크립트에서 비동기가 적용되는 이벤트 루프에 대해..

[Javascript] Tutorial(4): ES6 문법

※ 이 포스팅은 스터디 강의 자료로 사용되었습니다. 2015년에는 자바스크립트 문법에 매우 큰 변화가 있었습니다. 바로 ES2015(ES6라고도 부릅니다.)가 등장한 것인데요. 이 기점을 기준으로 매년 문법 변경 사항을 발표하고 새로운 문법 상세에 대해서도 활발한 논의가 이루어지고 있습니다. 이전까지 포스팅에서는 ES5 문법을 이용해 예제들을 작성했습니다. 하지만 이제는 ES6를 배워둘 필요가 있다고 알려드리고 싶습니다. ES6에는 다른 언어들의 장점을 본뜬 편리한 기능들이 많이 추가되었기 때문입니다. 하지만 처음부터 ES6 문법으로 포스팅을 작성하지 않은 이유는 이전 포스팅에서는 문법보다는 보다 개념적인 것들을 이해하길 바랐고, 다양한 ES5를 알고 있어야 ES6 문법을 이해하기 쉽고 상황에 맞게 선택..

[Javascript] Tutorial(3): 1급 객체 함수

※ 이 포스팅은 스터디 강의 자료로 사용되었습니다. 이번 포스팅에서는 자바스크립트 함수에 대해서 알아보도록 하겠습니다. 누군가 저에게 자바스크립트에서 가장 중요한 개념이 무엇이냐고 묻는다면 저는 단연 함수라고 이야기할 것 같습니다. 어떤 언어에서나 함수는 중요한 역할을 하지만 특히 자바스크립트에서는 함수의 역할이 남다르게 중요합니다. 그러한 이유에는 모듈화, 클로저, 객체와 같은 자바스크립트의 근간이 되는 기능들을 함수가 제공하기 때문입니다. 이전 포스팅에서도 가끔 언급했듯이 자바스크립트의 함수는 1급 객체라고 불립니다. 1급 객체는 아래와 같은 특성을 지닙니다. 변수나 데이터 구조안에 담을 수 있습니다. 파라미터로 전달할 수 있습니다. 리턴 값으로 사용할 수 있습니다. 리터럴로 생성할 수 있습니다. 동..

[Javascript] Tutorial(2): 자바스크립트 Object(객체)

※ 이 포스팅은 스터디 강의 자료로 사용되었습니다. 자바스크립트는 다른 언어와 다른 객체의 특징이 있습니다. 흔히 이러한 특성 때문에 자바스크립트를 장난감 같다고 이야기 하기도 합니다. 처음 프로그래밍 언어를 배우시는 분에게는 이러한 자바스크립트의 특성이 오히려 언어를 쉽게 이해하는데 도움이 될수도 있지만, C++, Java와 같은 컴파일 언어로 프로그래밍 언어를 접한 분들은 자바스크립트를 공부하며 "이게 된다고...?"라고 생각되는 부분들이 종종 있을 수 있습니다. 그만큼 자바스크립트는 자유로운 언어이고, 코딩하기 쉽지만 코드 스타일에 정형화 되어있지 않고, 디버깅하는데 어려움이 있는 단점도 있습니다. 하지만 분명한건 그만큼 매력적인 언어라는 점입니다. 이 포스팅에서는 사용하는 예제는 자바스크립트 런타..

[Javascript] Tutorial(1): 자바스크립트 개요

※ 이 포스팅은 스터디 강의 자료로 사용되었습니다. 자바스크립트는 흔히 개발자들에게 자리잡은 인식은 '언제든 배울 수 있는 언어'라는 인식이 강합니다. 저 역시 그렇게 생각했고 자바스크립트를 제대로 공부하지 않았음에도 어느정도 결과물을 만들어 낼 수 있었습니다. 하지만 프로젝트가 커지고 ES6와 Node.js와 같은 자바스크립트 생태계가 변하게 되면서 자바스크립트 특성을 제대로 이해하지 않았던 부분들이 문제를 일으키기 시작했습니다. 자바스크립트는 스크립트 언어입니다. 그 중에서도 웹을 기반을 발전한 언어이기 때문에 다른 언어들과 특성이 다른 면이 있습니다. 물론 그 개념이 그리 어려운 것만은 아니지만, C나 Java와 같은 컴파일언어로 개발을 시작한 개발자들에게는 다소 낯설은 공부가 될 수도 있습니다. ..

[Java] JVM의 Runtime Area

JVM (Java virtual machine)에 관하여 살펴보겠다. Heap 영역 자바 객체와 배열이 생성되는 영역이다. 힙 영역에 생성된 객체와 배열은 JVM ㅅ택 영역의 변수나 다른 객체의 필드에서 참조한다. 만약 참조 값이 없다면 쓰레기로 취급하고 JVM은 GC를 이용하여 객체를 힙 영역에서 제거한다. Stack 영역 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당된다. 추가적으로 스레드를 생성하지 않았다면 main 스레드 하나만 존재하므로 JVM 스택 역시 하나이다. JVM 스택은 메서드를 호출할 때마다 프레임(Frame)을 추가(push)하고 메서드가 종료되면 해당 프레임을 제거(pop)하는 동작을 수행한다. 예외 발생 시 printStackTrace()는 메서드를 보여주는 Stack ..

Language/Java 2020.01.13

[Java] Lombok 사용하기

Lombok이란? java는 대부분의 변수들을 class안에 private으로 저장한다. 때문에, 해당 변수에 접근하기 위해서는 아래와 같이 getter setter와 같은 함수들을 정의해 주어야 한다. 이러한 이유로 큰 기능이 없는 작은 클래스임에도 코드가 길어지는 단점이 생긴다. 그나마 IDE의 자동생성 기능을 사용하면 수고롭게 getter, setter 함수를 작성할 필요는 사라지지만, 여전히 코드의 길이는 줄어들지 않고, 만약 변수명이 변경된다면 함수 역시 모두 고쳐주어야 하는 번거로움이 발생한다. lombok은 이러한 에러사항을 해결해주는 자바 라이브러리로써, @Getter, @Setter와 같은 annotation을 붙여주는 것만으로 컴파일 시 자동으로 getter, setter함수를 만들어준..

Language/Java 2019.11.15
반응형