프로그래밍-학습기록 95

Javascript Koans가 뭐야? 설명과 테스트 후기

Javascript Koans 설명과 테스트 후기 바닐라코딩 사전 학습 가이드의 5번째 단계로 Javascript Koans가 있다. 처음 봤을 때는 무려 10년 전 깃허브 레포지토리의 자료라서 당황스러웠고, 다 영어라서 꺼려졌다. koans가 뭐야? 큰 스님들이 제자들을 인도하던 사실을 기록하여 후세에 공부하는 규범 일단, 이걸로 뭘 하라는 건지 알 수 없었다. 제목에 떡하니 있는 koans라는 단어의 뜻이 매우 궁금해졌다. 그래서 찾아봤더니 ... koans의 koan은 공안(公案)으로, '간화선'이라는 불교 수행법 안의 개념이다. 공안은 공부안독의 준말로, 관공서(官公署)의 문서라는 뜻인데, 선종의 큰 스님들이 심지, 즉 마음자리를 밝게 깨달은 기연 또는 큰 스님들이 제자들을 인도하던 사실을 기록하..

[Javascript] 프로토타입으로 클래스 구현하기

프로토타입으로 클래스 구현하기 자바스크립트에는 '상속' 개념이 존재하지 않습니다. 하지만 클래스 기반의 다른 언어에 익숙한 개발자들의 니즈에 따라 ES6에는 클래스 문법이 추가됐습니다. 하지만 ES6 클래스에서 일정 부분은 프로토타입을 활용하고 있기 때문에, ES5 체제 하에서 클래스를 흉내내기 위한 구현 방식을 학습하는 것은 큰 의미가 있습니다. 클래스와 인스턴스의 개념 이해 상위의 개념과 하위의 개념이 있습니다. 개념을 어떤 '집단'으로 표현하면, 영어로 그것은 클래스라고도 할 수 있습니다. 다시 말해, 상위 클래스와 하위 클래스가 있습니다. 하위 클래스는 상위 클래스를 포함하면서 더 구체적인 내용(개념)이 추가됩니다. 여기서 클래스의 예는 '음식'이고 그 하위 개념(클래스)는 '과일'이며, 또 그 ..

[Javascript] 함수 선언문 vs. 함수 표현식 feat 호이스팅

함수 선언문과 함수 표현식 함수 선언문(function declaration)은 function의 정의부만 존재하고 별도의 할당 명령이 없는 것을 의미합니다. function a() { // 함수 선언문 /* ... */ } a(); // 정상 실행 함수명 a가 곧 변수명입니다. 함수 선언문의 경우 반드시 함수명이 정의되어 있어야 합니다. 반대로 함수 표현식(function expression)은 정의한 function을 별도의 변수에 할당하는 것을 말합니다. var b = function () { // (익명) 함수 표현식. 변수명 b가 곧 함수명 /* ... */ } b(); // 정상 실행 var c = function d () { // 기명 함수 표현식. 변수명은 c, 함수명은 d /* ... *..

[Javascript] 프로토타입 찬찬히 이해해보기

자바스크립트의 근본, 프로토타입... 바~rrㄹ로 시작! 프로토타입의 개념 이해 constructor, prototype, instance var instance = new Constructor(); 어떤 생성자 함수(Constructor)를 new 연산자와 함께 호출하면 Constructor에서 정의된 내용을 바탕으로 새로운 인스턴스(instance)가 생성됩니다. 이때 instance에는 __proto__ 라는 프로퍼티가 자동으로 부여됩니다. 이 프로퍼티는 Constructor의 prototype이라는 프로퍼티를 참조합니다. prototype 객체 내부에는 인스턴스가 사용할 메서드를 저장합니다. 그러면 인스턴스에서도 숨겨진 프로퍼티인 __proto__ 를 통해 이 메서드들에 접근할 수 있게 됩니다. ..

클로저는 글로 적기 글렀어.

클로저, 글로 적어 보자 클로저의 의미 및 원리 이해 예제로 시작해봅시다. var outer = function () { var a = 1; var inner = function () { return ++a; }; return inner; }; var outer2 = outer(); console.log(outer2()); console.log(outer2()); /* 실행결과 2 3 */ 함수 outer은 inner 함수 자체를 반환합니다. 변수 outer2에는 outer의 반환 값이 담깁니다. 그리고 outer2를 두 번 호출해 출력합니다. 실행 결과는 2와 3입니다. 기존 상식으로 콘솔 출력 결과가 나오기까지 과정을 생각해보면 다음과 같습니다. (9번째 줄) outer2를 호출합니다(outer2에는..

허브의 기능(증폭과 연결)과 문제(플러딩으로 인한 도메인 충돌 가능성)

허브의 기능과 문제 배경지식 케이블에 T자 분배를 만드는 대신, 케이블을 허브에다 연결하면 케이블이 분배되는 것과 마찬가지이다. 허브에 케이블로 연결되어 있는 기기는 동일 케이블에 연결되어 있는 것하고 같은 취급을 받는다. 허브의 기능 신호의 증폭하고 재생합니다. 감쇠에 의해 붕괴된 신호를 본래의 형태로 증폭, 재생시킵니다. 증폭만 하는 기계로, 리피터(Repeater)라는 것이 있습니다. 리피터는 케이블 사이에 연결하는 기계로 허브처럼 케이블을 많이 연결할 수 없습니다. 그래서 케이블을 많이 연결할 수 있는 허브 쪽이 일반적으로 사용됩니다. 신호를 증폭하고 재생하지 않는 허브도 존재합니다. 그런 허브는 패시브(passive) 허브라고 불립니다. 패시브 허브는 신호를 증폭시키지 않고 통과시키는 허브입니다..

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

콜백 함수가 뭐에요? 콜백(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 값을 설정하는 등의 동작을 수행합니다. 이 환경 정보를 콜 스택*에 쌓아 올렸다가, 가장 위에 쌓여 있는 컨텍스트와 관련 있는 코드들을 실행하는 식으로 전체 코드의 환경과 순서를 보장합니다. 이 때 콜 스택*은 프로그램을 실행할 때 현재 실행 중인 함수가 가장 위에 쌓이고 그 함수의 실행이 끝나면 사라지는 스택 자료구조입니다. 즉, 프로그램이 시작되면 콜 스택에 함수들이 쌓이고, 가..