목록BOOKS (46)
\(@^0^@)/
오늘 읽은 범위 : (프로토타입) p.146 ~ p.159 프로토타입 JS는 프로토타입 기반의 언어이다. 클래스 기반 언어에서는 '상속'을 사용하지만, 프로토타입 기반 언어에서는 어떤 객체를 원형(prototype)으로 삼고, 이를 복제(참조)함으로써 상속과 비슷한 효과를 얻는다. 유명한 프로그래밍 언어의 상당수가 클래스 기반인 것에 비교하면 프로토타입은 꽤나 독특한 개념이라 할 수 있음. - 프토토타입의 개념 이해 - Constructor, prototype, instance 위의 그림은 아래의 코드를 도식화한 것이다. var instance = new Constructor(); 어떤 생성자 함수(Constructor)를 new 연산자와 함께 호출하면 Construct..
오늘 읽은 범위 : (클로저) p.125 ~ p.145 클로저 콜백 함수 내부에서 외부 데이터를 사용하고자 할 때 // 콜백 함수와 클로저 var fruits = ['apple', 'banana', 'peach']; var $ul = document.createElement('ul'); fruits.forEach(function (fruit) { // A 함수 var $li = document.createElement('li'); $li.innerText = fruit; $li.addEventListener('click', function() { // B 함수 alert('your choice is ' + fruit); }); $ul.appendChild($li); })..
오늘 읽은 범위 : (클로저) p115 ~ p.124 클로저 클로저의 의미 자신을 내포하는 함수의 콘텍스트에 접근할 수 있는 함수 함수를 선언할 때 만들어지는 유효 범위가 사라진 후에도 호출할 수 있는 함수 로컬 변수를 참조하고 있는 함수 내의 함수 어떤 함수에서 선언한 변수를 참조하는 내부 함수에서만 발생하는 현상 클로저의 원리 일반적인 외부 함수의 변수를 참조하는 내부 함수 var outer = function () { var a = 1; var inner = function () { console.log(++a); }; inner(); }; outer(); 클로저 발생하는 외부 함수의 변수를 참조하는 내부 함수 var outer = function () { var ..
오늘 읽은 범위 : 8장, 경계 (p. 144 ~152) 외부에서 가져온 패키지를 사용하고 싶다면 우리 자신을 위해 우리가 사용할 코드를 테스트하는 편이 바람직하다. 문서를 읽으며 사용법을 결정하고, 우리쪽 코드를 작성해 라이브러리가 예상대로 동작하는지 확인한다. 학습 테스트 우리쪽 코드를 작성해 외부 코드를 호출하는 대신 먼저 간단한 테스트 케이스를 작성해 외부 코드를 익히는 것. 학습 테스트는 이해도를 높여주는 정확한 실험. 학습 테스트를 이용한 학습이 필요하든 그렇지 않든, 실제 코드와 동일한 방식으로 인터페이스를 사용하는 테스트 케이스가 필요하다. 이런 경계 테스트가 있다면 패키지의 새 버전으로 이전하기 쉬워진다. 그렇지 않다면 낡은 버전을 필요 이상으로 오랫동안..
오늘 읽은 범위 : 7장, 오류 처리 (p. 130 ~ 142) 오류 코드보다 예외를 사용하라 오류가 발생하면 예외를 던지는 편이 낫다. 그러면 호출자 코드가 더 깔끔해진다. 논리가 오류 처리 코드와 뒤섞이지 않으니까. Try-Catch-Finally 문부터 작성하라 미확인(unchecked) 예외를 사용하라 예외에 의미를 제공하라 예외를 던질 때는 전후 상황을 충분히 덧붙인다. 그러면 오류가 발생한 원인과 위치를 찾기가 쉬워진다. 호출자를 고려해 예외 클래스를 정의하라 정상 흐름을 정의하라 null을 반환하지 마라 null을 반환하는 코드는 일거리를 늘릴 뿐만 아니라 호출자에게 문제를 떠넘긴다. null을 전달하지 마라 깨끗한 코드는 읽기도 좋아야 하지만 안정성도 높아..
오늘 읽은 범위 : 6장, 객체와 자료 구조 (p. 118 ~128) 객체 지향 코드에서 어려운 변경은 절차적인 코드에서 쉬우며, 절차적인 코드에서 어려운 변경은 객체 지향 코드에서 쉽다. 새로운 자료 타입이 필요한 경우에는 클래스와 객체 지향 기법이 가장 적합하다. 새로운 함수가 필요한 경우에는 절차적인 코드와 자료 구조가 좀 더 적합하다. 디미터 법칙 : 휴리스틱으로, 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙. 잡종 구조는 중요한 기능을 수행하는 함수도 있고 공개 변수나 공개 조회/설정 함수도 있다. 잡종 구조는 새로운 함수는 물론이고 새로운 자료 구조도 추가하기 어렵다. 자료 전달 객체 자료 구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는 ..
오늘 읽은 범위 : (콜백 함수) p.94 ~ p.114 콜백 함수 콜백 함수 (callback function)는 다른 코드의 인자로 넘겨주는 함수. 콜백 함수는 제어권과 관련이 깊다. 콜백 함수는 다른 코드(함수 또는 메서드)에게 인자로 넘겨줌으로써 그 제어권도 함께 위임한 함수. 콜백 함수를 위임받은 코드는 자체적인 내부 로직에 의해 이 콜백 함수를 적절한 시점에 실행할 것. 제어권 var count = 0; var cbFunc = function () { console.log(count); if (++count > 4) clearInterval(timer); }; var timer = setInterval(cbFunc, 300); // -- 실행 결과 -- // ..
오늘 읽은 범위 : (this) p.80 ~ p.93 명시적으로 this를 바인딩하는 방법 1️⃣ call 메서드 Function.prototype.call(thisArg[, arg1[, arg2[, ...]]]) 메서드의 호출 주체인 함수를 즉시 실행하도록 하는 명령 첫 번째 인자를 this로 바인딩하고, 이후의 인자들을 호출할 함수의 매개변수로. 함수를 그냥 실행하면 this는 전역 객체를 참조하지만 call 메서드를 이용하면 임의의 객체를 this로 지정할 수 있다. 객체의 메서드를 그냥 호출하면 this는 객체를 참조하지만 call 메서드를 이용하면 임의의 객체를 this로 지정할 수 있다. // 함수 var func = function (a, b, c) { co..
오늘 읽은 범위 : (this) p.65 ~ p.79 다른 대부분의 객체지향 언어에서 this는 클래스로 생성한 인스턴스 객체를 의미하고, this를 클래스에서만 사용할 수 있기 때문에 혼란의 여지가 없거나 많지 않다. 하지만, 자바스크립트(JS) 에서의 this는 어디서든 사용할 수 있다. 함수와 객체(메서드)의 구분이 느슨한 JS에서 this는 실질적으로 이 둘을 구분하는 거의 유일한 기능이다. 상황에 따라 달라지는 this JS에서 this는 기본적으로 실행 컨텍스트가 생성될 때 함께 결정된다. (실행 컨텍스트는 함수를 호출할 때 생성됨) 즉, this는 함수를 호출할 때 결정된다. 함수를 어떤 방식으로 호출하느냐에 따라 값이 달라진다. 1️⃣ 전역 공간에서의 th..
오늘 읽은 범위 : 5장. 형식 맞추기 (p. 96 ~116) 형식을 맞추는 목적 코드 형식은 의사소통의 일환이다, 의사소통은 전문 개발자의 일차적인 의무. 오랜 시간이 지나 원래 코드의 흔적을 더 이상 찾아보기 어려울 정도로 코드가 바뀌어도, 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다. 적절한 행 길이를 유지하라 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다. 신문 기사처럼 작성하라 : 아래로 내려갈수록 의도를 세세하게 묘사한다. 개념은 빈 행으로 분리하라 : 각 행은 수식이나 절을 나타내고, 일련의 행 묶음은 완결된 생각 하나를 표현한다. 생각 사이는 빈 행을 넣어 분리하는 것이 좋다. 빈 행은 새로운 개념을 시작..