스니펫

컴퓨터 프로그래밍에서 스니펫(snippet)은 상대적으로 작은 양의 소스 코드로, 코드를 작성하는 과정의 일부로 저장된 후 더 큰 코드베이스에 삽입된다. 코드 편집기 또는 통합 개발 환경(IDE)과 같은 일부 개발 도구는 소프트웨어 개발자가 코드를 직접 입력하는 대신 코드 조각을 삽입할 수 있도록 하여 생산성을 높이는 스니펫 관리 소프트웨어 기능을 제공한다. Example of the feature in the Gedit editor.

함수와 같은 추상화 구성과 달리, 스니펫은 복사-붙여넣기 프로그래밍의 한 형태로  저장된 템플릿 텍스트를 확장하여 결과를 소스 코드에 삽입하는 매크로 작업이다. 스니펫 삽입은 전처리기 매크로와 유사하지만, 매크로 정의를 참조하는 대신 매크로 확장 자체를 삽입하는 것과 같다. 삽입 후 스니펫을 변경해도 전처리기 매크로의 정의를 변경하는 것처럼 코드에 영향을 미치지 않는다. 이러한 이유로 모범 사례는 함수 프로토타입, 제어 구조 또는 라이브러리 임포트와 같은 비교적 간단한 코드에만 스니펫을 사용하는 것이다. 스니펫은 일반적으로 추상화를 사용할 수 없거나(즉, 프로그래밍 언어에서 지원되지 않음) 바람직하지 않을 때(즉, 런타임 오버헤드로 인해) 사용된다.

스니펫 관리를 제공하는 개발 도구는 일반적으로 CRUD와 같은 작업을 포함하는 저장된 템플릿 카탈로그를 유지 관리하는 기능을 제공한다. 스니펫 관리를 지원하는 주요 도구는 다음과 같다: 이클립스, 넷빈즈, 비주얼 스튜디오 및 드림위버. 자동 완성 및 자리 표시자 대체와 같은 스니펫 기능은 배시 및 파워셸과 같은 셸에서 사용할 수 있다.

통합 개발 환경은 스니펫을 지원하는 언어 서버 프로토콜을 구현하여 스니펫을 지원하는 경우가 많다.

 유형 
섬네일|파워셸에서 스크립트 가능한 스니펫 사용을 보여주는 예시

스니펫은 사용 시 상호작용 방식에 따라 분류할 수 있으며, 다음을 포함한다:

정적 정적 스니펫은 삽입 시 정보를 입력하지 않고 삽입할 수 있는 고정 텍스트이다.

동적 동적 스니펫에는 사용자가 삽입 시 교체 텍스트를 입력해야 할 수 있는 자리 표시자가 포함되어 있다.

스크립트 가능 스크립트 가능 스니펫은 실행 가능한 코드이다. 이러한 스니펫에 대한 지원에는 셸 명령 실행, GUI 대화 상자 제공 또는 운영 체제, 다른 응용 프로그램 또는 호스팅 응용 프로그램 자체의 다른 하위 구성 요소와의 사용자 상호 작용의 다른 방법이 포함될 수 있다.

 자리 표시자 
자리 표시자는 삽입 시 교체되는 스니펫의 일부이다. 일반적으로 자리 표시자는 개발 도구가 각 자리 표시자의 경계를 식별하여 교체할 수 있도록 하는 특수 마크업 구문을 가지고 있다. 일부 도구는 사용자가 교체 값을 입력할 수 있는 그래픽 사용자 인터페이스(GUI)를 제공한다.

자리 표시자는 일반적으로 스니펫에서 특수 구문으로 구분되며 이름이나 숫자로 식별될 수 있다. 다음 스니펫 텍스트는 first_name, last_name 및 item이라는 식별된 자리 표시자를 사용한다.

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

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

Thanks {%first_name%}!

식별된 자리 표시자를 사용하면 스니펫이 동일한 대체 값을 여러 번 사용할 수 있다. 이전 예에서 first_name 자리 표시자가 이러한 사용의 예시이다.

변환을 통해 사용자는 자리 표시자에 제공된 하나 이상의 값을 프로그래밍 가능한 스니펫 텍스트 내의 다른 위치에서 복제하고 변환하도록 지시할 수 있다. 예를 들어, 사용자는 스니펫의 한 부분에 문서 제목을 제공하고, 문서 제목이 다른 위치에 반복되어 첫 번째 인스턴스는 모두 대문자이고 다른 모든 인스턴스는 소문자가 되도록 지정할 수 있다.

 예시 
두 변수 와 의 값을 교환하는 알고리즘은 다음과 같이 코딩할 수 있다:
 temp = x
 x = y
 y = temp

스니펫을 더 유용하게 만들기 위해 변수 이름을 자리 표시자로 대체하면 다음과 같다:
 temp = $1
 $1 = $2
 $2 = temp

스니펫이 삽입될 때 개발 도구는 개발자에게 자리 표시자 이름을 대체할 더 구체적인 이름을 요청할 수 있다. 와 의 경우 삽입된 코드는 다음과 같다:
 temp = foo
 foo = bar
 bar = temp

스니펫이 나중에 변경되어 temp 대신 __temp를 사용하게 되더라도, 기존 코드는 자동으로 새 스니펫 정의를 사용하지 않지만, 이후의 삽입은 그렇게 할 것이다.

 대안 
스니펫 사용의 일반적인 대안은 함수로, 함수는 정의를 수정하면 사용하는 곳에 영향을 미치지만, 스니펫은 기존 삽입에 영향을 미치지 않는다는 장점이 있다. 객체 지향 프로그래밍 및 함수형 프로그래밍과 같은 많은 개발 기술은 스니펫 사용과 반대되는 중복 코드를 피하는 것을 강조한다.

또 다른 대안은 C 및 관련 언어에서 사용할 수 있는 전처리기 매크로이다.

 관련 항목 
 디자인 패턴 디자인 패턴은 코드를 함수로 코딩하는 대신 생성한다는 점에서 스니펫과 유사하지만, 패턴은 범위가 다르다. 패턴은 비교적 크면서도 재사용 가능한 라이브러리로 코딩하기 어렵다.

 목적 파일 조각 소스 코드 스니펫과 유사하게, Just-In-Time (JIT) 컴파일러는 미리 컴파일된 코드를 더 긴 목적 파일 세그먼트로 연결할 수 있다. 이는 해석 시간을 줄이고 실행 속도를 높인다.

 AI 코드 삽입 생성형 인공지능(AI)인 깃허브 코파일럿과 같은 도구는 소스 코드에서 기능을 추론하고 스니펫과 유사하다고 볼 수 있는 관련 코드를 삽입할 수 있다.

 같이 보기 
 자동 완성
 콘텐츠 관리
 페이스트빈
 리팩터링
 디자인 패턴
 전처리기
 버전 관리
 웹 위젯

 각주 

 코드 스니펫의 예 





분류:소스 코드
분류:문서 편집기 기능