[App 개발] 카본과 코코아
본문
많은 자료를 보더라도 명확히 설명이 안되있는 부분이 많아서요,,
이렇게 무작정 여쭤봅니다.
제가 궁금한 것은
맥 OS X에서의 개발환경인데
1. 특히 카본과 코코아의 프로그래밍 방법의 차이 개발적인 면에 대해서 구체적으로 어떻게 다른지요?
2. Carbon 과 코코아의 차이 인데 카본과 코코아의 위젯(프레임, 아이콘, 버튼등)은 어떻게 이용되는지?
3. 위젯들이 따로 존재하여 프로그래밍시에 어떻게 이용되는지 궁금하며,
4. 쿼츠 컴포저? 코코아-쿼츠 컴포저 를 본 것 같은데 이것과 카본-쿼츠 컴포저는 없는지? 차이점 등을 알고 싶습니다.
5. 또 Interface 빌더와 Aqua의 개념에 대해서 알고 싶습니다.
고수님들 부탁드립니다.
최신글이 없습니다.
최신글이 없습니다.
댓글목록 2
hongjuny님의 댓글
부족하나마 열심히 설명 드려 보겠습니다.
사실 전체 시스템 관점에서 카본과 코코아는 그리 멀리 있는 관계는 아닙니다. 하지만 "코코아로 프로그램을 짰다"고 말할 때에는, 코코아가 추구하고 있는 기본 개념에 충실한가를 놓고 평가해야 합니다.
코코아는 MVC(Model-View-Controller) 패턴을 기본 개념으로 하고 있습니다. Mac OS X 의 기본 유저 인터페이스인 Aqua 는 화면에 어떤 모양으로 위젯을 출력하고, 어떻게 위젯을 운용할 것인가를 정의해 놓은 것입니다. Interface Builder 는 이런 Aqua 유저 인터페이스에 맞는 위젯들을 어떻게 비쥬얼하게 구성할 것인가를 결정하는 툴이고요. Interface Builder 에서는 이렇게 놓여진 위젯들을 실제 프로그램 상에서 어떻게 호출할 것인지, 어떤 이벤트에 어떤 위젯이 동작하게 할 것인지를 연결하는 역할도 담당합니다. 이런 모든 작업들은 View 객체들 내에 내포되어(Encapsulated) 있으며, 실제 프로그램 작성하는 사람들은 그 속의 자세한 내용을 몰라도 이러한 위젯들을 이용할 수 있는 표준 메쏘드로 감싸 줍니다. (Wrapper facade pattern)
데이터의 입출력과 관리, 데이터 구조 등은 모두 Model 객체의 역할입니다. Model 과 View 를 목적에 맞게 연결하는 것은 Controller 객체의 역할입니다.
코코아로 잘 짠 프로그램이란 Model 과 View, 그리고 이를 연결하는 Controller 이 역할에 맞게 정확히 분리되어 있으며, 향후 프로그램의 수정 보완 업그레이드 시 최소한의 노력으로 가능하게끔 구성되어 있는 프로그램입니다. Mac OS X 의 버젼이 높아지고 인터페이스와 위젯의 디자인이 조금씩 변경되더라도 이런 MVC 모델이 잘 지켜진 소프트웨어는 수정이나 보완 없이, 혹은 최소한의 수정으로 그대로 운용이 가능하게끔 되는 것입니다. ^^
카본의 경우는 시스템 이벤트 처리부터 많은 Low level 처리에 용이하므로 직관적인 프로그래밍을 원하시는 분들이 좋아합니다. 그리고 Objective-C 를 따로 배우지 않아도 되므로 부담이 없습니다.
반드시 Interface Builder 를 써야만 Mac OS X 의 위젯을 운용할 수 있는 것은 아닙니다. 프로그램 내에서도 얼마든지 위젯을 생성하여 쓸 수 있습니다. 하지만 그렇게 hard coded 된 위젯들은 소프트웨어 유지 보수가 더 힘들기 때문에 Interface Builder 를 쓰는 것이지요.
코코아를 쓰더라도 얼마든지 C/C++ 함수를 호출할 수 있으며, 카본을 쓰더라도 얼마든지 Objective-C 의 기능을 호출할 수 있습니다. Objective-C 에서는 그대로 C/C++ 함수를 호출하는 것이 가능합니다. C/C++ 에서는 Objective-C 소스로 약간의 Bridge Function 을 구성해 주면 됩니다.
한 가지 주의하실 점은, 아시다시피 C 함수는 parameter passing 시 스택에 변수를 뒤쪽부터 채워 넣지만, C++ 은 변수를 앞에서부터 채워 넣지요. 그리고 함수 이름에 변수 정보를 함께 첨부하도록 되어 있습니다. Objective-C 소스에 넣을 브릿지 함수들이 C 형식으로 만들 것인지 C++ 형식으로 만들 것인지를 결정하는 것은 Objective-C 소스 파일의 확장자입니다. *.m 은 C 형식의 Function Call 을 사용하며, *.mm 은 C++ 형식을 씁니다.
조해성님의 댓글
설명이 빠진 부분 중에 제가 대충 아는 부분만 추가해서 말씀드리겠습니다. ^^
1. Object-C 기반이냐 C/C++ 기반이냐가 차이점입니다. 이 차이점은 hongjuny님 말씀처럼 소프트웨어 디자인 자체에부터 영향을 줍니다. ^^
2/3. 양쪽에서 사용되는 형태는 글쎄요... 동일하다고 해야 할 것 같습니다. 물론 코코아쪽이 간편하기는 하지만... 인터페이스 빌더를 이용해서 리소스 형태로 만들든, 런타임에 직접 생성을 하든지 이용에는 상관 없습니다.
5. 인터페이스 빌더는 다이얼로그나 윈도 상에 올라가는 인터페이스, 즉 버튼, 페이더, 텍스트 등의 위치와 크기, 스타일 등을 결정하여 리소스화해주는 GUI 툴입니다. 윈도의 Visual 계열에는 다이얼로그 에디터가 리소스 에디터에 포함되어 있으며, 리소스 에디터는 IDE 자체에 통합되어 있지요. Xcode는 이것을 완전 통합형태까지는 아니고 그냥 따로 제공하는 것입니다.
Aqua는 Mac OS X 의 GUI 스타일에 대한 이름입니다. 윈도가 3.1 스타일, 95스타일, XP 스타일이 있듯 OS X 는 아쿠아라는 옷을 입고 있는 것이죠. 개발하는 측면에서 해당 단어는 큰 의미가 없습니다. ^^