전체 글

주저리주저리
Frontend/TypeScript

[TS] 제너릭

function hello(arg: any): any { return arg; } 인수에 관계 없이 그 값을 returng하는 함수 hello를 만든다고 하자. JS에서는 타입 구분이 크지 않기에 상관 없지만, TS에서는 타입을 구분되어 있기 때문에 인수에 관계 없이 값을 가져오기 위해서는 인수에 들어올 수 있는 모든 타입을 지정해주어야한다. 이는 몹시 귀찮고 힘들다. 다른 방법으로는 any 타입을 이용해 인수를 받을 수 있지만 인수가 any 타입으로 불러와지기 때문에 인수가 원래 어떤 자료형이었는지 대한 정보를 잃어버린다. 귀찮지도 않고 원본 자료형에 대한 정보를 둘 다 처리할 수 있는 방법이 제너릭(Generic)이다. function hello(arg: T): T { return arg; } 제너릭..

Frontend/TypeScript

[TS] export/import & type-only export/import

export/import StringValidator.ts expoer interface StringValidator { isAccetable(s: string): boolean, } ZipCodeValidator.ts import { StringValidator } from "./StringValidator" 위와 같이 module을 export하고 import 해올 수 있다. type-only export/import 타입 스크립트는 import 해올 때 type도 자동으로 import 해오기 때문에 런타임에서 type만 import 해오는 문장은 지워버린다. 때문에 문장만 가지고 type인지 value인지 알 수 없을 경우 문제가 발생할 수 있다. 그래서 TypeScript 3.8부터 type만 e..

Frontend/TypeScript

[TS] Interface & Class

본 글은 노마드코더의 TypeScript로 블록체인 만들기 강의를 보고 작성하는 글입니다. Interface const person = { name: "Lee", age: 22, gender: "male", }; const sayHi = (person): string => { return `Hello ${person.name}, You are ${person.age} and ${person.gender}`; }; console.log(sayHi(person)); export {}; index.ts 타입스크립트는 변수에 타입을 지정해서 변수에 들어가는 실제 자료가 변수의 자료형과 일치하는지 검사하는 역할을 한다고 했다. 그렇다면 object를 넘겨줄 때는 object가 내가 생각하는 object와 일치하는..

Frontend/TypeScript

[TS] 타입 스크립트의 타입

타입 선언 타입 스크립트는 일반 변수, 매개 변수, 객체 속성 등에 :TYPE과 같은 형태로 타입을 지정한다. let variable: string = "Hello World!" 타입 종류 타입스크립트는 자바스크립트와 거의 동일한 타입을 가지나 타입스크립트 고유의 타입 역시 포함한다. 타입 JS TS boolean O O Number O O String O O Array O Tuple O Enum O Any O Void O Null and Undefined O O Never O object O O 1. boolean let TFVariable: boolean = true; 2. number 자바크립트와 마찬가지로 타입스크립투도 부동 소수값, let decimal: number = 6; // 십진법 : 6..

Frontend/TypeScript

[TS] TypeScript Install & Setting

본 글은 노마드코더의 TypeScript로 블록체인 만들기 강의를 보고 작성하는 글입니다. 더보기 사실 실무에서 일하시는 분이 TypeScript를 빠르게 배워 적용하기에 적절한 강의는 아니라고 하셨지만 Interface 같은 내가 스쳐가며 보여 이게 뭐지? 했던 개념을 소개해주는 것이 들어볼만하고 생각했고, 강의도 1시간이라 블록체인 만드는 부분 전까지만 간단하게 들으면 괜찮을 것 같아서 수강 결정! JS도 못하는데 TS를 듣는게 꺼려졌지만 프로젝트에서 필요하다고 해서 강제로 배워야한다.... 백엔드와 데이터를 주고받는 과정에서 타입이 정해지기 때문에 결국 TS를 써야한다고 하시더라........ TS는 왜 등장했는가? JS에는 엄격한 규칙이 없고 이는 개발자가 개발하기 쉽고, 수정하기 쉽도록 만들었다..

알고리즘/Python

[python] 프로그래머스 - 괄호 회전하기

출처 : 프로그래머스 코딩테스트 연습, https://programmers.co.kr/learn/courses/30/lessons/76502 코딩테스트 연습 - 괄호 회전하기 programmers.co.kr 더보기 풀이 from collections import deque def solution(s): s = deque(list(s)) count = 0 for i in range(len(s)): s.rotate() stack = [] for par in s: if par == '(' or par == '{' or par == '[': stack.append(par) else: if len(stack)

알고리즘/Python

[python] 프로그래머스 - N개의 최소공배수

출처 : 프로그래머스 코딩테스트 연습, https://programmers.co.kr/learn/courses/30/lessons/12953 코딩테스트 연습 - N개의 최소공배수 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배 programmers.co.kr 더보기 풀이 def solution(arr): #100 이하의 모든 소수 구하기 prime = set(range(2, 100)) for i in range(2, int(100**0.5) + 1): prime -= set(range(i*2, 100, i)) prime = list(p..

알고리즘/Python

[python] 프로그래머스 - 거리두기 확인하기

출처 : 프로그래머스 코딩테스트 연습, https://programmers.co.kr/learn/courses/30/lessons/81302 코딩테스트 연습 - 거리두기 확인하기 [["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1] programmers.co.kr 더보기 풀이 def solution(places):..

Frontend/JavaScript - ES6

[JS] nullish 병합 연산자 ??

nullish 병합 연산자 ?? ??을 사용하면 여러 피연산자 중 값이 '확정되어 있는' 변수를 찾을 수 있다. 예를 들어 x = a ?? b 라는 코드는 a가 null이나 undefined가 아니면 a 그 외에는 b 라는 의미를 나타낸다. 이는 아래 코드와 같다. x = (a !== null && a !== undefined) ? a : b; 값을 여러개 나열하여 정의된 값을 찾아낼 수도 있다. x = a ?? b ?? c 라면 null이나 undefined가 아닌 첫 번째 피연산자를 반환한다. ?? vs || ??는 or 연산자 ||과 비슷해 보이지만 차이점이 존재하는데 ||는 첫 번째 truthy 값을 return하는 반면, ??는 첫번쨰로 defined된 값을 return한다. 이는 0과 null..

Frontend/JavaScript - ES6

[JS] 옵셔널 체이닝 (Optional Chaning)

let user = {}; console.log(user.id); 다음과 같은 코드가 있다고하자. user는 빈 객체이므로 console.log에서는 오류가 난다. 이를 오류 없이 해결할 수 있는 방법이 optional chaning이다. 옵셔널 체이닝 옵셔널 체이닝은 ?.로 사용하며 앞의 대상이 undefined거나 null이면 undefined를 return한다. 예를 들어 let user = {}; console.log(user?.name?.first); //undefined 위와 같이 작성하면 user에서 존재 여부를 확인하고 user는 존재하기 때문에 다음으로 넘어간다. name?에서는 user 객체 내에 name 속성이 존재하지 않기 때문에 멈추고 undefined를 return한다. 따라서 ..

알고리즘/Python

[python] 프로그래머스 - 게임 맵 최단 거리

출처 : 프로그래머스 코딩테스트 연습, https://programmers.co.kr/learn/courses/30/lessons/1844 코딩테스트 연습 - 게임 맵 최단거리 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1 programmers.co.kr 더보기 첫 번째 풀이 : 실패 from collections import deque def solution(maps): n = len(maps) m = len(maps[0]) queue = deque() queue.append((0, 0, 0)) while queue: ..

알고리즘/알고리즘

Recursion(재귀)

본 글은 인프런의 영리한 프로그래밍을 위한 알고리즘 강좌를 듣고 정리하는 글입니다. 순환(재귀) 함수란? 함수가 자기자신을 호출하는 함수의 형태 def function(...){ ... function(...); ... } 순환 함수는 무한루프에 빠지는가? 재귀함수는 자기 자신을 호출하기 때문에 무한 루프에 빠지기 쉬운 구조를 가진다. 때문에 무한루프를 피하기 위해서는 아래와 같은 두 가지 조건을 만족해야한다. 1. Base case(종료 조건) : 적어도 하나는 recursion에 빠지지 않는 경우가 존재해야한다. 2. Recursive case : 모든 Case는 Recursion을 반복하다 Base Case로 수렴해야한다. 순환 함수와 수학적 귀납법 func(int n)은 음이 아닌 정수 n에서 0..

제주도랏맨
제주도랏맨의 블로그