Swift - Xcode 6 Beta 4 변경점

이번에도 화요일에 새 베타가 나와버렸다. 이젠 흥분 같은건 없고 버그나 고쳐줘 라는 심정으로 다운로드를 받아보게 되는데 여전히 버그 투성이같다. 어쨌든, 이번에도 Xcode 6 Beta 4 에서 스위프트(Swift) 언어에 관한 변화점을 찾아보고자 한다.

엑세스 컨트롤

드디어 일반적인 OOP 언어들의 클래스 설계용 개념 중 하나인 엑세스 컨트롤 기능이 추가되었다. 쉽게 말해서 private, public 등이다. 정확히 말해서, 스위프트에는 private, public, 그리고 internal 이라는 세 가지 엑세스 컨트롤 오퍼레이터가 추가되었다.

그런데 개념은 약간 다른 것 같다. 이런 엑세스 컨트롤이 클래스 범주가 아니라고 기술하고 있기 때문이다.
  • private: 정의된 파일 내에서만 엑세스 가능
  • internal: 타겟 내에서만 엑세스 가능
  • public: 아무대서나 엑세스 가능
이게 뭘까 도데체. 뭔가 기존에 생각하던 것과는 좀 많이 다르다.
스위프트의 엑세스 컨트롤은 기존 OOP 개념과는 조금 동떨어진 것 같다. 마치 파일 단위로 클래스 혹은 모듈을 필수적으로 구분하고 이 모듈 내/외부에서의 엑세스를 컨트롤 하기 위함 것으로 보인다.

stride() 함수 추가

레인지(Range)의 .by() 메소드가 stride() 함수로 대체된다. 기존의 경우 레인지를 생성할 때 스텝을 지정하기 위해 .by()를 사용했었는데 이제는 stride() 함수를 이용해서 레인지를 생성한다.
// Beta 1 ~ 3
(0...9).by(3)                         // 0, 3, 6, 9
// Beta 3
(0..<9).by(4)                         // 0, 4, 8

// Beat 4
stride(from: 0, through: 9, by: 4)    // 0, 4, 8
당연하겠지만 이제 Range에다 대로 .by() 메소드를 호출하면 에러가 발생힌다.

iOS 7 혹은 OS X 10.9 가 최소 기준으로 변경

말 그대로, 이제 스위프트로 개발을 하려면 디플로이 타겟(Deploy Target)은 필수적으로 iOS 7 이상 혹은 OS X 10.9 메버릭스 이상이어야 한다.

Revised Declaration Modifiers

@final, @lazy, @optional 등 일부 골뱅이(@)로 시작하는 키워드에서 골뱅이가 떨어져나갔다. 그런데 자주 쓰던 기능이 아니라 무엇인지 파악은 잘 안된다.

미래에는 @class_protocol, @prefix 같은 녀석들도 완전히 덜어낼 생각인 것 같다. 좋은 판단이라고 생각한다.

Landmarks

랜드마크라 그러니 뭔가 좀 이상한 이름 같은데, 기존 #pragma mark 와 비슷한 용도이다. 아래와 같이 주석문에 특정한 키워드를 적으면 Xcode IDE와 연동이 된다.
// MARK: 구분자 표시
// TODO: 할 일 표시
// FIXME: 고쳐야 할 것을 표시

이건 분명 이전에 알려졌던 내용인데 이제서야 추가되었다. 어쨌든 동작은 잘 되는 것 같다.

그 외에...

솔직히 나머지 변화점은 언어의 변화라기 보다는 버그 수정에 가깝지 않나 생각된다. 실제로 유니코드 문자열 처리가 더 완벽해 졌다라는걸 적을 필요가 있을까. 매핑과 관련된 수정도 사실 별 의미는 없다. 당연히 그대로 되어야 하는 것이니깐. :-)

혹시나 잘못 이해하고 적은 내용이 있을지도 모르겠다. 가급적이면 애플 개발자 홈페이지에서 원문도 살펴보자.

어쨌거나 이번 베타4도 버그 투성이다. 바로 한 예가 프로젝트가 아닌 플레이그라운드만 열었을 경우 콘솔에 마구마구 대놓고 에러가 파파팍 찍힌다. 뭐하자는 건지... -_-;; (물론 내 환경의 문제일 수도 있다)

릴리즈 노트에는 안적혀있는데 이제 익스텐션의 getter 에서 튜플을 리턴해도 안죽는다. 그나마 발전이 있어서 다행이다.

[관련글] 스위프트(Swift) 가이드
[관련글[ Xcode 6 Beta 4 플레이그라운드 오류​

댓글

이 블로그의 인기 게시물

소수점 제거 함수 삼총사 ceil(), floor(), round()

버전(Version)을 제대로 이해하기