Flex/AIR/AS3/Etc2009.10.14 22:29

이글은 널곰님의 블로그에 올라와 있는걸 제가 코딩할때 참고하기 위해 제 나름데로 정리한 내용입니다.
원본글을 보시려면 널곰님 블로그에 방문해 주세요.

[출처] - http://blog.naver.com/surfwon/30049410362
[영문 원본] - http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions

1. 명명규칙 (Naming)

약어 (Abbreviations)

일반적으로 약어 사용은 피합시다. ex) calcOptVal() ---> calculateOptimalValue()

관례화 되어 있는 약어
  • acc - accessibility(접근성) ex) ButtonAccImpl
  • auto - automatic(자동적) ex) autoLayout
  • eval - evaluate(계산) ex) EvalBindingResponder
  • impl - implementation(이행) ex) ButtonAccImpl
  • info - information(정보) ex) GridRowInfo
  • num - number(숫자) ex) numChildren
  • min - minimum(최소) ex) minWidth
  • max - maximum(최대) ex) maxHeight
  • nav - navigation, ex) NavBar
  • regexp - regular expression(정규식) ex) RegExpValidator
  • util - utility ex) StringUtil

두문자어 (Acronyms)

AIR, CSS, HLOC, IME, MX, MXML, RPC, RSL, SWF, UI, UID, URL, WSDL, XML ...
두문자어는 전부 대문자이거나 전부 소문자로만 사용
(두문자어가 소문자로 표기하는 경우 : 두문자어의 명칭 그 자체를 식별자(인스턴스명)로서 사용할 때와 식별자(Indetifier: ID명)의 선두 문자에 사용할 때에 한정)
ex) CSSStyleDeclaration, IUID, uid, IIME, and imeMode


단어간 경계 (Word boundaries) 연결

InterCaps(CamelCase)방식 - ex) LayoutManager, measuredWidth
언더스코어(밑줄)방식 - ex) object_proxy

(? 어떨때 어떤걸 쓰라는지는 안나와있다;; 계속 읽다보면 나오려나;;)

타입을 특정하기 쉬운 명명법(Type-specifying names)
타입을 쉽게 알 수 있도록 명명하되 타입의 약어를 나타내는 접미어 사용은 하지말자
ex) border_mc (X), button:Button = New Button(); (O)


패키지명 (Package names)

선두문자를 소문자로 시작하고 그 이후는 인터캡스 방식으로 명명
패키지는 비슷한 기능끼리 정리하여 그(기능의) 복수형으로 이름 붙이도록 합시다.
ex) charts, collections, controls, effects, events, formatters, managers, ,,,

패키지명에는 그 기능(concept)을 나타내는 동명사를 사용하는 것이 일반적입니다.
ex) binding, loffing, messaging, printing
혹은 "기능을 나타내는 명사"로 하도록 합니다.
ex) accessibility, core, graphics, rpc


파일명 (File names)

API을 Import를 위해, 반드시 파일명은 공개 API 클래스명과 같은 이름으로 합니다. 그러나 include일 경우는 이 규칙을 따를 필요가 없습니다.

[Style(...)] 메타 데이타에 대한 인클루드 파일의 이름은 대문자로 시작하기 바랍니다. 그 다음은 인터캡스 방식으로 하되 후미 단어는 "Styles"를 사용합니다.
ex) BorderStyles.as, ModalTransparencyStyles.as
(이미지등의) 어셋(assets) 파일명은 선두 문자는 소문자로 하고 단어와 단어의 사이는 언더스코어(_)로 연결합니다.
ex) icon_align_left.png


네이스페이스명 (Namespace names)

선두 문자는 소문자로 단어와 단어의 사이는 언더스코어(밑줄)로 연결합니다.
ex) mx_internal, object_proxy


인터페이스명 (Interface names)

선두 문자에 "I"를 나머지는 인터캡스방식으로 명명합니다.
ex) IList, IFocusManager, IUID


클래스명 (Class names)

선두 문자를 대문자로 시작한 이후는 인터캡스 방식으로 명명합니다.
ex) Button, FocusManager, UIComponent

Event 클래스의 하위 클래스(subClass)는 FooBarEvent하는 식으로 명명합니다.
Error 클래스의 하위 클래스는 FppBarError 식으로 명명합니다.
EffectInstance 클래스의 하위 클래스는 effect FooBar FooBarInstance로 조합합니다.
Formatter 클래스의 하위 클래스는 FooBarFomatter식으로 명명합니다.
Validator 클래스의 하위 클래스는 FooBarValidator 식으로 명명합니다.
skinning 클래스 : FooBarBackground, FoobarBorder, FooBarSkin, FooBarIcon, FooBarIndicator, FooBarSeparator, FooBarCursor, etc.
utility 클래스 : FooBarUtil (FooBarUtils는 안됨. 패키지는 복수형, 클래스는 단수형으로)
일반 기본 클래스명 FooBarBase: ComboBase, DateBase, DataGridBase, ListBase.


이벤트명 (Event names)

선두 문자를 소문자로 시작한 이후는 인터캡스 방식으로 명명합니다.
ex) move, creationComplete


스타일명 (Style names)

선두 문자를 소문자로 시작한 이후는 인터캡스 방식으로 명명합니다.
ex) color, fontSize


문자열 프라퍼티에 대한 나열값 (Enumerated values for String properties)

선두 문자를 소문자로 시작한 이후는 인터캡스 방식으로 명명합니다.
ex) "auto",  "filesOnly"


상수명 (Constant names)

모두 대문자로 사용하고 단어와 단어의 사이는 언더스코어(_)로 연결합니다.
ex) OFF, DEFAULT_WIDTH

상수(Constant)에 문자열(String 형태)를 지정할 때는 식별자명도 그 무자열에 대응시킵니다.

public static const FOO_BAR:String = "fooBar";


프라퍼티 [변수 및 getter/setter]명 (Property[variable and getter/setter] names)

선두 문자를 소문자로 시작한 이후는 인터캡스 방식으로 명명합니다.

루프 인덱스에 대해 i를 사용하고, 상한값에는 n을 사용합니다. 루프 안에 루프의 인덱스는 j, 상한값에는 m을 사용합니다.

for (var i:int = 0; i < n; i++)
{
for (var j:int = 0; j < m; j++)
{
...
}
}

for-in 루프의 변수는 p("property"의미)를 사용

for (var p:String in o)
{
...
}

getter/setter를 오버라이드하고 기본 getter/setter를 계속 사용하고 싶으면, 기본명 앞에 '$'를 붙인다. 이 getter/setter는 final로 지정되고 더 이상 supergetter/setter에 아무짓도 안하게 된다.

mx_internal final function get $numChildren():int
{
return super.numChildren;
}


스토리지 변수명 (Storage variable names)

getter/setter foo 에 대한 스토리지 변수는 _foo 로 명명 합니다.


메소드명 (Methid names)

선두 문자를 소문자로 시작한 이후는 인터캡스(카멜게이스) 방식으로 명명합니다.
ex) measure(), updateDisplayList()

메소드명은 항상 동사로 합니다.

일반적으로 파라메타가 없는 메소드는 getFooBar()나 setFooBar()의 이름을 사용하는 것이 아니라, 대신에 getter/setter로서 기술합니다. 하지만 getFooBar() 가 많은 처리를 필요로 하는 "무거운" 메소드인 경우에는 특징이 분명히 나타나도록 getter() 보단 대신에 findFooBar(), calculateFooBar(), detemineFooBar(), 등 과 같은 이름을 사용하는 것이 좋습니다.

클래스 메소드를 오버라이드(override)하고 베이스 메소드를 노출하고 싶은 경우는 베이스 명의 머리에 '$'가 붙은 같은 이름의 메소드를 기술합니다. 이 경우 해당 메소드에는 'final'을 표시 하여 슈퍼 메소드의 호출하여 이외의 기능을 포함하지 않게 합니다.
(대체 뭔말인지 ㅜ_ㅜ)

mx_internal final function $addChild(child:DisplayObject):DisplayObject
{
return super.addChild(child);
}


이벤트 핸들러명 (Event handler names)

이벤트 핸들러는 그 이벤트 타입 명칭에 "Handler"를 붙인 이름으로 합니다.
ex) mouseDownHandler()

이벤트 핸들러가 하위 컴포넌트에 이벤트를 디스패치(dispatch)하는 경우(this는 예외), 하위 컴포넌트 이름을 앞에, 핸들러 이름을 뒤에 적어주고 언더스코어(_)로 구분하여 연결 짓는다.
ex) textInput_focusInHandler()


파라미터[인수]명 (Argument names)

setter의 파라미터에는 value (을)를 사용합니다.

올바른 예

public function set label(value:String):void

나쁜 예

public function set label(lab:String):void

다른 좋은 예

public function set label(labelValue:String):void

다른 예

public function set label(val:String):void

이벤트 핸들러의 인수에는 (e, evt, eventObj는 아님) event를 사용하도록 합니다.

protected function mouseDownHandler(event:Event):void


리소스번들명 (Resource bundle names)

만약 리소스번들이 특별한 패키지를 포함하고 있다면 그 패키지와 같은 이름을 번들 이름으로 명명합니다.
ex) controls, {formatters}}, validators


리소스키명 (Resource key names)

선두 문자를 소문자로 시작한 이후는 인터캡스 방식으로 명명합니다.
ex)pm, dayNamesShort


그밖에 명명법 (Miscellaneous nomenclature)


"object"는 막연한 (vague) 뜻이므로 피합니다.

"item"은 data item이지 DisplayObject는 아닙니다.

"renderer"는 data item을 표시하는 DisplyObject입니다.

"type"은 ActionScript3의 자료형입니다. 그러니 "kind"같은 비슷한 단어를 사용합니다.
저작자 표시 비영리 변경 금지
신고
Posted by 코멧'★

티스토리 툴바