[Swift] Naming Convention for Swift

jinShine
jinshine 기술 블로그
5 min readMar 4, 2019

프로그램은 사람들에게 읽히기 위한 목적으로 만들어져야 합니다

입사했을때 기존에 있던 소스들을 보면 코드의 흐름을 읽는 시간, 이해하는 시간에 대해 엄청난 시간이 투자된다는것을 느끼셨을 겁니다. 내가 작업하는 코드가 동료들(또는 남)에게 쉽게 이해가 되는 이해되는 코드가 되기위해선 먼저 Naming부터 맞추어 나가야된다고 생각하지만 이름을 지어주는 것이야 말로 프로그래머가 해야될 가장 힘든 업무중 하나라고 말할 수 있죠.

지금부터 알아두면 유용한 Swift Convention에대해 알아 보겠습니다.

참조 : https://soojin.ro/blog/english-for-developers-swift

1. Bool변수

일반적으로 Bool변수의 이름을 지을땐 ‘is~’ 형식으로 보통 사용하셨을 겁니다. (저 또한 이렇게 사용했습니다..) 하지만 CocoaTouch의 변수명들을 자세히 보았을때 아래와 같은 형태의 Bool변수로 작성되어있는걸 볼 수 있습니다.

  • is ~
  • 조동사 ~
  • 3인칭 단수 동사원형 ~
  • has ~

is ~

`is + 명사`, `is ~ ing`, `is +형용사` 3가지 정도로 나눌 수 있습니다.

  • is + 명사 : “ ~인가?” 라고 해석
  • is ~ ing : “ ~하는 중인가?” 라고 해석
  • is ~ 형용사 : “~되어진, ~하게된” 이라고 해석

조동사(can, should, will 등) ~

  • ‘조동사 + 동사원형’의 형태로 쓰이고 있다.
  • can : “~ 할 수 있는가?”
  • should, will : “무엇을 하기전에 ~할 것인가?”

3인칭 단수 동사원형 ~

3인칭 단수 : 보통 동사원형 뒤에 -s나 -es가 붙는 형태.

  • shows~ : ~ 보여줄 것인가?
  • contains~ : ~ 포함하고 있는가?
  • includes~ : ~ 포함하고 있는가?
  • allows~ : ~ 허용하고 있는가?
  • support~ : ~ 지원하고 있는가?
  • accept~ : ~ 받아주는가?
  • preserves~ : ~보존할건가?
  • returns ~ : ~을 반환할것인가?

has ~

`has + 명사`,` has + 과거 분사` 두가지 형태가 있습니다.

  • has + 명사 : “~를 가지고 있는가”로 해석
  • has + 과거분사 : “과거에 완료된것이 현재유지되고있다” -> “유지되고 있는가?”라는 의미이지만 “is + 과거분사”처럼 해석해도된다.

2. 동사

메서드명, 변수명 두가지에 대해 파악.

메서드명

  • 일반적은 메서드명으로는 동사원형으로 시작.
    request~, make~, show~, add~ 등등
  • delegate 메서드는(조동사 + 동사원형)으로 자주 쓰임

변수명

동사의 의미로 변수명을 사용해야될때 과거 분사로 변형해서 사용한다.

fetchedData, requestedData, madeView, hiddenView ~

3. getter

스위프트에선 다른언어와 다르게 앞에 get을 쓰지 않고 바로 타입이름(명사)을 쓴다.

4. 단수와 복수

하나의 인스턴스는 단수형으로 짓고, 복수는 -s, -es, -ies로 지어주면 배열이라는것을 알수 있어서 -List, -Array명을 붙이지 않을 수 있지만, 불규칙 복수형중에 단수와 복수가 똑같은 형태에서는 개인적으로 -List, -Array를 붙여주는것이 좋다고 생각합니다.

5. 타입별 Naming

URL, UIImage, Date, Size, Data처럼 상대적으로 raw한 데이터 타입이라면 명시해 주는 것 같고, 새로 정의한 타입이라면 써줄 필요가 없을 것 같다.

6. request, fetch, perform

대체로 데이터를 가져올때fetch~를 자주 쓰는데 정확한 의미로 사용해보자.

request

  • 유저에게 사용자 권한이나 요청등을 할때 사용.
  • 비동기 작업을 통해 handler를 이용하여 결과나 에러가 발생하여 실패할 수 있을때 사용.

fetch

요청이 실패하지 않고, 결과를 바로 리턴해줄때사용.

perform, execute

파라미터에 Request를 객체로 받거나, 작업을 클로저형태로 받을때 사용.

7. 중복되는 단어 제거

코드도 그렇겠지만 변수명이나 메서드명에 중복되는 단어가 들어가 있으면 제거 해주는 것이 좋습니다.

위와 같은 Album이라는 구조체가 있고, album이라는 인스턴스를 생성했다고 하자. album의 인스턴스에 albumName을 사용한다고 했을때 albumName보다는 단순히 name으로만 지정해주어도 충분합니다.

어떠한 메서드를 작성할때도 마찬가지입니다.

downloadImage(from:) 라는 메서드명을 만들었지만, 구조체와 메서드명이 불필요하게 중복되는것을 볼 수 있습니다.

let image = imageDownLoaderManager.downloadImage(from: url)

그래서 메서드가 사용될때 인스턴스의 이름과 잘 비교하여 중복되지 않게 사용하는 것이 좋습니다.

let image = imageDownLoaderManager.fetch(from: url)
let image = imageManager.download(from: url)

--

--