본문은 야곰 아카데미 커리어 스타터 캠프를 통해 학습한 내용을 회고한 글입니다.
컨벤션 Convention
우리가 프로젝트를 하면서 컨벤션에 대한 부분이 전혀 되고 있지 않음을 느꼈다. 그러다가 이런 글을 발견했다:
https://jusung.github.io/Swift-Code-Convention/
팀에서 사용 중인 Swift Style Guide (코드 컨벤션)
코드 컨벤션이 있으면 협업시 일관성있는 코드를 작성할 수 있어서 코드의 일관성 유지에 좋습니다. 또 다른 사람이 작성한 코드를 읽을 때 코드의 문법보다 로직에 집중할 수 있는 장점이 있습
jusung.github.io
우리도 이 글 처럼 컨벤션을 잘 정해야할 것 같다는 생각이 들어서 컨벤션에 대해서 생각을 하게 되었다.
그래서 내가 정한 컨벤션은 다음과 같다(이번 프로젝트에서 이 모든걸 따르진 않았다):
0. 기본
컨벤션은 리팩토링시 적용하는게 아니라 코드를 짜는 즉시 적용합니다.
1. 일반
1.1 임포트
- 파일이 필요로 하는 최소의 모듈만을 임포트 합니다. 예를 들어, Foundation으로 충분하면 UIKit은 임포트하지 않습니다.
- 모듈 임포트는 알파벳 순으로 정렬합니다. 내장 프레임워크를 먼저 임포트하고, 개행으로 구분해 3rd-party 프레임워크를 임포트 합니다.
1.2 개행
- 개행에는 공백이 포함되지 않도록 합니다.
- 변수 선언, 조건문, 반복문, 함수 호출 사이에 개행을 줍니다.
1.3 들여쓰기
- 들여쓰기는 Xcode에서 제공하는 ctrl+i 를 눌렀을 때 적용되는 space를 사용합니다.
- 최대 가로 길이는 100characters를 사용합니다.
1.4 띄어쓰기
- 콜론(:)을 사용할 때는 콜론의 오른쪽에만 공백을 줍니다.
1.5 기능분리
- 조금이라도 기능이 다르면 독립적인 메서드로 분리합니다.
- 해당 코드가 재사용이 되면 독립적인 메서드로 분리합니다.
- viewDidLoad나 viewWillAppear에 들어갈 내용은 메서드로 분리합니다.
2. 네이밍
2.1 일반
- 약어 사용을 지양합니다.
- 변수, 상수, 클래스, 구조체, 열거형은 명사형으로 선언합니다.
- 메서드와 IBAction의 네이밍은 동사형으로 선언합니다.
2.2 IBAction
- 정확하게 연결된 제스쳐를 사용해서 선언합니다.
3. 기타
3.1 타입
- 타입 명시를 해줍니다.
- 바인딩할 시 타입 명시를 해주지 않습니다.
3.2 self
- 문법에서 모호함을 제거하기 위해 언어에서 필수로 요구하는 경우에만 self를 명시합니다.
3.3 String 관리
- NameSpace를 사용해서 String을 관리합니다.
3.4 extension
- 프로토콜 적용시 extension을 사용합니다.
4. 최적화?
4.1 final
- 상속되지 않을 class에는 final을 붙여줍니다.
4.2 private
- 외부에서 사용되지 않을 프로퍼티나 메서드에는 private을 붙여줍니다.
이렇게 정했고, 앞으로의 프로젝트에서는 팀원과 상의해서 위와 같은 컨벤션을 따를 예정이다.
weak-strong
기본적으로 ctrl+drag를 통해 IBOutlet을 연결하면 weak가 연결된다. 그리고 작성할 때 weak인지 strong인지 작성해주지 않으면 strong이 된다. strong은 소유대상의 reference count를 1 증가시킴으로서 dealloc되지 않도록하고, weak는 reference count는 증가시키지 않고 소유함으로써 상호참조 발생을 막아 메모리 누수를 막는다고 한다. 그래서 strong을 사용하면 불필요한 메모리를 사용하게 되는 일이 생길 수도 있어 조심해야한다.
'YAGOM CAREER STARTER' 카테고리의 다른 글
[TIL] 20230303: 프로토콜로 id 지정하기 (0) | 2023.03.04 |
---|---|
[TIL] 20230302: 함수배치순서, format specifier (0) | 2023.03.03 |
[TIL] 20230227: instantiateViewController (0) | 2023.02.28 |
[토요스터디A반] 20230225: TableView (0) | 2023.02.27 |
[TIL] 20230224: Initializer (0) | 2023.02.24 |