본문 바로가기
old/iPhone 개발 이야기

[iPhone App. 프로그래밍] Code 정리 기법

by 열야 2009. 12. 3.
가끔 생각날 때마다 이렇게 포스팅 할 생각입니다. 다음 편은 언제 올리느냐 라는 식의 기대가 있으면 좀더 자주 올릴수도 있겠으나... ^^ 독자가 적은 관계로 제 마음대로 올리고 싶을 때 올립니다.

Header파일에 넣어야 할 것들

1. importing할 해더 파일 들
 - 가급적 다른 해더 파일들을 import하지 않는 것이 좋습니다. 다른 class 정의를 가져 오고 싶을 때도 header파일을 가져오지 말고 @class를 이용해서 프로토타입만 정의하시기 바랍니다.
 - 프로젝트 전체적으로 사용하는 전역 해더 파일 (ex. debug, define, typedef 등이 정의되어 있는 해더 파일)은 권장합니다.

2. 사용할 class의 이름들
 - 단순히 class이름만 필요한 경우 @class를 이용하여 해당 이름이 class 이름이라는 것을 표시해둡니다.

3. class 정의
 - 상속받는 부모 class이름
 - delegate리스트는 부등호 사이에 넣어 줍니다. 수십개를 넣어도 괜찮은데 new line을 넣으면 안되는 것 같더군요. -_-;;
 - 사용할 변수를 중괄호 사이에 모두 넣습니다.
 - accessor함수들을 모두 정의합니다.
 - 외부에 노출할 인터페이스 함수들의 프로토타입들을 정의합니다.
 - 내부 함수는 여기에 정의하지 않는 것이 좋습니다. 내부 함수는 .m파일 내에 카테고리로서 따로 정의를 하면 깔끔하고 편리합니다. (뒤에 나옵니다.)

*accessor함수들을 정의할 때!!
 - 보통 포인트로 사용되는 녀석들은 retain키워드를 사용하여 자동으로 release되는 것을 막습니다.
 - string이나 변수들 중 값이 유지되어야 하는 변수들의 경우 copy 키워드를 이용하여 따로 메모리 영역을 운영하도록 합니다.
 - retain이나 copy를 사용하지 않으면 자동으로 assign이 됩니다.
 - 이렇게 정리된 accessor함수들을 모두 정의한 후에, class변수를 사용할 경우, 일관되게 self.변수이름 으로 사용하는 것을 습관화 합니다. 혼용해서 쓰다가 해깔립니다. 부득이한 경우(accessor를 정의하는 경우)를 제외하고는 모두 "self."를 붙이는 습관을 들입시다.

.m 파일에 들어가야 하는 것들
구현 파일에는 철저히 구현에 관련된 것들을 넣어야 합니다. 하지만 여러가지 종류가 있으니 확실히 구별하는 것이 소스를 읽을 때나, 확인할 때 시간을 절약해줍니다.
다시 한번 강조하지만, class변수들은 accessor함수를 사용하여 엑세스 하는 것을 습관화 합니다.



1. 우선 필요한 해더 파일을 모두 import합니다.
2. 매우 유용한 팁!! 바로 카테고리 입니다. 해당 클래스의 PRIVATE카테고리를 이곳에 정의합니다.
이렇게 함으로써 좋은 점은 이후의 코드에서 사용자가 정의한 함수들에 대해서 scope에 영향없이 마음대로 쓸 수 있다는 장점이 있습니다. 또한, 사용자가 정의한 함수 이면서 내부에서만 사용하는 함수가 무엇인지 한눈에 볼 수 있어 무척 편리한 기법입니다.
(C언어로 프로그래밍을 해본 분들은 아마 이 코드만 봐도 흐믓해하지 않을까요?? 저는 이 방식을 발견하고 나서 무척 기분이 좋았습니다..^^;)

3. 이 이후에는 함수 정의를 합니다. 그런데 한가지 생각해야할 것은 수 많은 delegate함수가 있다는 점입니다. 또한, 몇몇 delegate는 delegate를 따로 정의하지 않아도 delegate인 경우도 있습니다. 그리고 위에서 정의한 내부에서만 사용하는 사용자 정의 함수도 있지만, 외부에서 사용하는 사용자 정의 함수(header파일에서 정의한..)도 있습니다. 그러므로, 각 함수들 사이에 구분을 해주는 주석을 넣어줘서 정리하면 가독성이 한층 좋아집니다.

다음은 제가 사용하는 구분용 주석입니다.
//------------------------------------------------------------------------------------
// TextView delegate