C++와 Objective-C 간의 차이점 #2

Posted at 2008. 8. 29. 08:56 // in S/W개발/MACDEV // by 김윤수


C++와 Objective-C간의 차이점 #1 도 보세요. 처음으로 Objective-C 2.0을 공부하면서 나름대로 정리하고 있는 내용이라서 오류의 가능성이 충분히 있으니 감안하고 보시기 바랍니다.
  • Objective-C에 대해 이런것. .이 이미 있었구나. 항상 나는 뒷북을 치고 있는 거네. 쩝~(인터넷오늘은 북마크 SW개발 프로그래밍언어 Objective-C 뒷북)2008-08-28 16:17:26
  • C++와 Objective-C의 차이점 #11: root class로 NSObject가 있습니다. 이 클래스는 언어상의 Object는 아니고, Cocoa Framework 상의 Class 입니다.(cpp C++ Objective-C root class NSObject)2008-08-28 20:03:23
  • C++와 Objective-C의 차이점 #12: 기본적으로 dynamic binding이라는 건 subclass에서 method 를 override 하면 override한 method가 호출된다는 뜻이죠. C++ 용어로 말하자면 모든 method 가 virtual인 셈(cpp C++ Objective-C dynamic binding)2008-08-28 21:45:33
  • C++와 Objective-C의 차이점 #13: 언어 차원에서 Abstract Class를 정의하는 방법은 없습니다. 소위 interface 또는 abstract class를 정의하는 키워드 같은 건 없고, 그냥 특정 클래스를 그런식으로 쓰면 되는 것 같습니다.(cpp Objective-C C++ abstract class)2008-08-28 21:50:15
  • C++와 Objective-C의 차이점 #14: type 정보를 알아내는 게 언어차원에서 지원되지 않고, NSObject라는 root class의 여러 method 로 지원됩니다. isMemberOfClass: isKindOfClass: 등이 있습니다(cpp Objective-C C++ 차이점 type introspection)2008-08-28 21:56:41
  • C++와 Objective-C의 차이점 #15: 역시 예상대로 class metadata 가 장난이 아니군요. 클래스 및 상위클래스명, instance variable 들에 대한 description, method 명과 인자 & 리턴값, method 구현까지… class metadata 는 Class 라는 type 이래요. 그리고, MyClass 라는 class 를 정의했다면 MyClass 라는 이름 자체가 class object 가 됩니다. 그래서 [MyClass alloc] 이런 것도 가능하고 [MyClass class] 이런 것도 가능하구요.(cpp Objective-C C++ 차이점 class metadata)2008-08-28 21:59:49
  • C++와 Objective-C의 차이점 #16: instance 생성 구문 —> id aClass = [[AClass alloc] init]; alloc 은 모든 class object가 구현해야하고, init 는 모든 instance 가 구현해야하고. instance 생성과 초기화가 구분되어 있다는 게 좀 그렇긴 하다. 실수를 줄이는 측면에서는 둘이 하나로 합쳐진 게 더 좋은데… 그래도 alloc init 을 연속해서 호출하는 게 idiom 이라면 별 큰 문제는 안 생길 듯…(cpp Objective-C C++ 차이점 instance 생성)2008-08-28 22:12:56
  • C++와 Objective-C의 차이점 #17: multiple inheritance가 안되고, namespace 가 없다. 다중상속은 그렇다 쳐도 namespace가 없다는 건 쫌 그렇다. 대규모 S/W 개발할 때 문제가 될 것 같은데 말이다.(cpp Objective-C C++ 차이점 multiple inheritance namespace)2008-08-28 22:21:01
  • 여기를 보면 Objective-C가 Smalltalk을 상당히 많이 따랐음을 느낄 수 있다(cpp Objective-C Smalltalk C++ 계보)2008-08-28 22:25:22
  • C++와 Objective-C의 차이점 #18: class variable이 없다. 그냥 전역 변수를 선언해야 한다. class member에 대한 access 조정은 못하겠네. 상속될 수도 없고. 뭐 근데 별로 그래야 하는 경우가 많을 것 같진 않다(cpp Objective-C C++ 차이점 class variable)2008-08-28 22:40:50
  • C++와 Objective-C의 차이점 #19: class 정의가 interface 선언과 implementation 정의가 확연히 구분되어 있다. 게다가 정의 구문도 정말 많이 다르다. @interface ClassName : ItsSuperClass { instance variables declaration } method declaration @end —> 정말 특이하네. 이걸 특이하게 느끼는 나는 너무 C++에 익숙해져서 그렇겠지.(cpp Objective-C C++ 차이점 class 정의)2008-08-28 22:55:03
  • C++와 Objective-C의 차이점 #20: class method 를 정의할 때는 method 이름 앞에 + 를 붙인다. instance method 앞에는 - 를 붙인다.(cpp Objective-C C++ 차이점 method 선언)2008-08-28 22:59:26
  • C++와 Objective-C의 차이점 #21: method 정의 구문이 많이 다르네. (returnType)methodNameArg1:(arg1Type)arg1Name arg2:(arg2Type)arg2Name 이런식으로 한다. Arg1: arg2: 라고 argument 이름을 붙이는 건 mandatory는 아니지만 보통은 다 그렇게 하나보다. 일종의 idiom 같은 것! 안 그러면 method 이름이 methodName:: 이런식이 돼 버릴테니까. method name을 이런식으로 구성되게 만들면 name mangling도 필요 없지 않을까 싶다(cpp Objective-C C++ 차이점 method 선언)2008-08-28 23:03:04
  • C++와 Objective-C의 차이점 #22: #include 말고도 #import 라는 directive가 있다. #import 를 쓰면 한번만 include 되도록 보장해 준단다. 훌륭하다. C++도 이렇게 만들어야 하는데. 된장! 헤더 파일마다 include guard 쓰기 귀찮다(cpp Objective-C C++ 차이점 method 선언 헤어파일 인클루드)2008-08-28 23:08:19
보~~~나스

이 글은 김윤수님의 2008년 8월 28일의 미투데이 내용입니다.