Contents

조회 수 1167 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

코코아(Objective-C)에서는 코딩하기 쉬운 것보다 읽기 쉬운 것이 더 중요하다는 점이다.


코드 작성보다 읽고, 유지하고, 디버깅하는 것에 훨씬 더 많은 시간을 쓴다.

코코아 명명 규칙은 간결함 이상의 명료함에 대한 노력으로 개발자들이 항상 선호하게 만든다.


좋은 이름을 만드는데 가장 중요한 요소는 명료함이다.

메소드의 이름은 그 메서드가 어떤 것을 받고, 반환하는지 명확하게 해야한다. (역할을 알 수 있는)


# 혼란스러운 예

(void)add;
// 무엇을 add하는지 명확하지 않아 혼란스럽다.
// 디폴트 객체를 더하는 걸까?
// 매개변수를 표현해야 명확할 것이다.



# 명확한 예

- (void)addEmptyRecord;
- (void)addRecord:(Record *)record;
// addRecord는 Record객체를 받는다는 것이 명확해졌다.
// 객체의 타입은 메서드명과 일치해야 혼동을 방지할 수 있다.



# 일반적으로 하는 실수 예

- (void)setURL:(NSString *)URL;
// 메소드만 보면 NSURL을 세팅하겠다는 의미인데
// 매개변수는 NSString을 받고 있어 부정확하다.



setURL:이라는 이름의 메서드는 NSString이 아닌 NSURL을 받아야하는데 그렇지 않고 있다.

String을 받아야 한다거나 명확하게 변경하려면 다음과 같이 하는 것이 바람직하다.

- (void)setURLString:(NSString *)nameString;
- (void)setURL:(NSURL *)URL;


이름을 명확하게 한다는 것은 대부분의 경우 약자를 사용하지 않아야 한다는 의미이다.

bgColo라는 이름 보다 backgroundColor,

to_str라는 이름 보다 stringValue를 사용하는 것이 좋다.


하지만, 약자가 더 잘 알려진 경우는 약자를 사용할 수도 있다.

예를 들어 UniformResourceLocator라는 이름보다 URL이 더 좋다.


명명규칙은 코드내 변수의 목적을 명확하게 만든다.

  • 정적 변수는 s를, 상수가 아닌 전역 변수에는 g를 앞에 붙인다.

  • 로컬 파일의 (정적) 상수에 보통 k를 앞에 붙이는데 이에 대한 명확한 규칙은 없다.

  • 메서드의 인자는 일반적으로 a, an, the와 같은 관사를 붙인다.

    the는 일반적으로 사용되지 않지만 특히나 중요하거나 유일한 객체임을 의미하곤 할때 사용한다.

    이렇게 인자들이 로컬 변수나 인스턴스 변수와 혼동되지 않게 하고, 무의시적으로 수정하게 되지 않게 도와준다.

  • 인스턴스 변수(ivar)는 이름 끝에 밑줄(underscore)를 붙이거나, 앞에 m을 접두어로 붙인다.

    밑줄을 접두어로 사용하지 말것 – 왜냐면 애플이 밑줄로 시작하는 것을 예약어로 지정했기 때문이기도 하고

    상위 클래스의 인스턴스와 겹치기도 한다.

  • 클래스는 항상 대문자로 시작하며, 메서드와 변수는 항상 소문자로 시작한다.

    단어 구별을 위해 밑줄 대신 카멜 표기법을 사용한다.(camel case)



코코아 명명법은 메모리 관리와 깊은 관계가 있다.

애플의 Memory Management Programming Guide에서 발췌한 문장이다.


"alloc, newObject, mutableCopy같이 alloc이나 new로 시작하거나 copy를 가진 메서드로 객체를 생성하거나 객체에 retain 메시지를 보내면 객체에 대한 소유권(ownership)을 갖게 된다. 이 경우에는 release나 autorelease를 사용하여 해당 객체의 소유권을 포기해야 하며, 어떤 객체를 그냥 받는 것이라면 릴리스하지 말아야 한다."




?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
1113 System/OS 무선 인증 서버.. 김도.. ㅋㅋ file hooni 2013.04.23 17591
1112 System/OS 무료로 HTTPS 적용하기 (Lets' Encrypt) file hooni 2017.02.16 2149
1111 System/OS 무료로 HTTPS 적용하기 (Let's Encrypt) file hooni 2017.10.28 1388
1110 Develop 모터에 대한 pid 제어.. ㅎㅎ file hooni 2013.04.23 18873
1109 Etc 모바일 프로그래머가 갖추어야 할 필수 역량 file hooni 2017.02.16 1271
1108 System/OS 맥에서 포트 확인하고 닫기 (mac) hooni 2022.03.22 864
1107 System/OS 맥에서 파일공유 (윈도우,맥) file hooni 2013.04.25 37296
1106 System/OS 맥북에서 MAC/윈도우 멀티부팅시 시간 설정 file hooni 2013.04.23 29755
1105 System/OS 맥 OS X 에서 스크린 화면 캡쳐 단축키 (Mac Print Screen) hooni 2015.07.21 1886
1104 Develop 링크들 보고 지울 내용 secret hooni 2019.11.21 0
1103 Develop 리팩토링 계획안 file hooni 2017.05.15 734
1102 Develop 레고 마인드스톰 NXT 수도쿠, 큐브 소스코드.. 20 file hooni 2013.04.23 81373
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 98 Next
/ 98