Prog. Langs & Tools

    [이펙티브 타입스크립트] 3장 타입 추론

    타입스크립트는 타입 추론을 적극적으로 수행한다. 타입 추론은 수동으로 명시해야 하는 타입 구문의 수를 엄청나게 줄여 주기 때문에, 코드의 전체적인 안정성이 향상된다. 숙련된 타입스크립트 개발자는 비교적 적은 수의 구문을 사용한다. 반면, 초보자의 코드는 불필요한 타입 구문으로 도배되어 있다. 이번 장을 읽고 나면 타입스크립트가 어떻게 타입을 추론하는지, 언제 타입 선언을 해야 하는지, 타입 추론이 가능하더라도 명시적으로 타입 선언을 작성하는 것이 필요한 상황은 언제인지 잘 이해할 수 있다. 아이템 19. 추론 가능한 타입을 사용해 장황한 코드 방지하기 타입 추론이 된다면 명시적 타입 구문은 필요하지 않다. 오히려 방해가 될 뿐이다. let x: number = 12; // 굳이? let x = 12; /..

    [이펙티브 타입스크립트] 2장 타입스크립트의 타입 시스템

    아이템 6. 편집기를 사용하여 타입 시스템 탐색하기 편집기를 사용하면 어떻게 타입 시스템이 동작하는지, 그리고 타입스크립트가 어떻게 타입을 추론하는지 개념을 잡을 수 있다. 아이템 7. 타입의 값들이 집합이라고 생각하기 런타입에 모든 변수는 자바스크립트 세상의 값으로부터 정해지는 각자의 고유의 값을 가진다. 코드가 실행되기 전, 타입스크립트가 오류를 체크하는 순간에는 타입을 가지고 있다. 가장 작은 집합은 아무 값도 포함하지 않는 공집합이며, 타입스크립트에서는 never 타입이다. never 타입으로 선언된 변수의 범위는 공집합이기 때문에 아무런 값도 할당할 수 없다. 그 다음으로 작은 집합은 한 가지 값만 포함하는 타입이다. 이들은 타입 스크립트에서 유닛(unit) 타입이라고도 불리는 리터럴(liter..

    Merge vs Rebase

    깃에서 다른 사람의 코드에 내 코드를 통합할 때(integration) 쓰는 대표적인 두 가지 방법을 비교해 보고 언제 어떤 방식을 써야 하는지 알아 보려고 한다. 머지(Merge) 머지(병합, merge) 는 두 개 이상의 개발 히스토리를 하나로 합치는 작업을 의미한다. merge를 하게 되면 각각의 개발자가 작업한 히스토리가 모두 보존(preserve)된다는 특징이 있다. 예제를 한 번 살펴보자. 두 명의 개발자 Ada와 Satoshi가 각각 feature-1, feature-2를 작업한다. Ada는 작업을 완료해서 master 브랜치에 머지를 한 상태고, 이후 Satoshi가 master 브랜치는 feature-2 브랜치에 머지를 한다고 가정해 보자. 결과는 다음과 같다. Satoshi가 작업한 C..

    [이펙티브 타입스크립트] 1장 타입스크립트 알아보기

    아이템 1. 타입스크립트와 자바스크립트 관계 이해하기 타입스크립트는 문법적으로 자바스크립트의 상위집합. → 자바스크립트 프로그램에 문법 오류가 없다면, 유효한 타입스크립트 프로그램이라고 할 수 있다. → 자바스크립트 프로그램에 어떤 이슈가 존재한다면 문법 오류가 아니라도 타입 체커에게 지적당할 가능성이 높다. → 문법의 유효성과 동작의 이슈는 독립적인 문제 타입 시스템의 목표 중 하나는 런타임에 오류를 발생시킬 코드를 미리 찾아내는 것이다. → 그러나 타입 체커가 모든 오류를 찾아내지는 않음 → 타입 체커를 통과하면서 런타임 오류를 발생시키는 코드는 충분히 존재. 타입스크립트 타입 시스템은 자바스크립트의 런타임 동작을 '모델링' 한다. const x = 2 + '3'; // 정상, string const..

    [패캠] 데이터 사이언티스트 하용호님 강의 요약 정리

    최근에 패스트캠퍼스 더 레드 강의를 하나 들었다. 나는 사실 데이터 사이언티스트는 아니고, 이 강의를 실무에서 당장 쓸 일이 있어서 듣게 된 것은 아니다. 사실 회사에서 데이터 팀이 제대로 잘 꾸려져 있지 않은 상황에서 일을 하다보니 더 결핍을 느끼는 것일 수도 있는데, 데이터를 어떻게 모아야 하고 봐야 하는지에 대해서 궁금했다. 그리고 이걸 어떻게 비즈니스를 가속화 하는데 잘 사용할 수 있을지에 대해서도 막연하게만 듣기만 했지 조금 실질적인 방법들에 대해서는 아직 지식과 경험이 부족함을 느꼈다. 그래서 이번 강의를 수강하게 되었고, 주요 내용들을 간단하게 정리해 보려고 한다. (패스트캠퍼스에서 유료로 판매중인 강의고, 나도 직접 비용을 지불하고 들었으며, 저작권 이슈도 있기 때문에 모든 내용을 자세하게..

    [C++] Ch15. 스마트(Smart) 포인터

    이번 포스팅에서는 포큐 아카데미 C++ 강의 중 스마트 포인터 부분에 대한 내용을 정리해 보려고 한다. 스마트 포인터에는 다음과 같이 세 가지가 있다. unique_ptr, shared_ptr, weak_ptr. 이 중에서 unique_ptr는 정말 많이 쓰이고, shared_ptr는 적당히 쓰이며, weak_ptr는 잘 쓰이지 않는다. 포인터는 다음과 같이 사용할 수 있다. #include "Vector.h" int main() { Vector* myVector = new Vector(10.f, 30.f); // ... delete myVector; return 0; } 문제는 더 이상 포인터가 필요하지 않을 때 메모리를 해제해야 한다. 스마트 포인터를 쓰면, delete를 직접 호출할 필요가 없다. ..

    [C++] Ch14. C++ 최신 문법 - Part2

    지난 포스팅에 이어서 C++ 최신 버전에서 추가된 문법들에 대해서 공부한 내용을 정리해 보려고 한다. 새로운 자료형 nullptr NULL을 쓰면 가끔 이상한 일이 발생된다. C++에서 NULL은 어떤 타입이 아니라 0이다. 따라서 함수를 호출할 때 적합하지가 않다. 따라서 nullptr가 등장하였다. nullptr는 null 포인터 상수이다. nullptr는 다음과 같이 사용할 수 있다. // Main.cpp Class* myClass = new Class("COMP3200"); const Student* student = myClass->GetStudent("Coco"); if (student != nullptr) { std::cout GetID()

    [C++] Ch13. C++ 최신 문법 - Part1

    이번 포스팅에서는 STL 알고리즘에 대한 간단할 설명 및 C++ 최신 문법에서 추가된 키워드, 자료형, STL 등에 대해서 알아보고자 한다. STL 알고리즘 STL 알고리즘이란 요소 범위에서 쓸 수 있는 함수들을 의미한다. 따라서 배열 또는 몇몇 STL 컨테이너에서 쓸 수가 있다. 이 때 반복자를 통해 컨테이너에 접근한다. 컨테이너의 크기를 변경하지 않기 때문에 추가 메모리 할당도 없다. 유형별로 다음과 같이 호출하는 include 문이 다르다. #include 변경 불가 순차(sequence) 연산 : find(), for_each() 변경 가능 순차 연산 : copy(), swap() 정렬 관련 연산 : sort(), merge() #include 범용 수치 연산 : accumulate() 예를 들어..