Blame programming-guidelines/ko/namespacing.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" type="topic" id="namespacing" xml:lang="ko">
Packit 1470ea
Packit 1470ea
  <info>
Packit 1470ea
    <link type="guide" xref="index#maintainer-guidelines"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Philip Withnall</name>
Packit 1470ea
      <email its:translate="no">philip.withnall@collabora.co.uk</email>
Packit 1470ea
      <years>2015, 2016</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <include xmlns="http://www.w3.org/2001/XInclude" href="cc-by-sa-3-0.xml"/>
Packit 1470ea
Packit 1470ea
    <desc>모든 API에 공간 이름을 붙여 라이브러리의 심볼 사용 과정상 혼동을 막습니다</desc>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>조성호</mal:name>
Packit 1470ea
      <mal:email>shcho@gnome.org</mal:email>
Packit 1470ea
      <mal:years>2016, 2017.</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>공간 이름 부여</title>
Packit 1470ea
Packit 1470ea
  <synopsis>
Packit 1470ea
    <title>요약</title>
Packit 1470ea
Packit 1470ea
    

라이브러리의 공간 이름을 올바르게 부여했다면, API의 형식과 메서드의 이름을 다른 라이브러리에서 보유한 이름과 동일한 이름을 부여할 수 있으며, 프로그램에서는 혼동 없이 활용할 수 있습니다. 모든 형식과 메서드 이름 앞에 공간 이름을 붙여 라이브러리의 유일한 식별체로 만들면 됩니다.

Packit 1470ea
  </synopsis>
Packit 1470ea
Packit 1470ea
  <section id="gobject">
Packit 1470ea
    <title>GObject API</title>
Packit 1470ea
Packit 1470ea
    

심볼(함수, 형식) 및 파일의 일관된, 완전한 영역 이름 부여는 다음 두가지 핵심 이유 때문에 중요합니다:

Packit 1470ea
    <list type="numbered">
Packit 1470ea
      <item>

작명 규칙을 정한다는건 개발자로 하여금 라이브러리를 활용할 때 몇가지 심볼 이름만 익혀두면 됩니다. 심볼 이름을 익히는 대신 분명한 이름을 유추할 수 있습니다.

</item>
Packit 1470ea
      <item>

동일한 파일에 심볼이 있는 경우 두 프로젝트를 확인하여 심볼이 중복되지 않게 합니다.

</item>
Packit 1470ea
    </list>
Packit 1470ea
Packit 1470ea
    

두번째 이유가 중요합니다. 모든 프로젝트에서 create_object() 노출 함수를 호출했을 때 무슨 일이 일어날까요. 이걸 정의하는 헤더는 동일한 파일에 넣을 수 없으며, 이 문제를 해결했다더라도, 프로그래머는 어떤 함수가 어디에서 왔는지 모릅니다. 공간 이름 부여는 프로젝트의 모든 심볼 및 파일 이름에 유일하고 일관된 접두부를 붙이고 프로젝트의 심볼을 하나의 집단으로 묶어 다른 부분과 구별하여 이 문제를 해결합니다.

Packit 1470ea
Packit 1470ea
    

아래 작명 방식은 모든 심볼에 공간 이름을 부여할 때 활용합니다. <link href="https://developer.gnome.org/gobject/stable/gtype-conventions.html">모든 GLib 기반 객체에서 활용</link>하므로 대부분의 개발자에게 익숙해야합니다:

Packit 1470ea
    <list>
Packit 1470ea
      <item>

함수 이름은 lower_case_with_underscores 처럼 이름을 붙여야합니다.

</item>
Packit 1470ea
      <item>

구조체, 형식, 객체는 CamelCaseWithoutUnderscores 처럼 이름을 붙여야합니다.

</item>
Packit 1470ea
      <item>

매크로 및 상수는 UPPER_CASE_WITH_UNDERSCORES 처럼 이름을 붙여야합니다.

</item>
Packit 1470ea
      <item>

모든 심볼은 앞에 짧은 공간 이름(2~4문자)을 앞에 붙여야합니다. 근본적으로 입력하기 쉽게 짧게 줄이지만, 다른 부분과 구별할 수 있어야합니다.

</item>
Packit 1470ea
      <item>

클래스의 모든 메서드에 클래스 이름을 앞에 붙여야합니다.

</item>
Packit 1470ea
    </list>
Packit 1470ea
Packit 1470ea
    

게다가, 공용 헤더는 헤더 파일의 이름 공간을 활용하는 것처럼 하위 디렉터리에 두고 소스 파일에 넣어야합니다. 예를 들면 프로젝트에서는 사용자에게 #include <abc.h> 대신, #include <namespace/abc.h>를 사용하도록 해야 합니다.

Packit 1470ea
Packit 1470ea
    

일부 프로젝트는 이 하위 디렉터리에서 헤더 파일에 공간 이름을 부여합니다. #include <namespace/abc.h> 대신 #include <namespace/ns-abc.h> 처럼 씁니다. 중복되지만 문제 없습니다.

Packit 1470ea
Packit 1470ea
    

이를 테면 ‘Walbottle’ 프로젝트에서는 공간 이름 약자로 ‘Wbl’를 쓸 수 있습니다. ‘schema’ 클래스와 ‘writer’ 클래스가 있으면, 다음 헤더를 설치합니다:

Packit 1470ea
    <list>
Packit 1470ea
      <item>

<file>$(includedir)/walbottle-$API_MAJOR/walbottle/schema.h</file>

</item>
Packit 1470ea
      <item>

<file>$(includedir)/walbottle-$API_MAJOR/walbottle/writer.h</file>

</item>
Packit 1470ea
    </list>
Packit 1470ea
Packit 1470ea
    

(상단의 $API_MAJOR는 <link xref="parallel-installability">동시 설치</link>용도입니다.)

Packit 1470ea
Packit 1470ea
    

스키마 클래스에는 GObject 이름 작성 규칙에 따라 (여러 심볼 중) 다음 심볼을 내보냅니다:

Packit 1470ea
    <list>
Packit 1470ea
      <item>

WblSchema 구조

</item>
Packit 1470ea
      <item>

WblSchemaClass 구조

</item>
Packit 1470ea
      <item>

WBL_TYPE_SCHEMA 매크로

</item>
Packit 1470ea
      <item>

WBL_IS_SCHEMA 매크로

</item>
Packit 1470ea
      <item>

wbl_schema_get_type 함수

</item>
Packit 1470ea
      <item>

wbl_schema_new 함수

</item>
Packit 1470ea
      <item>

wbl_schema_load_from_data 함수

</item>
Packit 1470ea
    </list>
Packit 1470ea
  </section>
Packit 1470ea
</page>