전체 글 43

객체 타입의 호환성

앞서 타입 계층도에 대해 설명했다. 더 상위 타입은 하위 타입에서의 업 캐스팅이 가능하며, 상위 타입에서 하위 타입으로의 다운 캐스팅은 불가능하다.그리고 이러한 특징은 객체 타입에서도 똑같이 적용된다. 예시를 보자. 코드를 보면 animal에 dog를 할당하는 것은 문제없지만, dog에 animal을 할당할 때는 에러가 발생한다.Dog 타입에 존재하는 breed가 Animal 타입에는 없기에 발생하는 것이다. 따라서, Animal 타입이 Dog 타입에 비해 더 상위 타입인 슈퍼타입이 되며 Dog 타입을 Animal 타입에 할당하는 업 캐스팅은 가능하지만, 그 반대인 다운 캐스팅은 불가능하게 된다.객체의 초과 프로퍼티 검사위에서 보듯 animal 변수에 dog 변수에 할당은 업 캐스팅이라 가능했다. 그런데..

언어/TypeScript 2024.08.13

타입의 계층

슈퍼타입과 서브타입타입스크립트의 타입은 집합 관계처럼 되어있다. 예를 들면 number 타입과 number literal 타입같은 경우 number 타입이 더 큰 범위이면서 number literal 타입을 포함하고 있다.이런 경우에 number 타입을 number literal 타입의 슈퍼타입 또는 부모타입이라고 부르고, number literal 타입을 number 타입의 서브타입 또는 자식타입이라고 부른다.타입 호환성이렇게 각 타입의 관계가 있을 때 관계에 따라 타입이 호환되거나 호환되지 않을 수가 있다. 이를 타입 호환성이라 한다.아까 number 타입을 예로 들면 number 타입은 서브타입인 number literal 타입에 호환되지 않는다. 반대로 number literal 타입은 슈퍼타입인..

언어/TypeScript 2024.08.12

타입스크립트의 타입 (2)

타입 별칭1번 정리글에서는 타입스크립트의 타입 지정을 type annotation으로만 소개했다. 이번에는 타입 별칭을 만들어서 타입 정의를 하는 방법을 소개한다. 지난번 객체 타입을 기준으로 다음과 같이 타입을 지정할 수 있다.// 타입 별칭type User = { id: number; name: string;}let user: User = { id: 1, name: "patrick",};인덱스 시그니처객체 타입을 정의할 때 사용하는 유용한 방식 중 하나이다. 예를 들어 다음과 같은 객체가 있다고 가정하자.let countryCodes = { Korea: "ko", UnitedState: "us", UnitedKingdom: "uk"} countryCodes의 key는 국가명이고, valu..

언어/TypeScript 2024.08.09

타입스크립트의 타입 (1)

원시타입(Primitive Type)하나의 값만 저장하는 타입number : 숫자 타입string : 문자열 타입boolean : 논리 타입null : null 타입undefined : undefined 타입리터럴 타입값 하나가 곧 타입인 타입 리터럴은 값이라는 뜻으로 타입스크립트에서는 한 가지 값이 그 값의 타입으로 사용될 수 있다.예시)let numA: 10 = 10;let strA: "hello" = "hello";let boolA: true = true;타입 표기 방식타입스크립트에서 타입을 표기하는 가장 기본적인 방법으로 type annotation 방식이 있다.위에 리터럴 타입의 예시처럼 변수 옆에 표기하는 방식으로 type annotation 방식이라고 부른다.배열 타입배열 타입을 표기하는 방..

언어/TypeScript 2024.08.08

프로그래밍 언어의 타입 시스템

모든 프로그래밍 언어는 타입 시스템을 가지고 있다타입 시스템이란? 언어에서 사용할 수 있는 여러 가지 값들을 어떤 기준으로 묶어 규정할 것인가?코드의 타입을 언제 검사할지?어떻게 검사할지?위와 같이 프로그래밍 언어를 사용할 때 타입과 관련해서 지켜야할 규칙들을 모아둔 체계타입 시스템의 종류정적 타입 시스템 : 코드 실행 이전 모든 변수의 타입을 고정적으로 결정함(엄격하고 고정적인 시스템)C, Java동적 타입 시스템 : 코드를 실행하고 나서 그때 그때 마다 유동적으로 변수의 타입을 결정함(자유롭고 유연한 시스템)Python, JavaScript정적 타입 시스템의 경우 엄격한 검사로 실행 전에 오류를 찾아낼 수 있지만 전체적인 타이핑의 양이 너무 커진다.반면, 동적 타입 시스템은 자유롬고 타이핑이 적지만 ..

언어/TypeScript 2024.08.06

(0-1) 배낭(KnapSack) 알고리즘

개념배낭에 담을 수 있는 최대 용량이 있고, 각 물건들의 용량과 가치가 존재할 때 배낭에 담을 수 있는 최대 가치를 찾는 알고리즘기본적으로 DP 개념 응용0-1 배낭 알고리즘은 물건을 쪼갤 수 없는 상태에서의 알고리즘 풀이2차원 DP일반적인 1차원 배열의 dp가 아닌 2차원 배열로 값을 저장해야 한다.col은 배낭의 최대 무게, row는 n번째 물건으로 지정한다.각 row, col 인덱스에 저장되는 값은 j 무게까지 담을 수 있을 때 i번째 물건을 고려했을 때 얻을 수 있는 최대 가치DP 안에 DPDP 문제답게 재귀성이 존재한다. 그래서 로직을 다음과 같이 바라보는 것이 중요하다고 생각한다.최대 무게 6kg까지 수용할 수 있는 배낭에 물건을 담아 최대 가치를 찾는다.첫 번째 물건이 3kg, 4달러라면 이..

이분 탐색(Binary Search)

개념구간 내 절반을 잘라가면서 값을 찾아나가는 탐색 방법시간복잡도O(log N)전제 조건탐색하는 범위가 정렬되어 있어야 한다메커니즘탐색 범위내의 배열의 중간인덱스를 구한다.중간 인덱스의 값과 key값을 비교한다.값이 중간 값보다 작다면 왼쪽 부분을, 값이 중간 보다 크다면 오른쪽 부분을 탐색하고, 같다면 해당 인덱스를 반환한다.세부적인 탐색 방법정확한 key 값 찾기상한 값 찾기하한 값 찾기정확한 key 값 찾기이름 그대로 key 값과 정확하게 일치하는 값을 찾는 경우이다.예를 들면, [1, 2, 3, 4, 5] 중에서 3을 찾는 경우 이 방식을 사용한다.코드로 구현하면 다음과 같다.static int binarySearch(int[] arr, int key) { int left = 0; in..

네트워크의 기초

네트워크란?노드와 링크가 서로 연결되어 있으며 리소스를 공유하는 집합네트워크에서 노드란 서버, 라우터, 스위치 등 네트워크 장치를 의미하고 링크는 유선 또는 무선을 의미한다.네트워크의 처리량과 지연 시간다음 특징을 가진 네트워크가 좋은 네트워크이다.처리량이 많은 네트워크지연 시간이 짧은 네트워크장애 빈도가 적은 네트워크보안이 좋은 네트워크처리량(throughput)아래 그림으로 처리량의 의미를 한번에 이해할 수 있다. 그림은 시간과 트래픽에 따른 처리량 그래프이다. 원통 그림은 해당 네트워크에서 처리 가능한 최대 트래픽을 의미하며, 검정색 선이 해당 시간에 처리한 트래픽의 양을 의미한다. 단위는 bps(bits per second)를 사용한다. 참고로, 트래픽과 처리량은 다른 개념이다.트래픽이 많아졌다...

CS/네트워크 2024.06.26

객체지향 프로그래밍

객체지향 프로그래밍이란?객체들의 집합으로 프로그램의 상호 작용을 표현하며 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식 영어로 Object-Oriented Programming으로 작성하며, 줄여서 OOP로 표현한다.장점모듈화하기 좋다유지 보수에 용이하다단점설계에 많은 시간이 필요하다처리 속도가 다른 프로그래밍 패러다임에 비해 상대적으로 느리다예시 코드앞서 프로그래밍 패러다임 포스트에서 작성한 배열의 최댓값 찾기 코드를 객체지향 방식으로 작성하면 다음과 같다.const ret = [1, 2, 3, 4, 5, 11, 12]class List { constructor(list) { this.list = list this.mx = list.reduce((max, num) =>..

프로그래밍 패러다임

프로그래밍 패러다임이란?프로그래머에게 프로그래밍의 관점을 갖게 해주는 개발 방법론패러다임의 분류선언형 프로그래밍함수형 프로그래밍명령형 프로그래밍객체지향형 프로그래밍절차지향형 프로그래밍선언형과 함수형 프로그래밍선언형 프로그래밍(declarative programming)이란 "무엇을" 풀어내는가에 집중하는 패러다임이다. "프로그램은 함수로 이뤄진 것이다"라는 명제가 담겨 있다. 함수형 프로그래밍은 선언형 패러다임의 일종으로, 일반적으로 선언형 프로그램을 언급하면 함수형 프로그래밍을 의미하기도 한다.예시 코드const list = [1, 2, 3, 4, 5, 11, 12]const ret = list.reduce((max, num) => num > max ? num : max, 0)console.log(re..