맨위로가기

스니펫

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

스니펫은 프로그래밍에서 재사용 가능한 소스 코드의 작은 부분을 의미하며, 텍스트 편집기나 통합 개발 환경(IDE)에서 사용된다. 함수나 매크로와 같은 추상화 방법과 달리, 스니펫은 추상화가 불가능하거나 불필요한 경우에 주로 사용되며, 간단한 코드 섹션, 저작권 고지, 함수 프로토타입 등에 활용된다. 스니펫은 텍스트 편집기, IDE, 셸 등 다양한 환경에서 관리 및 사용되며, 정적, 동적, 스크립트 가능 유형으로 분류된다. 스니펫은 자리 표시자를 통해 사용자 입력을 받거나 변환하는 기능을 제공하며, 코드 라이브러리, 디자인 패턴, 딥 러닝 도구 등을 통해 스니펫의 대안을 찾을 수 있다.

2. 정의

프로그래밍에서 "스니펫"은 편집기 프로그램이 파일에 직접 포함하는 소스 코드의 일부를 좁은 의미로 지칭하며, 이는 복사 및 붙여넣기 프로그래밍의 한 형태이다.[2] 이러한 구체적인 포함은 함수 또는 매크로와 같은 언어 내의 추상화 방법과는 대조적이다. 따라서 스니펫은 이러한 추상화를 사용할 수 없거나 원하지 않는 경우, 예를 들어 추상화가 없는 언어에서, 또는 명확성과 오버헤드 부재를 위해 주로 사용된다.

스니펫은 편집기에 포함된 정적 전처리 기능과 유사하며 컴파일러의 지원이 필요하지 않다. 반면에, 이는 스니펫이 사후에 변경될 수 없음을 의미하며, 따라서 복사 및 붙여넣기 프로그래밍의 모든 문제점에 취약하다. 이러한 이유로 스니펫은 주로 간단한 코드 섹션(로직이 적음)이나 저작권 고지, 함수 프로토타입, 일반적인 제어 구조 또는 표준 라이브러리 가져오기와 같은 상용구에 사용된다.

3. 스니펫 관리 기능

스니펫 관리는 소프트웨어 개발자나 보일러플레이트처럼 반복적인 텍스트 입력을 자주 하는 사람들에게 유용한 기능이다. 이 기능은 텍스트 편집기에서 지원하며, 스니펫을 별도로 관리할 수 있게 해준다.

스니펫 관리에는 스니펫 보기, 추가, 편집, 삭제, 정렬, 필터링, 그룹화, 이름 변경, 그리고 저장소데이터베이스에 저장하는 기능 등이 있다. 일부 편집기는 매크로 기능을 통해 함수 프로토타입이나 변수 제어 구조를 생성하는 기능을 제공하기도 한다.

3. 1. 텍스트 편집기의 스니펫

많은 텍스트 편집기가 스니펫 관리 기능을 내장하고 있다. 스니펫은 별도의 파일처럼 관리되며, 저장소, 카탈로그, 데이터베이스 등에 저장할 수 있다. 이러한 기본 관리 기능에는 보기, 추가, 편집, 삭제, 정렬, 필터링, 그룹화, 이름 바꾸기 등이 포함된다.[1][2][3][4] 일부 텍스트 편집기는 매크로 기능을 제공하여 표준 템플릿 기반의 함수 프로토타입 및 변수 제어 구조 생성을 지원한다.[1][2][3][4]

3. 2. IDE의 스니펫

이클립스, 넷빈즈, 마이크로소프트 Visual Studio와 같은 일부 IDE는 코드 작성을 돕기 위해 내장된 스니펫을 제공한다.[4] 이러한 IDE들은 프로그래머가 반복되는 코드 부분을 스니펫으로 저장하여 재사용할 수 있도록 돕는다.

드림위버와 같은 웹 개발 도구에서도 웹 개발을 위해 이러한 코드 스니펫을 활용한다.[4]

3. 3. JIT 컴파일러의 스니펫

JIT 컴파일러는 미리 컴파일된 코드 섹션을 더 긴 오브젝트 코드/기계어 세그먼트로 "묶을" 수 있다. 이를 통해 해석 시간이 크게 단축되고 동시에 실행 속도가 빨라진다.[1]

PowerShell ISE에서 스니펫 사용을 보여주는 애니메이션 예제

3. 4. 셸의 스니펫

bash, zsh (GNU 리눅스/유닉스 계열) 또는 powershell (MS 윈도우)과 같은 명령줄 인터페이스(셸)에서도 스니펫을 사용할 수 있다. 자동 완성 및 자리 표시자 대체와 같은 기능이 지원될 수도 있고 그렇지 않을 수도 있다.[1]

4. 스니펫의 유형

스니펫은 상호 작용 범위에 따라 일반 텍스트 또는 "정적" 스니펫, 대화형 또는 "동적" 스니펫, 스크립트 가능한 스니펫으로 분류할 수 있다.[2]

스니펫 관리 기능은 스니펫과 이를 호스팅하는 텍스트 편집기 또는 애플리케이션 간의 상호 작용 범위에 따라 분류할 수 있다.[2]

4. 1. 정적 스니펫

이 유형의 스니펫은 주로 사용자가 현재 문서에 삽입하도록 선택할 수 있는 고정 텍스트로 구성된다. 사용자는 새로 삽입된 텍스트에 대한 커서 위치를 제외하고는 아무것도 지정할 수 없다. 정적 스니펫은 간단한 매크로와 유사하지만, 매크로는 종종 IDE 대신 명령줄 프로그램에 의해 평가(또는 삽입)된다.[2]

4. 2. 동적 스니펫

동적 스니펫은 고정 텍스트와 동적 요소(자리 표시자)로 구성된다. 사용자는 동적 요소의 내용과 고정 텍스트에 대한 위치를 모두 지정하여 현재 문서에 삽입할 내용을 선택할 수 있다. 동적 요소의 예로는 현재 날짜나 시스템 시각과 같은 변수, GUI를 통해 제공되는 사용자 입력, 다른 애플리케이션으로부터의 입력 등이 있다. (참조: 프로그래밍 가능한 매크로)

4. 3. 스크립트 가능 스니펫

스니펫은 매크로 언어나 스크립팅 언어로 실행 가능한 코드 세그먼트로 구성된다. 스크립트 가능한 스니펫은 사용자에게 가장 큰 유연성을 제공하지만, 이는 텍스트 편집기에서 지원하는 프로그래밍 언어가 잘 알려져 있는지, 아니면 특정 편집기에 고유한지에 따라 다소 달라진다.

스크립팅 지원 유형은 다양하지만, 다음과 같은 기능이 포함될 수 있다.

  • 셸 명령 실행
  • GUI 대화 상자 제공
  • 운영 체제, 다른 애플리케이션 또는 호스팅 애플리케이션 자체의 다른 하위 구성 요소와의 사용자 상호 작용.

5. 스니펫 자리 표시자(Placeholder)

자리 표시자는 사용자가 제공하거나 외부 프로세스에 의해 채워지는 스니펫 내의 요소이다. 스니펫 텍스트가 삽입될 때까지는 값이 결정되지 않으며, 특수 마크업 구문을 사용하여 표시될 수 있다.

예를 들어, 두 변수 ''x''와 ''y''의 값을 바꾸는 스니펫을 생각해 보자.

```

temp = $1

$1 = $2

$2 = temp

```

여기서 `$1`과 `$2`는 자리 표시자이다. 사용자가 `$1`에 `foo`를, `$2`에 `bar`를 입력하면 다음과 같은 코드가 생성된다.

```

temp = foo

foo = bar

bar = temp

```

이후 스니펫이 변경되어 `temp` 대신 `__temp`를 사용하게 되더라도, 이미 삽입된 코드는 변경되지 않지만, 이후의 스니펫 삽입에는 변경된 내용이 적용된다.

다른 애플리케이션에서는 사용자가 자리 표시자에 값을 입력할 수 있도록 그래픽 사용자 인터페이스와 모달 대화 상자를 사용하기도 한다.

5. 1. 자리 표시자 식별자

플레이스 홀더는 사용자 또는 다른 외부 프로세스에 의해 채워질 스니펫 내의 요소이다. 플레이스 홀더 값은 편집 세션 동안 스니펫 텍스트가 삽입될 때까지 결정되지 않는다.

플레이스 홀더는 편집기가 현재 편집 버퍼의 다른 텍스트와 관련된 플레이스 홀더의 경계를 식별할 수 있도록 하는 특별한 마크업 구문을 가질 수 있다.

다른 애플리케이션은 사용자가 플레이스 홀더에 제공할 하나 이상의 값을 입력할 수 있는 그래픽 사용자 인터페이스 및 모달 대화 상자를 사용한다.

플레이스 홀더는 일반적으로 나머지 스니펫 텍스트와 구별하기 위해 특수 문자나 문자 시퀀스로 표시된다. 일부 시스템에서는 스니펫 플레이스 홀더를 식별자로 명명할 수 있는데, 이는 플레이스 홀더 중복 또는 플레이스 홀더 변환과 같은 기능을 지원하는 데 유용하다.[1]

다음은 식별자를 사용한 예시이다.

```jinja

Hello {%first_name%} {%last_name%},

Your shipment of {%item%} is now ready to pick up.

Thanks {%first_name%}!

5. 2. 자리 표시자 복제

이 기능을 사용하면 사용자는 하나의 [플레이스홀더/자리표시자]에 제공된 값이 프로그래밍 가능한 스니펫의 전체 텍스트와 관련하여 여러 위치에 복제되어야 함을 나타낼 수 있다. 예를 들어 `first_name`이라는 [플레이스홀더/자리표시자]가 이에 해당한다.

5. 3. 자리 표시자 변환

사용자가 자리 표시자에 제공한 값을 스니펫 내의 다른 위치에서 복제하고 변환할 수 있다. 예를 들어, 스니펫의 한 부분에 문서 제목을 입력하고 다른 위치에서 반복되도록 지정할 수 있는데, 첫 번째는 모두 대문자로, 나머지는 모두 소문자로 표시할 수 있다.[1]

6. 스니펫 프로그래밍 기능

스크립트 가능 스니펫은 다양한 프로그래밍 기능을 지원한다. 프로그래밍에서 "스니펫"은 파일에 포함된 소스 코드의 일부를 의미하며, 복사/붙여넣기 프로그래밍의 한 형태이다. 스니펫은 주로 코드의 단순한 섹션이나 정형문에 사용되며, 응용 소프트웨어에 따라 지원되는 프로그래밍 기능의 범위가 다르다.

6. 1. 일반 텍스트

프로그래밍 가능한 스니펫에서도 일반 텍스트를 처리할 수 있다. 하지만 프로그래밍 가능한 스니펫을 지원하는 환경에서는 "일반 텍스트"와 "프로그래밍 지침"을 구분해야 하는 경우가 많다. 또한, 프로그래밍 가능한 스니펫을 지원하는 애플리케이션은 보통 여러 프로그래밍 언어를 인식하는 기능을 지원한다.

따라서 프로그래밍 가능한 스니펫에서 일반 텍스트를 출력할 때는 구문 및 구분자 충돌 문제를 피하도록 주의해야 한다.[1]

6. 2. 상수 및 변수

프로그래밍 가능한 스니펫은 기존의 변수 범위 또는 이름 공간에 바인딩을 설정하는 기능을 포함하며, 사용자는 다양한 상수 또는 변수를 선택할 수 있다. 여기에는 다음 값들이 포함될 수 있다.

  • 특정 시스템에 현재 로그인한 사용자의 이메일 주소
  • 현재 시스템 시간과 날짜
  • 함수의 출력값


스크립트 가능한 스니펫은 하나 이상의 현재 활성 파일과 연결되는 경우가 많다. 따라서 변수는 파일 이름, 커서 위치, 상위 디렉토리를 지정하는 환경 변수 및 인수, 현재 편집 세션의 파일과 관련된 통계 등을 포함할 수 있다.

6. 3. 해석된 코드

스크립트 가능한 스니펫은 하나 이상의 프로그래밍 언어로 코드를 실행할 수 있다. 여기에는 하나 이상의 독립 실행형 언어나, 해당 언어가 호스팅되는 애플리케이션에 특정된 언어가 포함될 수 있다.[1]

7. 스니펫의 예시

두 변수 ''x''와 ''y''의 값을 서로 바꾸는 과정을 생각해 보자. 약한 타입 시스템에서 이름 충돌을 신경 쓰지 않는다고 가정하면 다음 코드로 나타낼 수 있다.[1]

```

temp = x

x = y

y = temp

```

스니펫이 삽입되면 프로그래머는 두 매개변수 값의 입력을 요구받는다. 타입 ''foo''와 ''bar''가 교환하려는 변수의 실제 이름이라고 가정하면 다음 코드를 생성한다.[1]

```

temp = foo

foo = bar

bar = temp

```

나중에 스니펫이 변경되어, ''temp'' 대신 ''__temp''를 사용하면 이미 삽입된 코드는 변경되지 않지만, 이후 스니펫 삽입에는 변경 사항이 반영된다. 이 스니펫은 다음과 같이 나타낼 수 있다.[1]

```

temp = $1

$1 = $2

$2 = temp

8. 대안

코드 스니펫의 가장 기본적인 대안은 라이브러리의 서브루틴을 사용하는 것이다. 서브루틴은 재사용 가능한 소프트웨어 라이브러리에 통합되어 여러 프로그래밍 프로젝트 간에 공유될 수 있다.

디자인 패턴객체 지향 프로그래밍함수형 프로그래밍에서 프로그래머가 약간의 변형으로 코드를 반복적으로 스니펫을 삽입하는 것을 피하거나 줄일 수 있는 기술이다. C 계열 언어에서는 전처리기가 이 목적을 위해 사용되기도 한다.

2021년부터 딥 러닝 도구(GitHub Copilot 등)가 등장하여 텍스트 기반 기능 추론 및 코드 스니펫 생성을 지원한다.[3][4]

9. 스니펫을 제공하는 소프트웨어 및 서비스

스니펫을 제공하는 소프트웨어 및 서비스는 다음과 같다.

참조

[1] 웹사이트 Gedit/Plugins/Snippets http://live.gnome.or[...] 2010-01-09
[2] 서적 Proceedings: 2004 International Symposium on Empirical Software Engineering, ISESE 2004: 19–20 August 2004, Redondo Beach, California https://web.archive.[...] IEEE 2016-10-18
[3] 간행물 Deep Learning for Source Code Modeling and Generation The University of Adelaide
[4] 웹사이트 GitHub previews new AI tool that makes coding suggestions https://techcrunch.c[...] 2021-06-29
[5] 웹사이트 Gedit/Plugins/Snippets http://live.gnome.or[...] 2010-01-09
[6] 웹인용 Gedit/Plugins/Snippets http://live.gnome.or[...] 2010-01-09



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com