전체 글 118

자바스크립트 콜백 함수 이해하기

콜백 함수가 뭐에요? 콜백(callback) 함수는 다른 코드의 인자로 넘겨주는 함수입니다. 콜백 함수를 넘겨 받은 코드는 이 콜백 함수를 필요에 따라 적절한 시점에 실행합니다. 예를 들면, 어떤 함수 X를 실행합니다. 함수 X는 다음과 "특정 조건이 되면 함수 Y를 호출"과 같은 명령을 실행합니다. 함수 X는 특정 조건이 됐는지 스스로 판단하고 Y를 호출합니다. 다시 말해, Y 함수를 제어할 권리는 X 함수에게 있습니다. 이때 적절한 시점에 호출되는 Y 함수가 콜백 함수입니다. '제어할 권리'을 구체적으로 살펴보기 var count = 0; var countFunction = function () { console.log(count); if (++count > 4) { // count에 먼저 1이 더해..

[프로그래머의 길, 멘토에게 묻다] 소프트웨어 장인 정신이란? 그리고 견습과정 패턴이란?

책 작가, 데이브 후버 등의 목표 여기서 우리 목표는 새로운 상황에서 새로운 실천을 이끌어 내어 그것으로 소프트웨어 개발이라는 분야를 더 발전시켜 나가는 능력을 갖게 하는 것이다. 44p 소프트웨어 장인정신에 대한 우리의 비전은, 일부는 우리가 이 책을 만들면서 인터뷰했던 고도로 숙련된 개인들에 내재된 가치의 정수이고, 또 일부는 우리가 장차 출현하기를 고대하는 공동체에 대한 표현이다. 이 책에 담긴 사상은 그전 비전에 대한 출발점이다. 그러므로 우리가 소프트웨어 장인정신이라는 말을 쓸 때는, 어떤 가치 기준에 의해 정의되어서 하나로 묶을 수 있는 실무공동체에 대해 이야기하는 것이다. 이러한 가치 기준들은 다소간 중복되는 면이 있으며, 아래와 같은 항목이 포함된다. 45p 가치 기준 (45~48p) '성..

[Javascript] 다양한 상황에서 this는 무엇을 가리킬까

전역 공간에서 this 배경지식으로, 자바스크립트의 모든 변수는 특정 객체(실행컨텍스트의 LexicalEnvironment)의 프로퍼티로서 동작합니다. 실행컨텍스트는 변수를 수집해 LE의 프로퍼티로 저장합니다. 이후 어떤 변수를 호출하면 (스코프 체인에서 이를 검색) LE를 조회해서 일치하는 프로퍼티가 있을 경우 그 값을 반환합니다. 처음부터 전역 객체의 프로퍼티로 할당한 경우, 삭제가 가능합니다. 하지만 전역변수로 선언한 경우 삭제가 되지 않습니다. 즉, 전역변수로 선언하면 자바스크립트 엔진이 이를 자동으로 전역 객체의 프로퍼티로 할당하면서 추가적으로, 해당 프로퍼티의 configurable 속성(변경 및 삭제 가능성)을 false로 정의합니다. 메서드를 호출할 때 메서드 내부에서 this '메..

자바스크립트에서 실행 컨텍스트(execution context)가 도대체 뭐하는 애에요

이 글은 를 기반으로 작성되었습니다. 자바스크립트에서 실행 컨텍스트(execution context) 실행 컨텍스트는 실행할 코드에 제공할 환경 정보들을 모아놓은 객체입니다. 자바스크립트는 어떤 실행 컨텍스트가 활성화되는 시점에 선언된 변수를 위로 끌어올리고(호이스팅, hoisting), 외부 환경 정보를 구성하고, this 값을 설정하는 등의 동작을 수행합니다. 이 환경 정보를 콜 스택*에 쌓아 올렸다가, 가장 위에 쌓여 있는 컨텍스트와 관련 있는 코드들을 실행하는 식으로 전체 코드의 환경과 순서를 보장합니다. 이 때 콜 스택*은 프로그램을 실행할 때 현재 실행 중인 함수가 가장 위에 쌓이고 그 함수의 실행이 끝나면 사라지는 스택 자료구조입니다. 즉, 프로그램이 시작되면 콜 스택에 함수들이 쌓이고, 가..

인텔리제이(intellij) 커밋메시지 글자 수 표시하는 방법

커밋 메시지, 특히 커밋 메시지의 제목(title)이 너무 길면 웹이나 로그에서 커밋 메시지가 잘려 나와서 커밋을 한 눈에 파악하기 힘듭니다. 비주얼 스튜디오 코드(Visual Studio Code, VSCode)에서 소스 제어(깃허브 버전 관리) 시 커밋 메시지를 작성하면 VSCode에서 글자 수를 세어줘서 편했습니다. 하지만 인텔리제이(intelliJ)에서 버전 관리를 할 때 초기 설정은 커밋 메시지의 글자 수가 나오지 않습니다. 따로 설정을 해줘야 하는데요. 방법은 다음과 같습니다. 먼저 File-Settings 로 들어가줍니다. Version Control 메뉴로 들어가서 중앙의 Commit message inspections에 들어갑니다. 거기서 Limit subject line을 클릭해 Rig..

자바스크립트 데이터 타입(기본형, 참조형) 이해하기

자바스크립트 세부 데이터 타입(Array, String ...)의 성질을 살펴보기 보다 기본형과 참조형의 특징이 무엇이고 어떻게 구분하는지 다룹니다. 자바스크립트 데이터 타입 이해하기 자바스크립트 데이터 타입은 크게 두 종류입니다. 기본형(원시형, primitive type)과 참조형(reference type)이다. 이에 따른 세부 데이터 타입은 다음과 같습니다. 기본(원시)형 → Number, String, Boolean, null, undefined, Symbol 참조형 → Object, Array, Function, Date, RegExp, Map, WeakMap, Set, WeakSet, 참조형은 모두 객체(Object)의 하위 분류에 속합니다. 기본형과 참조형을 구분하는 기준 기본형은 값이 담..

클래스의 내부와 외부를 구분해야 하는 이유는?!

클래스의 내부와 외부를 구분해야 하는 이유 1. 경계의 명확성이 객체의 자율성을 보장하기 때문이다. 객체가 자율적인 존재로 우뚝 서기 위해서 외부의 간섭을 최소화해야 한다. 일반적으로 객체의 상태는 숨기고 행동만 외부에 공개해야 한다. 외부에서는 객체가 어떤 상태에 놓여 있는지, 어떤 생각을 하고 있는지 알아서는 안 되며, 결정에 직접적으로 개입하려고 해서도 안 된다. 객체에게 원하는 것을 요청하고는 객체가 스스로 최선의 방법을 결정할 수 있을 것이라는 점을 믿고 기다려야 한다. 캡슐화와 접근 제어는 객체를 두 부분으로 나눈다. 하나는 외부에서 접근 가능한 부분으로 이를 퍼블릭 인터페이스라 부른다. 다른 하나는 외부에서 접근 불가능하고 오직 내부에서 접근 가능한 부분으로 이를 구현이라 부른다. 2. 프로..

운영체제에서 일어나는 인터럽트는 무엇일까?

운영체제와 인터럽트 CPU 연산과 I/O 연산에서 일어나는 인터럽트 입출력 장치들의 I/O 연산은 입출력 컨트롤러가 담당한다. 컴퓨터 내에서 수행되는 연산은 메인 CPU가 담당한다. 이때 입출력 장치와 메인 CPU는 동시에 동작이 가능하다. 각 장치마다 이를 제어하기 위해 설치된 장치 컨트롤러는 장치로부터 들어오고 나가는 데이터를 임시로 저장하기 위한 작은 메모리, 로컬 버퍼(local buffer)를 가지고 있다. 프로그램이 장치에게 어떤 명령을 내리면 그 장치의 컨트롤러가 로컬 버퍼에 명령을 수행하여 관련 메모리를 로컬 버퍼에 저장한다. 이때 CPU가 이 작업이 끝났는지를 지속적으로 체크하는 것이 아니다. 장치에 있는 컨트롤러가 인터럽트를 발생시켜 CPU에 상황을 보고한다. 이때 인터럽트란, 컨트롤러..

신호를 전송할 때 일어나는 일

신호를 전송할 때 일어나는 일 인터페이스가 하는 일 컴퓨터와 통신 매체를 중개하는 인터페이스는 비트를 신호로, 신호를 비트로 변환하는 기기다. 신호와 비트 신호에는 아날로그 신호와 디지털 신호가 있다. 아날로그는 '파장', 디지털은 'ON'과 'OFF'이다. 현재 통신에서 사용되는 것은 압도적으로 디지털 신호가 많다. 비트는 '0'이나 '1'이다. 비트는 디지털 신호로 사용된다. 예를 들어 '0'을 'OFF', '1'을 'ON'으로 사용하면, 신호 하나로 비트 하나가 된다. 신호와 비트의 대비(부호화 방식)은 여러 방식이 존재하며 대표적으로 RZ(Return to Zero)와 NRZ(Non Return to Zero)가 있다. 부호화 방식의 자세한 예는 이 글에 있다. 통신속도는 '1초 동안의 신호의 횟..

OSI 참조모델에서 1계층의 역할

OSI 참조모델에서 1계층의 역할 사전 지식 OSI 참조모델은 국제 표준화 기구(ISO)가 네트워크 통신에서 '데이터를 송수신하기 위한 규칙'인 프로토콜과 규격을 통일, 표준화하려는 과정에서 선언됐다. OSI 참조 모델은 데이터 통신의 단계 구성도로, 데이터 통신 표준화 이전에 데이터 통신 전체의 설계도를 만들려 한 시도에서 나온 결과물이다. 국제 표준화 기구는 데이터 통신을 단계로 나누어 각 단계의 순서를 명확히하고, 이 모델에 따라 프로토콜을 정의해서 데이터 통신을 구축하려 했다. OSI 참조 모델은 데이터 통신을 7단계로 나눈다. 이 단계를 계층(layer, 레이어)라고 부른다. 각 계층마다 각각의 역할과 규칙이 있다. 데이터를 수신하는 측에서는 1계층부터 7계층까지 순서대로 각 역할..