4.2 Object references and copying객체와 기본 타입 간에는 값을 저장하는 방식에서 차이가 있다. 객체는 주솟값, 기본 타입은 값 그 자체를 새롭게 생성하여 저장한다. 예를 들어 아래 코드는 변수마다 각각 문자열 값을 따로 저장한다.let message = "Hello!";let phrase = message;객체는 다르다. 메모리 어딘가 값이 저장된 주솟값을 변수에 할당한다. 아래 코드에서 각각의 변수는 같은 주솟값을 저장한다.let user = { name: "John" };let admin = user; // copy the referenceComparison by reference객체를 먼저 생성한 뒤 할당할 경우, 완전히 새로운 객체를 만든 것과 같다.let a = {};..
4.1 Objects객체 생성은 아래 두 가지 방식으로 할 수 있다.let user = new Object(); // "object constructor" syntaxlet user = {}; // "object literal" syntax마지막 속성의 끝에 쉼표를 사용해도 무방하다. 코드 편집 시 편리할 것 같다.let user = { name: "John", age: 30,}Square brackets객체 속성에 접근하려면 '.'을 사용하면 되는데, 속성 이름이 두 개 이상의 단어로 구성되어 있다면 대괄호를 사용해야 한다.// this would give a syntax erroruser.likes birds = true// setuser["likes birds"] = true;// getale..
2.15 Function함수를 정의할 때, 아래와 같이 text 파라미터의 기본값을 넣어 줄 수 있다.javascript에서는 함수를 호출할 때 일부 파라미터가 빠져도 정상적으로 호출되는데, 이때 빠진 파라미터의 기본값을 설정하는 것이다.function showMessage(from, text = "no text given") { alert( from + ": " + text );}showMessage("Ann"); // Ann: no text givenJava의 경우 메서드 이름이 같더라도 파라미터가 다르면 사실상 다른 메서드로 취급하기 때문에, 이 부분은 기억해 두고 잘 활용할 수 있는 방법을 고민해 볼 필요가 있겠다.Returning Value함수에서 값을 반환할 때, 값이 없는 것과 undefi..
2.12 nullish coalescing operator '??'result = a ?? b; null 병합 연산자는 아래 코드와 같은 동작을 한다. 먼저 나온 변수가 정의되어 있다면 해당 값을 반환하고, 아니면 뒤에 값을 반환한다.result = (a !== null && a !== undefined) ? a : b;조금 비슷한 용도로 '||'를 사용할 수도 있다. 가장 먼저 나오는 true 값을 반환하는 점을 이용한다.let firstName = null;let lastName = null;let nickName = "Supercoder";// shows the first truthy value:alert(firstName || lastName || nickName || "Anonymous"); /..
2.7 Type conversionsString ConversionString 변환은 String(value)으로 할 수 있음. Numeric ConversionNumber("123") 방식으로 변환이 가능하다. true는 1로 false는 0으로 변환된다.alert( Number(" 123 ") ); // 123alert( Number("123z") ); // NaN (error reading a number at "z")alert( Number(true) ); // 1alert( Number(false) ); // 0Boolean Conversionalert( Boolean(1) ); // truealert( Boolean(0) ); // falsealert( ..
2.5 Data types여덝가지의 기본 데이터 타입이 존재한다. javascript는 어떤 한 변수에 어떤 타입의 값이든 넣을 수 있는데, 이를 "동적 타입"이라 한다. number모든 정수, 부동 소수점 숫자를 나타낸다.Infinity, -infinity, NaN 와 같은 특수 숫자 값도 존재한다. (infinity 는 무한대, NaN 는 계산상의 오류) NaN의 경우 아래 케이스를 숙지해두자.alert( NaN + 1 ); // NaNalert( 3 * NaN ); // NaNalert( "not a number" / 2 - 1 ); // NaN0으로 나누거나 문자열을 숫자로 처리하는 등의 잘못된 연산을 수행하더라도 에러가 발생하는 것이 아니라, NaN 값이 나오기 때문에 비교적 안전하다.Bigi..
모던 자바스크립트 튜토리얼 이 문서를 참고하여 javascript 학습한 내용에 대해 기록한다. 가급적 영문 그대로 보고 이해 안 되는 부분만 한글로 번역해서 학습한다. 평소 알고 있던 내용은 생략하고 새롭게 알게 되거나 짚고 넘어가고 싶은 내용 위주로 기록한다. 2.1 Hello, World!The "script" tag" 보통 간단한 스크립트는 html 문서에 포함하고, 좀 복잡한 파일은 분리한다. 분리된 파일은 브라우저에서 캐시에 저장하는 이점이 있다. 이 경우 다른 페이지에서 해당 스크립트를 참조할 때, 새롭게 다운로드하는 것이 아니라 캐시에서 가져오게 된다. (사실상 한 번만 다운로드) 이를 통해 트래픽을 줄이고 페이지를 속도를 빠르게 유지할 수 있다. src 속성과 내부에 코드가 함께 쓰일 ..
Full-Text Search로 TPS 개선하기 과거에 진행했던 프로젝트에 리팩토링을 진행하면서 검색 쿼리의 성능을 개선해 보았다. 인덱스를 쓰지 않는 쿼리 개선 대상은 특정 키워드로 게시글을 조회하는 쿼리다. 이 쿼리는 where 절에 like 문과 '%키워드%' 형태로 조건이 걸려 있었다. 이런 방식의 쿼리는 인덱스를 쓰지 않는 풀 테이블 스캔을 해 개선점이 있을 거라 판단했다. type 값이 ALL, 즉 풀 테이블 스캔 당연히 개선 방법으로 인덱스 사용이 가장 먼저 떠올랐지만, 한편으론 무수히 많은 문자열 조합이 가능한 TEXT 데이터에 인덱스를 생성하는 것이 가능할까? 하는 의문도 들었다. 그러면 어쩔 수 없이 검색 엔진을 도입해야 하나? 생각도 했지만, 간단한 검색 기능일 뿐인데 과하다는 생각도..