
코드 스니펫이란?
스니펫 [Snippet]은 재사용 가능한 소스 코드, 기계어, 텍스트의 작은 부분을 일컫는 프로그래밍 용어이다. 사용자가 루틴 편집 조작 중 반복 타이핑을 회피할 수 있게 도와준다.
쉽게 말해 자주 쓰는 코드를 저장해 두었다가 지정한 명령어로 불러오는 방법이다.
{
"스니펫 이름" :{
"scope": "사용언어",
"prefix": "스니펫을 선택할 때 사용되는 약어",
"body":[
"내용 1",
"내용 2",
"한줄에 하나씩"
],
"description": "스니핏에 대한 설명"
}
}
기본 형식은 위와 같다. json 형식으로 작성이 되고, scope에 사용언어 [C, C++, Python 등]을 적고 prefix에는 이 코드 스니펫을 호출할 명령어를, body에는 코드 스니펫이 호출되었을 때 불러올 코드를 적으면 된다. description은 이 스니펫에 대한 설명이지만 코드에 직접적인 영향은 주지 않는다.
prefix에 적은 단어를 코드 입력창에 적으면 스니펫 이름이 옆에 뜨고 Tab을 누르게 되면 코드 입력창에 body에 적어 놓은 코드가 자동으로 생성되게 된다.
위치

VSCode - 파일 - 기본 설정 - 사용자 코드 조각 구성의 경로로 들어가게 되면

이러한 선택창이 뜨게 된다. 여기서 Baekjoon.code-snippets는 옆에 기존 코드 조각이라고 나와있듯이 이미 만들어져 있는 코드 스니펫이고 밑에 새 전역 코드 조각 파일을 선택하게 되면 중괄호로 둘러싸여 있고 내부에 주석으로 설명이 적힌 파일이 생성 되게 된다.
그러면 그 파일의 중괄호 내부에 구현하고자 하는 내용을 구현하면 된다.
구현
나 같은 경우, 백준 문제를 C++로 풀 때 다음과 같은 형식을 자주 쓴다.
/*
# Question:
# Rank:
# Algorithm:
*/
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <stack>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int INF = 987654321;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
return 0;
}
라이브러리의 경우 더 있지만, 생각날 때마다 그때그때 추가할 것이고 일단은 이런 기본적인 틀로 문제를 풀기 시작한다. 이를 코드 스니펫으로 구현하기 위해 옮겨적으면 아래와 같다.
{
"BAEKJOON C++": {
"scope": "cpp",
"prefix": "Baekjoon",
"body": [
"/*",
"# Question: BJ (https://www.acmicpc.net/problem/)$1",
"# Rank: $2",
"# Algorithm: $3",
"*/",
"#include <iostream>",
"#include <vector>",
"#include <algorithm>",
"#include <queue>",
"#include <stack>",
"#include <cstring>",
"#include <cmath>",
"using namespace std;",
"typedef long long ll;",
"const int INF = 987654321;",
"",
"int main() {",
"\tios::sync_with_stdio(false);",
"\tcin.tie(NULL);",
"\tcout.tie(NULL);",
"\t$4",
"\treturn 0;",
"}"
],
"description": "Code Template for Baekjoon, C++"
}
}
이렇게 하고난 뒤, 실제 cpp파일에서 실행을 해보았다.

B를 입력하자마자 BAEKJOON C++라고 Baekjoon이 뜨는 것을 확인할 수 있다. 이렇게 body 부분에 입력한 코드가 자동으로 입력되는 것을 알 수 있다.
여기서 Tab을 누르게 되면,

이렇게 body 부분에 입력한 코드가 자동으로 입력되는 것을 확인할 수 있다.
결론
코드 스니펫의 최대 장점은 반복되는 코드를 입력하는 작업을 자동화함으로써 코드 구현 시간을 최소화할 수 있다는 점이다. 그러나, 매번 똑같은 라이브러리를 import하고 똑같은 자료형과 매크로함수를 쓰는 것이 아니기 때문에 그때그때 주석처리를 해줘야한다는 번거로움도 존재한다.
하지만, 그런 번거로움 보다도 시간 단축이라는 최대 장점이 코드 스니펫을 이용하는 이유이지 않을까 싶다.