BLOG main image
분류 전체보기 (92)
Cocoa Touch (11)
Cocoa (10)
Objective-C (13)
Swift (6)
Development (11)
Tools (11)
Books (7)
etc (21)
Application release (1)
Document Project (1)
105,876 Visitors up to today!
Today 2 hit, Yesterday 3 hit
daisy rss
tistory 티스토리 가입하기!
'2014/04/25'에 해당되는 글 2건
2014. 4. 25. 13:49

일전에 Objective-C의 property dot notation이 디미터의 법칙을 어기기 쉽게 만드는 특성이 있다고 (오버스럽게) 쓴 글이 있었는데 조금 더 이야기를 해볼 만한게 있어 포스팅 합니다.


일단, 그 글을 안 읽으신 분은 읽었다고 계속 이야기를 진행합니다.


하지만 디미터의 법칙은 클래스에만 적용되고 자료구조에는 적용되지 않는다(Clean Code)는 말이 있습니다.

즉 이 말을 Objective-C에 적용하자면 공개된 자료구조는 "."으로 쭉 붙여써도 괜찮다는 말 처럼 들립니다.

약간의 논란의 여지가 있겠군요. 여기서 "자료구조"라는 말의 해석에 따라 이야기가 많이 달라질 듯 합니다.


여기서 말하는 자료구조란 거의 C struct같은 느낌일텐데요, Objective-C를 제대로 쓰게되면 struct대신 Class를 만들게 될것이고 맴버 변수를 모두 public으로 하거나 property로 처리하게 되겠지요.

이런 상황이라면 이 객체는 거의 자료구조라고 판단해야 할듯 합니다.

하지만 이것을 일반 클래스와 구분 짓기는 쉽지 않은듯 하고요, 실제로 그렇게 자료구조 표현으로만 Class를 잘 만들지 않게 되지요. (하지만 그렇게 하는게 좋다고는 하는군요!!)

결국 자료구조와 클래스의 짬뽕구조가 되어버리는데 이것이 안좋다고는 합니다만, 데이터와 로직을 분리하다보면 또 수많은 클래스들이 만들어지겠지요.


이래저래 "이것이 정답이다!"라고 확신이 서지 않는데요, 이런 부분에 대해서 경험 많은 분들은 어떤 조언을 해줄지 궁금하네요. 이럴 땐 정말 비행기표 끊어서 밥 아저씨를 만나러 가보고 싶어지는군요.


하지만 여기서 중요한건 그래도 여전히 property를 접근하기 위해서 "."을 쓰는건 여전히 마음에 들지 않는답니다. 특히  "."으로 chain을 만들어놓은 코드를 보면 돌아버릴 것 같습니다.

Name
Password
Homepage
Secret
2014. 4. 25. 13:35

프로젝트를 진행하면서 은근히 Class Cluster 객체를 상속받아 사용하는 경우가 많았는데 치명적인 문제점을 만났습니다.

다름이 아니라 NSKeyedArchiver를 통해 archiving한 객체를 NSKeyedUnarchiver를 통해 decode하면 상속받은 오브젝트로 만들어지지 않고 superclass의 오브젝트로 만들어지는군요.


즉, NSArray를 상속받아 MyArray를 만들었는데 그것을 인코딩/디코딩하면 결과물이 NSArray로 나옵니다. (헛)


일단 방법이 없나 찾아봤는데 아직은 뾰족한 방법을 찾지 못했습니다. (뭔가 있을것 같기는 한데 말이죠.)

시간을 두고 방법이 있는지 계속 확인은 해보겠지만... 현재로서는 조금 회의적입니다.

만일 정말 방법이 없다면... Class Cluster객체의 상속을 조금 자제해야 할 것 같습니다. T_T

Name
Password
Homepage
Secret
prev"" #1 next