Google Adsense Side (160x600)



요세미티 겉보기 이상으로 개발 자체의 변경점들이 썩은 사과

보통 OSX 10.10 요세미티를 보면, iOS 짝퉁의 유치한 디자인이네 뭐네 이런 소리도 있고, 이상하게 플랫하게 바꿔놓았다고 하기도 하고 그런데, 개발 입장에서는 내부적으로 꽤나 많이 바뀐 점이 있다고 생각됩니다.

iOS야 비교적 최근에 등장해서 나름 깔끔한 방식으로 코드가 구성되고 개발이 되지요.
그런데 OSX용 Cocoa는 나온지 오래되어 그런지 난잡한 부분들과 변경이 제대로 적용 안된 것들이 제법 있었다고 봅니다.


천천히 개선되어 가긴 했어요
(개인적으로) 인상적인 (또 삽질을 초래한) 변경은 이런 것들이 있어왔죠.

  • 위에 언급한 NSPoint, NSRect, NSSize가 CGPoint, CGRect, CGSize랑 아주 똑같아졌구요
  • NSTableView가 NSCell이라고 약간 애매한(퍼포먼스 때문)놈을 사용했는데 이것도 iOS처럼 NSView를 사용 가능하게 되었구요
  • CALayer에서 Y축이 뒤집혀서 계산되는 것이 좀 골때리게 적용되던 것도 손을 봐서 View가 뒤집었으면 CALayer도 뒤집어지게 했고(이것때문에 70%쯤 완성된 것을 갈아엎었죠)
그래도 이전 버전들에서는 iOS에 비해서 너무 천천히 고쳐나간다는 생각이 들었었는데, 요세미티에서 드디어 대폭 갈아엎는 수준의 변경이 들어갔다는 느낌입니다.

이번에 아주 대폭 바뀌는 것으로는 다음과 같은 것이 있다고 보입니다.
iOS에 경험이 있으시다면 UIViewController가 얼마나 중요한 놈인지 아실 것입니다.
그러면 NSViewController는 어떨까요?

...

이게 10.5부터 있긴 있었지만 사실상 잉여스러운 놈이라는 느낌이었습니다.

그냥 인터페이스 빌더에서 만든 nib파일에서 로드하기 쉬우라는 정도이지 인터페이스 빌더에서도 애매한 위치이고(결국 뷰는 코드상에서 붙이게 됨...), 결정적으로 이벤트 처리(Responder Chain)에서 기본적으로 등록이 안되기 때문에 기본 상태로는 거의 쓸모가 없었죠. 그리고 뷰의 변경 이벤트(viewDidLoad: 이런거)? 우리에겐 그런건 있을 수가 없어... 

그렇다보니 실제 사용한 적도 없는 것 같아요. 그리고 애플도 이걸 쓰라고 강요를 안하고...

그냥 커스텀 클래스를 만들어서 그걸 컨트롤러로 이용했죠. 그런데 10.10 요세미티에서는 NSViewController의 역할이 대폭 강화되어 UIViewController의 동생처럼 변신해서 돌아왔습니다. 그리고 인터페이스 빌더에서 NSView와 NSViewController를 묶어서 조작이 가능하도록 스토리보드(+컨테인먼트)가 도입되었습니다.

  • NSViewController가 이벤트 처리에서 Responder Chain의 일부로 동작합니다.
  • NSViewController에 viewWill... viewDid... 시리즈가 탑재되었습니다->지연 로딩(Lazy Loading)으로 실체감 성능의 향상
  • 스토리보드를 통해 디자인 및 구성이 가능합니다.

사실 이게 제가 원했던 변화중에 하나였긴 합니다. 기존 방법론은 뭔가 난잡하게 되어 정신사나워지는 것을 피하기가 어려웠거든요.

그런데 얻는 것이 있으면 잃는 것도 있는 법.

가장 큰 문제는 역시 이전 버전을 지원하고 싶다면...

요세미티에서 짱 멋지게 만들어 보아요~
매버릭스는 어떻게 될까요?
양쪽 다 멋지게 만드는 것은 쉽지 않을 것이다


그런데 지금 막 시작해야 하는 프로젝트가 10.9가 최저 사양(deployment target)으로 생각하고 있어서, 바로 저 '쉽지 않을 것'에 걸려버려서...

뭐 대충 테스트해 보니 스토리보드 사용은 못할 것 같은데, responder chain 문제는 흉내낼 수는 있더라구요.


이런 방법도 있구요.

하지만 지연 로딩은 애로사항이 꽃필 것으로 보이네요.