분류 전체보기
-
이펙티브 타입스크립트- 4장 타입설계 (2)TypeScript 2022. 4. 25. 23:37
아이템 31. 타입 주변에 null 값 배치하기 strictNullChecks 설정을 한 경우 null이나 undefined에 대한 처리가 많아 지지만 null에 대한 문제점을 찾을 수 있기에 꼭 필요하다. function extend(nums: number[]) { let min, max; // type : undefined for(const num of nums) { if(!min) { min = num; max = num; } else { min = Math.min(min, num); max = Math.max(max, num); // error : max is undefined } return [min, max]; } 위 코드는 타입 체커를 통과하고(strictNullChecks없이), 반환 타..
-
이펙티브 타입스크립트- 4장 타입설계 (1)TypeScript 2022. 4. 24. 22:10
아이템 28. 유효한 상태만 표현하는 타입을 지향하기 타입을 잘 설계하면 코드를 직관적으로 작성할 수 있는 반면 엉망이라면 어떠한 기억이나 문서도 도움이 되지 못한다. 아래의 예시를 통해 잘못된 타입 설계를 알아보자. 예시는 페이지를 선택하면 페이지의 내용을 로드하고 화면에 표시한다. interface State { pageText: string; isLoading: boolean; error?: string; } //페이지 그리는 함수 function renderPage(state: State) { if(state.error) { return `Error!` } else if (state. isLoading) { return `Loading` } return `Render` } // 위 코드의 문제점..
-
이펙티브 타입스크립트- 3장 타입추론 (5)TypeScript 2022. 4. 23. 11:34
아이템 26. 타입 추론에 문맥이 어떻게 사용되는지 이해하기 타입스크립트는 타입을 추론할 때 단순히 값만 고려하지 않고 값이 존재하는 곳의 문맥까지 살핀다. 그런데 문맥을 고려해 타입을 추론하면 가끔 값이 이상하게 나온다. function setLanguage(language) { /*...*/ } setLanguage('JavaScript'); // 정상 let language = 'JavaScript'; setLanguage(language); // 정상 type Language = 'JavaScript' | 'TypeScript' | 'Python'; function setLanguage(language: Language) { /*...*/ } setLanguage('JavaScript'); /..
-
이펙티브 타입스크립트- 3장 타입추론 (4)TypeScript 2022. 4. 18. 20:55
아이템 24. 일관성 있는 별칭 사용하기 객체의 프로퍼티를 코드 내에서 간결하게 사용하기 위해 별칭(Alias)을 추가하는 경우, 일관되지 않은 이름으로 혼란을 줄 수 있다. function isPointInPolygon(polygon: Polygon, pt: Coordinate) { const box = polygon.bbox; // bbox, box라는 서로 다른 이름이 쓰이고 있다. if (box) { // ... } } 일관된 이름을 사용하기 위해서는 구조분해 할당(destructuring)을 사용하는 것이 좋다. 단, 여전히 별칭을 사용하고 있기 때문에, polygon.bbox와 지역변수 bbox의 타입은 같더라도 값은 서로 달라질 수 있다는 점을 알아두자. function isPointIn..
-
[04.완전탐색] k번째 큰 수알고리즘 2022. 4. 17. 22:53
문제 현수는 1부터 100사이의 자연수가 적힌 N장의 카드를 가지고 있습니다. 같은 숫자의 카드가 여러장 있을 수 있습니다. 현수는 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록하려 고 합니다. 3장을 뽑을 수 있는 모든 경우를 기록합니다. 기록한 값 중 K번째로 큰 수를 출력 하는 프로그램을 작성하세요. 만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19......이고 K값이 3이라면 K번째 큰 값 은 22입니다. ▣ 입력설명 첫 줄에 자연수 N(3
-
이펙티브 타입스크립트- 3장 타입추론 (3)TypeScript 2022. 4. 17. 17:17
아이템 22. 타입 좁히기 타입 좁히기는 타입 넓히기의 반대로 타입스크립트가 넓은 타입으로부터 좁은 타임으로 진행하는 과정이다. // 1. 가장 일반적인 예시인 null check const el = document.getElementById('foo'); // 타입이 HTMLElement | null if (el) { el // 타입이 HTMLElement el.innerHTML = 'Party Time'.blink(); } else { el // 타입이 null alert('No element #foo'); } // 2. 예외 던져서 타입 좁히기 const el = document.getElementById('foo'); // 타입이 HTMLElement | null if (!el) throw ne..
-
[04.완전탐색] 멘토링알고리즘 2022. 4. 10. 23:10
문제 현수네 반 선생님은 반 학생들의 수학점수를 향상시키기 위해 멘토링 시스템을 만들려고 합니 다. 멘토링은 멘토(도와주는 학생)와 멘티(도움을 받는 학생)가 한 짝이 되어 멘토가 멘티의 수학공부를 도와주는 것입니다. 선생님은 M번의 수학테스트 등수를 가지고 멘토와 멘티를 정합니다. 만약 A학생이 멘토이고, B학생이 멘티가 되는 짝이 되었다면, A학생은 M번의 수학테스트에서 모두 B학생보다 등수가 앞서야 합니다. M번의 수학성적이 주어지면 멘토와 멘티가 되는 짝을 만들 수 있는 경우가 총 몇 가지 인지 출력하는 프로그램을 작성하세요. ▣ 입력설명 첫 번째 줄에 반 학생 수 N(1