ios개발

<iOS> What is Cocoa? - 코코아란 무엇인가? 1편

studying develop 2021. 2. 22. 00:15

ios 개발을 하다 보면 코코아라는 말을 많이 듣는다.

 

다음 링크를 정리해 보려 한다. <developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CocoaFundamentals/WhatIsCocoa/WhatIsCocoa.html>

 

일단 1편을 정리하다 보니 양이 많아서 10편은 족히 나올거 같다.... 최대한 한국어 처럼 쓰려했다. 전문용어가 있긴해도 그대로 영어로 쓰면 영어로 읽느니만 못한거 같아서... 틀린부분좀 알려주시면 감사하겠습니다.

 


 

What is Cocoa?

코코아란 OSX와 iOS 모두를 위한 어플리케이션 환경이다. 코코아는 아이폰, 아이패드 그리고 아이팟 터치의 멀티 터치를 지원하는 OS를 위해 사용된다. 코코아는 객체지향 소프트웨어 라이브러리, 런타임 시스템 그리고 통합 개발 환경으로 구성된다.

 

이 챕터에서 우리는 코코아의 정의, 목적의 묘사, 능력들 그리고 iOS OSX 두 플랫폼에서의 코코아의 구성요소들을 살펴보자. 여기서 코코아의 기능적 설명들을 읽는 것은 코코아를 이해하기 위한 첫번째 단계이다.

 


The Cocoa environment

코코아는 OSX와 iOS를 위한 객체지향 프레임워크의 세트이다. 코코아는 런타임 환경을 지원한다. 코코아는 OSX에서는 우선적으로 중요한 어플리케이션 환경이다 그리고 iOS는 단일 어플리케이션 환경이다. (Carbon은 OSX의 대체 환경이다, 하지만 카본은 상호작용 가능한 프레임워크이다. 카본은 절차 지향적 프로그램 인터페이스로 OSX의 기존 코드 베이스를 지원하기 위한 것이다.). OSX와 iOS의 대부분의 프로그램들을 Cocoa application들이다. 메일, 사파리도 코코아 어플리케이션임. 통합된 개발 환경인 xcode는 양 플랫폼 모두를 위한 개발을 지원한다. 이 개발 환경과 코코아의 조합은 잘 구성되고 완전히 표현되는 어플리케이션을 만든다.

 


Introducing Cocoa

모든 어플리케이션 환경들 처럼, 코코아는 두가지 상태를 갖는다; 런타임 측면과 개발 측면이다. 런타임 측면에서, 코코아 어플리케이션들은 유저 인터페이스를 보여준다 그리고 다른 볼 수 있는 OS 구성요소들과 통합되어 있다; OSX에서는, 이런것은 파인더, Dock 그리고 환경에서 가져온 다른 모든 어플리케이션들이다.

 

하지만 개발 측면이 프로그래머들에게는 더욱 흥미로운 측면이다. 코코아는 통합된 객체지향 소프트웨어 컴포넌트이다 - 그것은 클래스들로 - 우리가 빠르고 단단하게 완전히 표현된 OSX와 iOS의 어플리케이션들을 만들수 있다. 이러한 클래스들은 적용과 재사용이 가능하다; 우리는 이것을 우리의 특정 요구에 맞게 확장할 수 있다. 코코아 클래스들은 우리가 생각할 수 있는 개발 요구들을 위해 존재한다, 유저 인터페이스 객체들로 부터 데이터 포매팅까지. 개발에 대한 요구가 예상되지 않을 부분에 대해서는 우리가 이미 존재하는 클래스로 부터 새로운 섭클래스를 생성하여 문제를 해결할 수 있다.

 

코코아는 그 어떤 객체지향 개발 환경중에서도 가장 잘 구분되는 가계도를 갖는다. NeXTSTEP(넥스트사의 운영체제)에서 1989에 소개하고 그리고 오늘날, 코코아는 가공되고 테스트되어 (역사소개 링크) 매우 고상하고 강력한 디자인이 빠른 개발과 모든 소프트웨어를 위해 이상적으로 적용됐다. 어플리케이션 뿐 아니라 커맨드라인툴들, 플러그인들, 그리고 다양한 번들들을 빠르고 이상적으로 구현할 수 있다. 코코아는 우리의 어플리케이션들에게 많은 행동들과 모습들을 무료로 제공한다, 이러한 것들을 무료로 제공하는 것은 매우 독보적이다. (코코아의 제공사항)

 

<물론 코코아 iOS는 어플리케이션만 지원한다...>

 

우리는 코코아 소프트웨어 개발에 몇가지 프로그래밍 언어들을 사용할 수 있다, 하지만 필수적으로, 요구되는 언어는 Objc이다. Objc는 ASNI C의 슈퍼셋이다. ASNI C의 syntactical and semantic 특징들을(Smalltlk으로부터 파생된) 확장해왔다. 객체지향 언어를 지원하기 위함이였다. 몇가지 추가된 convention들은 사용하고 배우기 매우 쉽다. ObjC가 ANSI C 내부에 존재하므로, 우리는 C 코드를 ObjC 코드와 섞어 사용할 수 있다. 더욱이 우리는 함수를 논코코아 인터페이스에서도 호출이 가능핟, BSD 라이브러리 인터페이스가 그 예시이다.(/usr/include에있다.) C++코드를 코코아 코드와 섞을 수 있다 그리고 컴파일된 코드를 동일한 실행(executable)으로 묶을수 있다.

 

OSX note: OSX는, pyObjc와 rubyObjc를 브릿지가 가능하다. 두 브릿지 모두 우리가 코코아 어플리케이션들을 각각의 스크립팅 언어들로 작성할 수 있게 한다. 두개는 모두 해석되고, 상호작용 가능하고 객체지향형 언어들이다. 두 브릿지로 파이선이나 루비 객체가 Objc객체로 메시지를 전송할 수 있다 그들이 원래 Python이나 Ruby였떤거 처럼, 그리고 또한 ObjC 객체가 Python이랑 Ruby 객체로 메시지를 보낸다. 더 많은 정보 링크

 

가장 중요한 코코아 클래스 라이브러리는 두개의 코어 프레임워크에서 패키지된 형태로 온다. OSX를 위한 Foundation and AppKit와 iOS를 위한 UIKit이다. 모든 프레임워크들에서, 이것들은 동적으로 공유 가능한 라이브러리들(또는 종종 몇몇 backward compatibility를 위한 라이브러리 버전들) 뿐 아니라 헤더 파일들, API 다큐멘테이션들, 그리고 연관된 리소스들과 함께 제공된다. Foundation을 AppKit 또는 UIKit과 짝짓는 것은 코코아 프로그래매틱 인터페이스들을 그래픽 유저 인터페이스와 그렇지 않은 것들로의 분할을 반영한다. 각각의 플랫폼에서, 두개의 코어 프레임워크들은 어플리케이션을 만들려는 어떤 코코아 프로젝트에도 필수적이다. 양 플랫폼들은 추가적으로 Core Data framework 또한 제공한다, 코어 데이터는 코어 프레임워크들 처럼 매우 중요하고 유용하다.

 

OSX는 또한 코코아 프로그래머틱 인터페이스들을 제공하는  몇몇 다른 프레임워크들을 보낸다, WebKit 그리고 Address Book 프레임워크들; 더 많은 Cocoa frameWork들이 OS에 추가될 것이다. (여기서 더 많은 정보를 볼 수 있다.)