{"data":{"site":{"siteMetadata":{"title":"lastrites2018","author":"lastrites2018","siteUrl":"https://lastrites2018.netlify.com","comment":{"disqusShortName":"","utterances":"lastrites2018/gatsby-first-blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"736fb379-6e2a-5be3-8fcb-ace53d173fc2","excerpt":"책 읽기 자바스크립트 자료 구조와 알고리즘 - 로이아니 그로네르 20180914 자바스크립트 개요 자바스크립트에서 전역 변수는 ‘악의 축’이란 말을 많이 듣는데, 사실 맞다. 자바스크립트 소스 코드의 품질을 전역 변수와 전역 함수의 개수로 측정할 수 있을 정도다. 전역 변수는 가급적 피하는 편이 좋다. Truthy와 Falsy 대개의 언어에서 불린 값 true, false는 논리 연산 결과의 참, 거짓을 의미하는데, 자바스크립트에서의 ”Acorn’ 같은 문자열이 true…","html":"<p>[책 읽기]</p>\n<p>자바스크립트 자료 구조와 알고리즘 - 로이아니 그로네르</p>\n<p>20180914</p>\n<ol>\n<li>자바스크립트 개요</li>\n</ol>\n<p>자바스크립트에서 전역 변수는 ‘악의 축’이란 말을 많이 듣는데, 사실 맞다. 자바스크립트 소스 코드의 품질을 전역 변수와 전역 함수의 개수로 측정할 수 있을 정도다. 전역 변수는 가급적 피하는 편이 좋다.</p>\n<hr>\n<p>Truthy와 Falsy</p>\n<p>대개의 언어에서 불린 값 true, false는 논리 연산 결과의 참, 거짓을 의미하는데, 자바스크립트에서의 ”Acorn’ 같은 문자열이 true 값을 가질 수도 있다.</p>\n<table>\n<thead>\n<tr>\n<th>타입</th>\n<th>결과</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>undefined</td>\n<td>false</td>\n</tr>\n<tr>\n<td>null</td>\n<td>false</td>\n</tr>\n<tr>\n<td>Boolean</td>\n<td>참은true, 거짓은 false</td>\n</tr>\n<tr>\n<td>Number</td>\n<td>+0, -0, NaN은 false, 그 밖에는 모두 ture</td>\n</tr>\n<tr>\n<td>String</td>\n<td>빈 문자열이면 false, 길이가 1 이상인 문자열인 경우는 모두true</td>\n</tr>\n<tr>\n<td>Object</td>\n<td>true(객체는 항상 true)</td>\n</tr>\n</tbody>\n</table>\n<p>내장 메소드 toNumber와 toPrimitive는 다음과 같은 결과값을 만든다.</p>\n<p>toNumber의 경우,</p>\n<table>\n<thead>\n<tr>\n<th>타입</th>\n<th>결과</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>undefined</td>\n<td>NaN</td>\n</tr>\n<tr>\n<td>null</td>\n<td>+0</td>\n</tr>\n<tr>\n<td>Boolean</td>\n<td>true이면 1, false면 +0</td>\n</tr>\n<tr>\n<td>Number</td>\n<td>원래 수치 그대로</td>\n</tr>\n<tr>\n<td>String</td>\n<td>문자열을 숫자형으로 파싱. 순수 문자로만 구성된 문자열이라면 NaN, 숫자로 구성된 문자열이면 숫자형으로 바뀐 값이다.</td>\n</tr>\n<tr>\n<td>Object</td>\n<td>toNumber(toPrimitive(value))</td>\n</tr>\n</tbody>\n</table>\n<p>toPrimitive</p>\n<table>\n<thead>\n<tr>\n<th>타입</th>\n<th>결과</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Object</td>\n<td>valueOf의 결과가 기본 값이라면 기본 값 그대로 반환한다. toString의 결과가 기본값이라면 역시 기본 값 그대로 반환한다. 나머지 경우는 모두 에러다.</td>\n</tr>\n</tbody>\n</table>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Acorn'</span> <span class=\"token operator\">?</span> <span class=\"token boolean\">true</span> <span class=\"token punctuation\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// true</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Acorn'</span> <span class=\"token operator\">==</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// false</span>\n<span class=\"token operator\">-</span><span class=\"token operator\">></span> toNumber 메소드로 불린 값을 변환하면 Acorn <span class=\"token operator\">==</span> <span class=\"token number\">1</span>\n<span class=\"token comment\">// 다음 toNumber 메소드로 문자열을 변환하는데, 순수 문자열로 구성된 문자열이므로 결과는 NaN 이다. 따라서 결국 NaN == 1 결과는 false;</span>\n\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Acorn'</span> <span class=\"token operator\">==</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// false</span>\n<span class=\"token operator\">-</span><span class=\"token operator\">></span> toNumber 메소드로 불린 값을 변환하면 Acorn <span class=\"token operator\">==</span> <span class=\"token number\">0</span>\n<span class=\"token comment\">// 다음 toNumber 메소드로 문자열을 변환하는데, 순수 문자열로 구성된 문자열이므로 결과는 NaN 이다. 따라서 결국 NaN == 0 결과는 false;</span>\n\n<span class=\"token comment\">// 복잡하게 생각하지 말고 ==을 봉인하고, ===을 쓰도록 하자...</span></code></pre></div>\n<p>객체 지향 프로그래밍</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">var</span> obj <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Object</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">var</span> obj <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// OOP에서 객체는 클래스의 인스턴스instance이며,</span>\n<span class=\"token comment\">// 클래스는 객체의 특성을 정의한다.</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">Book</span><span class=\"token punctuation\">(</span>title<span class=\"token punctuation\">,</span> pages<span class=\"token punctuation\">,</span> isbn<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>title <span class=\"token operator\">=</span> title<span class=\"token punctuation\">;</span>\n\t<span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>pages <span class=\"token operator\">=</span> pages<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>isbn <span class=\"token operator\">=</span> isbn<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n클래스의 인스턴스는 다음과 같이 생성한다<span class=\"token punctuation\">.</span>\n<span class=\"token keyword\">var</span> book <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Book</span><span class=\"token punctuation\">(</span><span class=\"token string\">'제목'</span><span class=\"token punctuation\">,</span> <span class=\"token number\">123</span><span class=\"token punctuation\">,</span> <span class=\"token number\">9781783554874</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nbook 객체의 프로퍼티를 조회하거나 고치는 방법 <span class=\"token punctuation\">:</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>book<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">//도서 제목 출력</span>\nbook<span class=\"token punctuation\">.</span>title <span class=\"token operator\">=</span> <span class=\"token string\">'자바스크립트 자료 구조와 알고리즘'</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 도서 제목 업데이트</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>book<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> 업데이트된 제목 출력\n\n클래스는 함수를 가질 수 있다<span class=\"token punctuation\">.</span>\nBook<span class=\"token punctuation\">.</span>prototype<span class=\"token punctuation\">.</span>printTitle <span class=\"token operator\">-</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\nbook<span class=\"token punctuation\">.</span><span class=\"token function\">printTitle</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">Book</span><span class=\"token punctuation\">(</span>title<span class=\"token punctuation\">,</span> pages<span class=\"token punctuation\">,</span> isbn<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>title <span class=\"token operator\">=</span> title<span class=\"token punctuation\">;</span>\n\t<span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>pages <span class=\"token operator\">=</span> pages<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>isbn <span class=\"token operator\">=</span> isbn<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function-variable function\">printIsbn</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>isbn<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\nboook<span class=\"token punctuation\">.</span><span class=\"token function\">printIsbn</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<blockquote>\n<p>printTitle 함수는 Book 클래스의 모든 인스턴스가 공유할 수 있고, 함수 사본은 1개만 생성된다. 하지만, printIsbn처럼 클래스 내부에 정의한, 클래스 기반 정의 함수는 각 인스턴스 별로 자신의 함수 사본을 갖게 된다. 프로토타입 메소드는 인스턴스에 함수를 할당하는 측면에서 보면 메모리와 처리 비용이 절약되지만, public 함수/프로퍼티만 선언할 수 있다. 클래스 내부에 정의하면 private 함수/프로퍼티를 선언하고 클래스 내부의 다른 함수에서 참조할 수 있다. 이 책의 예제 코드에서는 주로 클래스 기반 정의 함수를 사용하지만(어떤 프로퍼티와 함수는 private로 유지해야 하므로), 가급적 프로토타입 메소드를 사용하는 것이 바람직하다.</p>\n</blockquote>\n<p>-> public 함수/프로퍼티를 선언하는 쪽이 바람직하다고?</p>","frontmatter":{"title":"자바스크립트 자료 구조와 알고리즘 - 로이아니 그로네르","date":"September 14, 2018"}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"slug":"/til/20180914  자바스크립트 자료 구조와 알고리즘 - 로이아니 그로네르/","previous":{"fields":{"slug":"/til/20180914 - wrong answer/"},"frontmatter":{"title":"wrong answer","category":"TIL"}},"next":{"fields":{"slug":"/til/20180913-20180916 week summary/"},"frontmatter":{"title":"0913-0916 week summary","category":"TIL"}}}}