프로그래밍 언어 50

TS 데코레이터

데코레이터는 TS에서 사용 가능한 특정 형식의 함수이다. 데코레이터는 아직 완전한 기능이 아니지만, Angular 및 nestjs에서 도입하여 사용중인 기능이다. 아직 완전한 기능이 아니기 때문에 tsconfig.json 파일에 "experimentalDecorators" : true 값을 주어야 데코레이터가 잘 작동한다. 특정 형식의 함수라고 하면 솔직히 이해가 잘 안된다. 뒤에 나올 사용 범위 앞(위)에 데코레이터를 붙여서 이미 선언된 함수, 프로퍼티, 메소드 등을 수정해 주는 함수라고 생각하면 된다. 데코레이터 사용 범위 데코레이터는 다음에 적용 가능한 특정 형식의 함수이다.' 1. Class -> 클래스 선언 전에 사용해서 클래스의 생성자와 프로토타입을 수정할 수 있다. 2. Class Prope..

TS 클래스 다중 상속하기

TS는 기본적으로 클래스 상속을 지원한다. 클래스 상속은 다음과 같이 사용할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 class A { numA: number; } class B extends A { numB: number; } const newClass = new B(); newClass.numA = 1; newClass.numB = 2; cs 위의 경우에는 클래스 B에서 클래스 A를 상속받아 최종적으로 클래스B에는 numA 와 numB가 모두 들어간 것을 볼 수 있다. 하지만 TS에서는 한 개의 클래스에 대해서는 상속이 가능하나, 여러개의 클래스 상속(다중 상속) 은 안타깝게도 지원하지 않는다. 그렇다면 다중 상속을 사용할 경우에는 어떠한 식으로 접근해야 할까? 답은 mixin을 이..

현업에서 자주 쓰이는 git 명령어 정리

git은 좋은 코드 버전 관리 도구이다. 공동 작업을 github를 이용하여 자주 하다보니 처음에는 모르는 것도 많고 실수 투성이였으나, 시간이 지날수록 git은 좋은 도구라는 것을 알게 되었다. git을 사용하면서 유용했던 cli 명령어를 정리해 보았다. 저장소 관련 명령어 git을 사용할려면 해당 프로젝트의 최상위 폴더에다 git 설정을 해 주어야 한다. git에 관한 설정이 들어있는 폴더는 .git 이다. 다음과 같은 명령어를 통해 git 저장소를 새로 만들어 보자. 1 2 3 4 git init git branch -M main git remote add origin [remote 저장소의 ssh 주소] git push --set-upstream origin master cs 근데 사실 이런거 하..

M1 Mac VSCode에서 #include errors detected 오류 해결하기

오랜만에 기분좋게 42서울 과제를 해결하려 vscode를 실행했다. 그런데 갑자기 #include errors detected 라는 이상한 오류가 뜨기 시작했다. gcc를 이용해서 컴파일 할 때는 문제가 없었지만, 상당히 거슬렸다. 이유를 하나하나 찾아가 보았다. M1맥의 gcc 또는 g++ gcc와 g++은 각각 c언어 컴파일러, c++ 컴파일러이다. vscode에서는 c(++)에 관한 플러그인이 있는데, 이는 자동으로 컴파일러의 위치를 파악해 코드의 오류를 찾아낸다. 하지만 무슨 이유인지는 모르겠지만, M1맥 에서는 gcc(g++) 경로를 찾지 못하는 모습을 보였다. 아마도 수동으로 C/C++ Extension에 컴파일러 경로를 설정하면 될 것 같았다. 컴파일러 위치 찾기 최근에도 이걸 사용한 것 같..

맥에서 <bits/stdc++.h> 사용하기

알고리즘 문제를 풀이할 때 C++을 이용해서 푸는 경우에 bits/stdc++.h 헤더를 사용하기도 한다. 이것은 gcc 컴파일러에서만 사용할 수 있는 비표준 라이브러리이다. 위 헤더 파일은 대부분의 C++ 헤더 파일이 포함되어 있어 알고리즘 문제를 풀이할 때 헤더 파일을 여러 개 불러와야 하는 수고를 줄일 수 있다. 또한 대부분의 알고리즘 저지 사이트에서 bits/stdc++.h 를 지원하기 때문에 알고리즘 풀이에서는 문제없이 사용이 가능하다. 하지만 bits/stdc++.h 헤더 파일은 gcc 컴파일러에서만 동작한다. 리눅스 PC는 기본 컴파일러가 gcc일 것이다. 없으면 gcc 설치하면 된다. 그렇게 하면 bits/stdc++.h 를 바로 사용할 수 있다. 그러나 맥 에서는 상황이 다르다. gcc ..

vim plugin 설치하고 쉽게 관리하기

vim 플러그인 관리의 중요성 vim 은 터미널에서 실행되는 텍스트 에디터이다. vim의 장점은 알면 알수록 쓰기 쉽다는 것이며, 플러그인으로 확장할 수 있는 기능이 매우 많다. 그래서 이러한 플러그인을 검색하면은 개인 깃허브에 플러그인 파일을 올려두신 분들이 있다. 하지만 플러그인이 많아질수록 이 플러그인을 관리하기가 참 애매하다. 그래서 이러한 플러그인들을 관리하는 기능을 사용하게 된다. js로 예를 들면 npm, yarn 같은 느낌이고 python으로 예를 들면 pypy 같은 느낌이다. vim plugin 설치하기 설치하기 전에 기초 내용을 알아보자. 내가 사용할 플러그인 관리자 : vim-plug (https://github.com/junegunn/vim-plug) GitHub - junegunn..

C++ deque 자료형 사용법

STL 컨테이너를 최대한 잘 활용해보자. deque 기본 개념 vector와 비슷한 배열 개념이다. vector와 다르게 여러개의 메모리 블록을 하나의 블록처럼 여긴다. 이로 인해 삽입 연산 시에 더욱 빠른 연산이 가능하다. deque 선언 기본 선언 : deque dq; deque 함수 dq[idx] : 해당 원소 참조 dp.push(pop)_front(back)() : 맨 앞이나 맨 뒤에 데이터 삽입 혹은 제거 begin() : 첫번째 원소의 iterator 반환 end() : 마지막 다음 원소의 iterator 반환 insert(a,b) : a에 b를 삽입 후 삽입한 곳의 iter 반환 erase(a) : a(iter) 가 가리키는 원소 제거, 제거 후 앞 뒤 원소 개수 판단하여 적은쪽 원소를 당긴..

C++ list 자료형 사용법

백준 문제를 풀다가 왠지 배열로 풀면 시간초과가 날 것 같고, 벡터로 풀기 애매한 문제가 있었다. 그래서 링크드 리스트를 기반으로 한 STL 컨테이너를 찾다가, 비교적 적절한 방법을 발견했다. 바로 list를 이용하는 것이다. list 기본 개념 list는 기본적으로 양방향 링크드 리스트 구조를 가지고 있다. 그래서 쉽게 붙이고, 잘라낼 수 있다. 하지만 인덱스로 찾는 것이 불가능 (예 : at, [] ) 하다. 그래서 iterator를 이용하여 탐색을 해야 한다. list 선언 1. 기본 선언 -> list l ; list 함수 assign(a, b) : b값을 가진 a개 원소 할당 insert(a, b) : iter a 의 위치에 b 삽입 begin() : 시작 iter 반환 end() : 마지막 i..

C++ map 자료형 사용법

set 자료형에 이어서 map 자료형도 존재한다. 혹시나 사용할 일이 있을 때 사용하려고 정리해 두려고 한다. set 기본 개념 set 자료형 과는 다르게, set은 한 개의 자료형을 담을 수 있으나 map은 한 개의 인덱스에 두 개의 자료형을 정리할 수 있다. (예시 ) 구조는 트리 구조로 되어 있으며, 값이 중복될 수 없다. map 선언 1. 기본 선언 -> map m; map 함수 https://www.cplusplus.com/reference/map/map/ map - C++ Reference difference_typea signed integral type, identical to: iterator_traits ::difference_type usually the same as ptrdiff_..

C++ set 자료형 사용법

백준 1525 (https://www.acmicpc.net/problem/1525) 문제를 풀다가 현재 내가 아는 자료형으로 풀기 힘들다는 생각이 들어서 구글링을 하다가 set 이라는 자료형을 찾아냈다. 중복되지 않는 무언가를 저장할 때 매우 유용해 보인다. set 자료형에 대해서 간단히 알아보자. set 기본 개념 set은 노드 기반 컨테이너이다. 원소들은 중복이 허용되지 않으며, 원소 삽입 시 원소는 자동으로 정렬이 된다. 기본 정렬 기준은 오름차순이다. set 선언 1. 기본 선언 하기 -> set s; 2. 정렬 기준 세우기 -> set s; pred는 정렬 기준을 바꾸기 위한 구조체이다. 기본은 less, 내림차순으로 바꾸고 싶으면 greater로 바꾸면 된다. 그 이외의 정렬 기준을 세우고 싶..