책정리 43

Quiz로 정리하는 타입스크립트 문법 (1)

Effective Typescript 책을 읽고 1장 ~ 10장 까지의 내용을 퀴즈로 정리해보았습니다. 다음 문제에 답해보면서 개념을 정리해보세요 🙏🏻 해설은 글 아래에 달아놓겠습니다. 문제 자바스크립트 파일 main.js를 main.ts로 바꾸면 오류가 발생할까? 타입 체크를 통과하더라도 런타임에 오류가 발생할 수 있을까? 타입스크립트의 strictNullChecks는 어떤 설정일까? 타입 오류가 있는 코드는 컴파일이 불가능할까? instanceof 체크는 컴파일 타임에 일어날까 런타임에 일어날까? 타입스크립트 타입을 많이 사용하면, 런타임 성능에 영향이 있을까? {x, y, z} 타입은 {x, y} 타입에 호환될까? any 타입을 사용하지 않아야하는 이유는 무엇일까? 가장 작은 타입의 집합과, 가장 ..

var, let, const의 차이 (자바스크립트 ES6)

자바스크립트 ES5까지 변수를 선언할 수 있는 유일한 방법은 var을 사용하는 것이었다. 그러나, 다른 var 키워드는 다른 언어와는 다른 특별한 특징들이 있어, 주의를 기울이지 않으면 몇가지 부작용이 발생할 수 있다. 따라서 이러한 단점을 보완하기 위해서 ES6에서는 새로운 변수 선언 키워드인 let, const를 도입하였고, 이 글에서는 이 세가지 키워드에 따른 작동 방식 및 차이에 대해서 소개하려고 한다. Var 키워드의 특징 1. 중복 선언 허용 var 키워드로 선언된 변수는 같은 스코프 내에서 중복 선언이 허용된다. 따라서 의도치 않게 변수값이 재할당될 수 있다. var x = 1; var y = 2; console.log(x); // 2 2. 함수 스코프 var 키워드로 선언한 변수는 오로지 ..

자바스크립트에서의 함수, 동작 방식

프로그래밍 언어에서의 함수는 일련의 과정을 statement로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다. 함수 내부에는 매개변수와 반환값으로 구성되어 있다. 함수를 사용하게 되면 필요할 때 여러번 호출할 수 있어 코드의 재사용 측면에서 유리하다. 코드를 재사용하게 된다면 유지보수가 편하고, 코드의 신뢰성과 가독성 면에서 유리하다. 함수 정의 방법 자바스크립트에서 함수를 정의하는 방법은 크게 4가지가 있다. function add(x, y) { return x + y; } // 1. 함수 선언문 var add = function(x, y) { return x + y; } // 2. 함수 표현식 var add = new Function('x', 'y', 'return x+y'); //..

자바스크립트에서 undefined와 null의 차이

var score; 다음과 같이 변수를 선언할 때, 자바스크립트는 해당 메모리 공간을 undefiend로 초기화한다. 따라서 변수를 선언한 이후 값을 할당하지 않으면, undefined가 반환된다. 따라서, 변수를 참조했을 때 undefined가 반환된다면, 선언 이후 값이 할당된 적 없는 초기화되지 않은 변수라는 것을 알 수 있다. null은 이와 다르게 변수에 값이 없다는 것을 명시하고 싶을 때 사용해야 한다. 변수에 null을 할당하는 것은 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것이며, 자바스크립트 엔진은 이 공간에 대해 가비지 콜렉션을 수행할 것이다. 예시로, document.querySelector 메서드는 조건에 부합하는 HTML 요소를 검색할 수 없을 경우 null을 반..

자바스크립트에서의 변수 선언, 호이스팅, 동작 방식과 그 원리

변수 선언 변수 선언이란, 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결하여 값을 저장할 수 있도록 준비하는 것이다. 변수 선언에 의해 확보된 메모리 공간은 확보가 해제되기 전까지는 누구도 확보된 메모리 공간을 사용할 수 없도록 보호된다. var, let, const 키워드를 사용하여 변수 선언 한다. let, const 키워드는 var 키워드의 여러 단점을 보완하기 위해서 ES6에서 도입되었다. 변수 선언을 할 때 자바스크립트 엔진에서 하는 일 var score; 선언 단계 : 변수 이름을 실행 컨텍스트에 키/값 형식인 객체로 등록한다. 자바스크립트 엔진에 변수의 존재를 알린다. 초기화 단계 : 값을 저장하기 위해 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기..

자바스크립트의 역사, 특징, 관련 용어 정리

자바스크립트의 역사 태초의 웹 페이지 로딩 방식 => html태그로 시작해서 html 태그로 끝나는 완전한 HTML 코드를 서버로부터 전송받아 웹 페이지 전체를 렌더링하는 방식 화면 전환이 될 때, 변경필요가 없는 부분까지 필요한 HTML 코드를 다시 전송받기 때문에 성능적으로 불리하다. Ajax의 등장 => 서버로부터 필요한 데이터만 전송받아 변경해야 하는 부분만 한정적으로 렌더링하는 방식 웹 브라우저에서 빠른 성능과 부드러운 화면 전환이 가능해졌다. SPA 프레임워크의 등장 SPA란? Single Page Application의 약자로, 단일 페이지 어플리케이션을 의미한다. 웹 사이트 전체 페이지를 하나의 페이지에 담아 동적으로 화면을 변경해 표시해주는 기술로, 매번 새롭게 페이지를 렌더링해서 제공해..

[클린코드] 1. 깨끗한 코드란 대체 무엇인가?

이 글은 클린코드(애자일 소프트웨어 장인 정신)-로버트 C.마틴의 책 1장 깨끗한 코드를 읽고 정리한 글입니다. 목차 코드의 중요성 나쁜 코드의 문제점 우리가 가져야 할 태도 깨끗한 코드란 대체 무엇인가? 코드의 중요성 코드는 요구사항을 상세히 표현하는 수단이다. 우리는 요구사항을 만족하는 프로그램을 구현하기 위해서 언어를 선택하고, 해당 언어를 사용하여 코드를 짠다. 프로그래밍 언어의 추상화 수준은 점차 높아지고 있지만, 코드가 사라지진 않을 것이다. 예를 들어서 여러 추상화되어 제공되는 자료구조 (heap, list등), 머신러닝을 위한 tensorflow library 등에서는 이미 우리가 짜야하는 상당한 수준의 코드를 추상화 해놓았다. 그러나, 그렇다고 해서 짜야하는 코드의 양이 아예 사라지지는 ..

[Kotlin in Action] 애노테이션과 리플렉션

이 포스팅은 Kotlin in Action 책의 10장을 정리한 글 입니다. Annotation과 Reflection을 사용하면 실행 시점에 컴파일러 내부 구조를 분석할 수 있다. 10.1 애노테이션 선언과 적용 10.1.1 애노테이션 적용 자바와 똑같은 방식으로 @를 붙여서 사용 @Deprecated("Use removeAt(index) instead", ReplaceWith("removeAt(index)")) fun remove(index: Int) { ... } 자바와의 차이 클래스를 애노테이션 인자로 지정할 때 @MyAnnotaion(MyClass::class) 인자로 들어가는 애노테이션의 이름 앞에는 @를 넣지 않는다. 배열을 인자로 지정하려면 arrayOf 함수를 사용한다. 어노테이션 인자는 ..

[Kotlin in Action] 컬렉션과 배열, (MutableCollection, 자바와의 관계)

6.3 컬렉션과 배열 코틀린의 컬렉션 지원과 자바와 코틀린 컬렉션 간의 관계 6.3.1 널 가능성과 컬렉션 List와 List?의 차이 (1) : 리스트 자체는 널이 아니다. 리스트에 들어있는 각 원소는 널이 될 수 있다. (2) : 리스트 자체가 널이 될 수 있다. 리스트에 들어있는 원소는 널이 될 수 없다. 널 값 거러내기 // List -> List val validNumbers = numbers.filterNotNull() 6.3.2 읽기 전용과 변경 가능한 컬렉션 kotlin.collections.Collection : 컬렉션 안의 데이터 접근 kotlin.collections.MutableCollection : Collection 인터페이스 확장 & add, remove, clear 메소드 제..

[Kotlin in Action] 코틀린의 원시 타입, Any, Unit, Nothing 타입

6.2 코틀린의 원시 타입 코틀린에서는 널이 될 수 있는지 여부를 타입 시스템에 추가함으로써 컴파일러가 컴파일 시 미리 감지하여 발생할 수 있는 예외의 가능성을 줄일 수 있다. 6.2.1 원시 타입: Int, Boolean 등 Java에서 원시 타입과 참조 타입의 차이 : 변수가 직접 들어가는 지 / 메모리상의 객체 위치가 들어가는 지 Integer는 래퍼 타입으로 메소드 등을 호출할 수 있다. Kotlin에서는 구분이 없고, 원시 타입에 대해 메소드를 호출할 수 있다. 대부분의 경우 자바 int 타입으로 컴파일 된다. 불가능할 경우 (컬렉션 사용 등) Integer 래퍼 타입으로 객체가 들어간다. 6.2.2 널이 될 수 있는 원시 타입: Int?, Boolean? 등 자바의 래퍼 타입으로 컴파일된다. ..