Burt.K

Awesome Discovery

[SE-0007] C 스타일 for 루프 제거: 조건과 증감 연산자

작성일 — 2025년 3월 9일

Table of Contents

C 스타일 for 루프 제거: 조건과 증감 연산자

소개

C 스타일 for-loop는 Swift 고유의 구조라기보다는 C 언어에서 기계적으로 가져온 요소로 보인다. 이 문법은 잘 사용되지 않으며, Swift 스타일과도 잘 맞지 않는다.

Swift에서는 이미 for-in 문과 stride를 통해 더 전형적인 반복 구문을 제공하고 있다. C 스타일 for-loop를 제거하면 언어를 단순화할 수 있으며, --++ 연산자의 가장 흔한 사용처를 없앨 수 있다. 이 연산자들은 이미 언어에서 제거될 예정이다.

이 구조의 가치는 제한적이며, 제거를 진지하게 고려해야 한다고 생각한다.

이 제안은 Swift Evolution 포럼의 C 스타일 For 루프 스레드에서 논의되었으며, [리뷰] 조건과 증감 연산자를 사용한 C 스타일 for 루프 제거 스레드에서 검토되었다.

for 반복문의 장점

Swift는 친숙한 상수와 제어 구조를 사용해 학습 곡선을 낮추는 설계를 채택했다. for 반복문은 C 언어와 유사하게 동작하며, 이 제어 흐름을 익히는 데 필요한 노력을 최소화한다.

for 루프의 단점

  1. for-instride는 레거시 용어에 얽매이지 않으면서도 Swift 스타일의 일관된 접근 방식을 제공한다.
  2. for-in에 비해 for-loop는 간결성 측면에서 명확한 표현적 단점이 있다.
  3. for-loop 구현은 컬렉션이나 Swift의 핵심 타입과 함께 사용하기에 적합하지 않다.
  4. for-loop는 단항 증가/감소 연산자를 사용하도록 유도하며, 이는 곧 언어에서 제거될 예정이다.
  5. 세미콜론으로 구분된 선언 방식은 C 계열 언어가 아닌 다른 언어에서 온 사용자들에게 높은 학습 곡선을 요구한다.
  6. for-loop가 존재하지 않았다면, Swift 3에 포함될 가능성은 낮았을 것이다.

제안하는 접근 방식

Swift 2.x에서 for-loop를 더 이상 사용하지 않도록 권고하고, Swift 3에서는 완전히 제거할 것을 제안한다. 또한 Swift 프로그래밍 언어에서 관련 내용을 삭제하여 현재 2.2 업데이트의 수정 사항과 일치시키는 방안을 제안한다.

고려했던 대안들

Swift에서 for-loop를 제거하지 않아 언어를 간소화하고 불필요한 제어 흐름 요소를 제거할 기회를 놓쳤다.

기존 코드에 미치는 영향

Apple Swift 코드베이스를 검색한 결과, 이 기능은 거의 사용되지 않는다. Swift-Evolution 메일링 리스트의 커뮤니티 멤버들도 이 기능이 많은 프로급 앱에서 사용되지 않는다고 확인했다. 또한 for-loop가 필요한 경우에도 대체 방법을 사용할 수 있다. 예를 들어:

char *blk_xor(char *dst, const char *src, size_t len)
{
 const char *sp = src;
 for (char *dp = dst; sp - src < len; sp++, dp++)
   *dp ^= *sp;
 return dst;
}

위 코드와 아래 코드를 비교해 보자.

func blk_xor(dst: UnsafeMutablePointer<CChar>, src:
UnsafePointer<CChar>, len: Int) -> UnsafeMutablePointer<CChar> {
   for i in 0..<len {
       dst[i] ^= src[i]
   }
   return dst
}

Github의 Swift gist를 검색한 결과, 이 접근 방식은 주로 언어에 익숙하지 않은 초보자들이 사용하며, 언어를 숙달하면 더 이상 사용하지 않는다. 예를 들어:

for var i = 0 ; i < 10 ; i++ {
    print(i)
}

그리고

var array = [10,20,30,40,50]
for(var i=0 ; i < array.count ;i++){
    println("array[i] \(array[i])")
}

커뮤니티 반응