[MacOS, iOS] Cocoa Fundamentals Guide / 코코아 기본 사항

2024. 5. 1. 23:23🍏/OS

코코아란 무엇인가요?

Cocoa는 OS X 운영 체제와 iOS를 위한 애플리케이션 환경입니다.
iOS는 iPhone, iPad, iPod touch와 같은 멀티터치 기기에서 사용되는 운영 체제를 뜻합니다.
객체 지향 소프트웨어 라이브러리, 런타임 시스템 및 통합 개발 환경으로 구성되어 있습니다.

이 글에서는 이 정의를 확장하여 두 플랫폼에서 Cocoa의 목적, 기능 및 구성 요소에 대해 설명합니다.

Cocoa 환경

Cocoa는 OS X 및 iOS에서 실행되는 애플리케이션을 위한 런타임 환경을 제공하는 객체 지향 프레임워크의 집합입니다. Cocoa는 OS X을 위한 탁월한 응용 프로그램 환경이며 iOS를 위한 유일한 응용 프로그램 환경입니다. (Carbon은 OS X의 대체 환경이지만 기존 OS X 코드 기반을 지원하기 위한 절차적 프로그래밍 인터페이스와의 호환성 프레임워크입니다.) Mail 및 Safari를 포함하여 OS X 및 iOS에서 볼 수 있는 대부분의 응용 프로그램은 Cocoa 응용 프로그램입니다. Xcode라는 통합 개발 환경은 두 플랫폼 모두에 대한 애플리케이션 개발을 지원합니다. 이 개발 환경과 Cocoa를 결합하면 모든 기능을 갖춘 완성도 높은 애플리케이션을 쉽게 만들 수 있습니다.

코코아 소개

더보기

모든 응용 프로그램 환경과 마찬가지로, Cocoa는 런타임 측면과 개발 측면이라는 두 가지 얼굴을 가지고 있습니다. 런타임 측면에서 Cocoa 응용 프로그램은 사용자 인터페이스를 제공하며 운영 체제의 다른 가시적 구성 요소와 긴밀하게 통합되어 있습니다(OS X에서는 Finder, Dock 및 모든 환경의 기타 응용 프로그램이 여기에 포함됩니다).

그러나 프로그래머에게 더 흥미로운 것은 개발 측면입니다. Cocoa는 강력하고 모든 기능을 갖춘 OS X 및 iOS 응용 프로그램을 신속하게 생성할 수 있는 객체 지향 소프트웨어 구성 요소인 클래스의 통합 제품군입니다. 이러한 클래스는 재사용이 가능하고 적응 가능한 소프트웨어 빌딩 블록으로, 그대로 사용하거나 특정 요구 사항에 맞게 확장할 수 있습니다. 코코아 클래스는 사용자 인터페이스 객체부터 데이터 서식 지정에 이르기까지 상상할 수 있는 거의 모든 개발 필요성에 대해 존재합니다. 개발 요구 사항을 예상하지 못한 경우 기존 클래스의 하위 클래스를 쉽게 생성하여 해당 요구 사항을 충족할 수 있습니다.

코코아는 객체 지향 개발 환경 중 가장 뛰어난 혈통을 가지고 있습니다. 1989년 NeXTSTEP으로 소개된 이래 현재까지 지속적으로 개선되고 테스트되어 왔습니다(하단 A Bit of History). 우아하고 강력한 디자인은 애플리케이션뿐만 아니라 명령줄 도구, 플러그인 및 다양한 유형의 번들 등 모든 종류의 소프트웨어를 빠르게 개발하는 데 이상적입니다. Cocoa는 애플리케이션의 동작과 외관의 많은 부분을 '무료로' 제공하므로 개발자는 고유한 기능을 개발하는 데 더 많은 시간을 할애할 수 있습니다. (코코아가 제공하는 기능에 대한 자세한 내용은 코코아 애플리케이션의 기능을 참조하세요.)

A Bit of History

Many years ago Cocoa was known as NeXTSTEP. NeXT Computer developed and released version 1.0 of NeXTSTEP in September of 1989, and versions 2.0 and 3.0 followed not far behind (in 1990 and 1992, respectively). In this early phase, NeXTSTEP was more than an application environment; the term referred to the entire operating system, including the windowing and imaging system (which was based on Display PostScript), the Mach kernel, device drivers, and so on.

Back then, there was no Foundation framework. Indeed, there were no frameworks; instead, the software libraries (dynamically shared) were known as kits, the most prominent of them being Application Kit. Much of the role that Foundation now occupies was taken by an assortment of functions, structures, constants, and other types. Application Kit itself had a much smaller set of classes than it does today. Figure 1-11 shows a class hierarchy chart of NeXTSTEP 0.9 (1988).

Figure 1-11  Application Kit class hierarchy in 1988

In addition to Application Kit, the early NeXTSTEP included the Sound Kit and the Music Kit, libraries containing a rich set of Objective-C classes that provided high-level access to the Display Postscript layer for audio and music synthesis.

In early 1993, NeXTSTEP 3.1 was ported to (and shipped on) Intel, Sparc, and Hewlett-Packard computers. NeXTSTEP 3.3 also marked a major new direction, for it included a preliminary version of Foundation. Around this time (1993), the OpenStep initiative also took form. OpenStep was a collaboration between Sun and NeXT to port the higher levels of NeXTSTEP (particularly Application Kit and Display PostScript) to Solaris. The “Open” in the name referred to the open API specification that the companies would publish jointly. The official OpenStep API, published in September of 1994, was the first to split the API between Foundation and Application Kit and the first to use the “NS” prefix. Eventually, Application Kit became known as, simply, AppKit.

By June 1996, NeXT had ported and shipped versions of OpenStep 4.0 that could run Intel, Sparc, and Hewlett-Packard computers as well as an OpenStep runtime that could run on Windows systems. Sun also finished their port of OpenStep to Solaris and shipped it as part of their Network Object Computing Environment. OpenStep, however, never became a significant part of Sun’s overall strategy.

When Apple acquired NeXT Software (as it was then called) in 1997, OpenStep became the Yellow Box and was included with OS X Server (also known as Rhapsody) and Windows. Then, with the evolution of the OS X strategy, it was finally renamed to “Cocoa.”

Cocoa 소프트웨어를 개발할 때 여러 프로그래밍 언어를 사용할 수 있지만, 필수적으로 사용해야 하는 언어는 Objective-C입니다. Objective-C는 객체 지향 프로그래밍을 지원하기 위해 특정 구문 및 의미론적 기능(Smalltalk에서 파생)으로 확장된 ANSI C의 상위 집합입니다. 몇 가지 추가된 규칙은 배우고 사용하기 쉽습니다. Objective-C는 ANSI C를 기반으로 하기 때문에 일반 C 코드와 Objective-C 코드를 자유롭게 혼합할 수 있습니다. 또한 /usr/include의 BSD 라이브러리 인터페이스와 같은 비 Cocoa 프로그래밍 인터페이스에 정의된 함수를 호출할 수 있습니다. 심지어 C++ 코드를 Cocoa 코드와 혼합하고 컴파일된 코드를 동일한 실행 파일에 링크할 수도 있습니다.

OS X 참고

더보기

OS X에서는 PyObjC(파이썬-오브젝티브-C 브리지) 및 RubyCocoa(루비-코코아 브리지)와 같은 스크립팅 브리지를 사용하여 Cocoa로 프로그래밍할 수도 있습니다. 두 브리지 언어를 사용하면 각각의 스크립팅 언어인 Python과 Ruby로 Cocoa 애플리케이션을 작성할 수 있습니다. 이 두 언어는 모두 해석되고 대화형이며 객체 지향 프로그래밍 언어로, 파이썬 또는 루비 객체가 마치 파이썬 또는 루비 객체인 것처럼 오브젝티브-C 객체에 메시지를 보낼 수 있고, 오브젝티브-C 객체가 파이썬 또는 루비 객체에 메시지를 보낼 수도 있습니다. 자세한 내용은 Mac용 Ruby 및 Python 프로그래밍 주제를 참조하세요.

가장 중요한 Cocoa 클래스 라이브러리는 각 플랫폼별로 두 가지 핵심 프레임워크에 패키지로 제공됩니다: OS X용 Foundation/AppKit, iOS용 Foundation/UIKit입니다. 모든 프레임워크와 마찬가지로 동적으로 공유 가능한 라이브러리(또는 이전 버전과의 호환성을 위해 필요한 여러 버전의 라이브러리)뿐만 아니라 헤더 파일, API 문서 및 관련 리소스도 포함되어 있습니다. Foundation과 AppKit 또는 UIKit의 페어링은 Cocoa 프로그래밍 인터페이스를 그래픽 사용자 인터페이스와 관련이 없는 클래스와 관련된 클래스로 나눈 것을 반영합니다. 각 플랫폼의 두 가지 핵심 프레임워크는 최종 제품이 애플리케이션인 모든 Cocoa 프로젝트에 필수적입니다. 두 플랫폼 모두 핵심 프레임워크만큼 중요하고 유용한 핵심 데이터 프레임워크를 추가로 지원합니다.

OS X은 또한 WebKit 및 주소록 프레임워크와 같이 Cocoa 프로그래밍 인터페이스를 게시하는 여러 다른 프레임워크와 함께 제공되며, 시간이 지남에 따라 더 많은 Cocoa 프레임워크가 운영 체제에 추가될 예정입니다. 자세한 내용은 Cocoa 프레임워크를 참조하십시오.

코코아가 OS X에 적용되는 방법

구조적으로 OS X는 Darwin의 기초부터 다양한 응용 프로그램 프레임워크 및 이들이 지원하는 사용자 경험에 이르기까지 일련의 소프트웨어 계층으로 이루어져 있습니다. 중간 계층은 주로(전부는 아니지만) Core Services 및 Application Services 라는 두 가지 주요 프레임워크에 포함된 시스템 소프트웨어를 나타냅니다. 한 계층의 구성 요소는 일반적으로 그 아래 계층에 종속성을 갖습니다. 그림 1-1은 이러한 아키텍처 환경에서 Cocoa의 위치를 보여줍니다.

Figure 1-1  Cocoa in the architecture of OS X

https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CocoaFundamentals/WhatIsCocoa/WhatIsCocoa.html

예를 들어, Aqua 사용자 인터페이스의 렌더링을 주로 담당하는 시스템 구성 요소인 Quartz(코어 그래픽 프레임워크에서 구현됨)는 Application Services 계층의 일부입니다. 그리고 아키텍처 스택의 기반에는 Darwin이 있으며, Cocoa를 포함한 OS X의 모든 것은 궁극적으로 Darwin에 의존하여 작동합니다.

OS X에서 Cocoa에는 OS X용 애플리케이션 개발에 필수적인 두 가지 핵심 Objective-C 프레임워크가 있습니다:

  • AppKit: Application frameworks 중 하나인 AppKit은 응용 프로그램이 사용자 인터페이스에 표시하는 개체를 제공하고 이벤트 처리 및 그리기를 포함한 응용 프로그램 동작의 구조를 정의합니다. AppKit에 대한 설명은 AppKit(OS X)을 참조하십시오.
  • Foundation: 이 프레임워크는 Core Service 계층에서 개체의 기본 동작을 정의하고, 관리 메커니즘을 설정하며, 기본 데이터 유형, 컬렉션 및 운영 체제 서비스를 위한 개체를 제공합니다. Foundation은 본질적으로 Core Foundation 프레임워크의 객체 지향 버전입니다. Foundation 프레임워크에 대한 설명은 Foundation을 참조하세요.

AppKit은 Core Services 계층에 있는 Foundation에 직접적으로 밀접하게 의존합니다. Cocoa 클래스의 개별 또는 그룹과 특정 프레임워크를 자세히 살펴보면 Cocoa가 OS X의 다른 부분에 특정한 의존성을 갖거나 인터페이스에 기반한 기술을 노출하는 위치를 확인할 수 있습니다.

Cocoa가 의존하거나 Cocoa의 class와 method를 통해 노출되는 주요 기본 프레임워크로는 Core Foundation, Carbon Core, Core Graphics(Quartz) 및 Launch Services가 있습니다:

  • Core Foundation: Foundation 프레임워크의 많은 클래스는 동등한 Core Foundation opaque types을 기반으로 합니다. 이러한 긴밀한 관계 덕분에 Core Foundation과 Foundation 타입은 "toll-free bridging"(캐스트 변환)이 가능하며 호환 가능하다. Core Foundation의 구현 중 일부는 Darwin layer의 BSD 부분을 기반으로 합니다.
  • Carbon Core: AppKit과 Foundation은 제공하는 일부 시스템 서비스를 위해 Carbon Core 프레임워크를 활용합니다. 예를 들어, Carbon Core에는 Cocoa가 다양한 파일 시스템 표현 간의 변환에 사용하는 file-system 관리자가 있습니다.
  • Core Graphics: Cocoa 드로잉 및 이미징 클래스는Quartz 및 window server를 구현하는 Core Graphics 프레임워크를 기반으로 (아주 자연스럽게) 밀접하게 구성되어 있습니다.
  • Launch Services: NSWorkspace 클래스는 Launch Services의 기본 기능을 보여준다. Cocoa는 또한 Launch Services의 application-registration 기능을 사용하여 애플리케이션 및 문서와 관련된 아이콘을 가져옵니다.

참고: 이 아키텍처 개요의 의도는 코코아가 OS X의 다른 부분과 맺는 모든 관계를 항목별로 정리하는 것이 아니라 프레임워크의 아키텍처적 맥락에 대한 일반적인 아이디어를 제공하기 위해 더 흥미로운 관계를 조사하는 것입니다.

Apple은 일부 프로그래밍 인터페이스를 통해 애플리케이션에 일반적으로 필요한 기본 기술의 기능에 액세스할 수 있도록 Cocoa를 신중하게 설계했습니다. 그러나 Cocoa의 프로그래밍 인터페이스를 통해 노출되지 않는 일부 기능이 필요하거나 응용 프로그램에서 일어나는 일을 보다 세밀하게 제어해야 하는 경우 기본 프레임워크를 직접 사용할 수 있습니다. (대표적인 예가 코어 그래픽입니다. 코어 그래픽의 함수나 OpenGL의 함수를 호출하면 Cocoa 그리기 메서드에서 가능한 것보다 더 복잡하고 미묘한 이미지를 그릴 수 있습니다). 다행히도 대부분의 종속 프레임워크의 프로그래밍 인터페이스는 Objective-C 언어의 상위 집합인 표준 ANSI C로 작성되므로 이러한 하위 수준의 프레임워크를 사용하는 것은 문제가 되지 않습니다.

추가 읽기: Mac 기술 개요에서는 OS X의 프레임워크, 서비스, 기술 및 기타 구성 요소에 대한 개요를 제공합니다. OS X 휴먼 인터페이스 가이드라인은 Aqua 휴먼 인터페이스의 모양과 작동 방식을 명시합니다.

코코아가 iOS에 적용되는 방법

iOS의 애플리케이션 프레임워크 계층을 Cocoa Touch라고 합니다. Cocoa Touch가 의존하는 iOS 인프라는 OS X의 Cocoa와 유사하지만 몇 가지 중요한 차이점이 있습니다. iOS의 아키텍처 설정을 보여주는 그림 1-2를 그림 1-1의 다이어그램과 비교해 보면, iOS 다이어그램은 플랫폼을 지원하는 소프트웨어가 Core OS 기반에서 일련의 Application Framework로 이어지는 일련의 계층으로 표시되며, 가장 중요한 프레임워크는 UIKit Framework입니다. (Application의 경우) OS X 다이어그램에서와 마찬가지로 iOS 다이어그램에는 Core Services 프레임워크와 그래픽 및 Media 프레임워크와 라이브러리로 구성된 중간 계층이 있습니다. 여기서도 한 계층의 구성요소는 그 아래 계층에 종속성을 갖는 경우가 많습니다.

Figure 1-2  Cocoa in the architecture of iOS

https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CocoaFundamentals/WhatIsCocoa/WhatIsCocoa.html

일반적으로 UIKit을 궁극적으로 지원하는 iOS의 시스템 라이브러리 및 프레임워크는 OS X의 라이브러리 및 프레임워크의 하위 집합입니다. 예를 들어, iOS에는 Carbon 애플리케이션 환경이 없고, 명령줄 액세스(Darwin의 BSD 환경)가 없으며, printing framework 및 services가 없고, 플랫폼에 QuickTime이 없습니다. 그러나 iOS에서 지원하는 디바이스의 특성상 public 및 privtae 프레임워크 중 일부 프레임워크는 iOS에 특화되어 있습니다.

다음은 기초 계층부터 시작하여 iOS 스택의 각 계층에서 발견되는 프레임워크 중 일부를 요약한 것입니다:

  • Core OS: 이 계층에는 커널, 파일 시스템, 네트워킹 인프라, 보안, 전원 관리 및 여러 장치 드라이버가 포함됩니다.
    POSIX/BSD 4.4/C99 API 사양을 지원하고 많은 서비스를 위한 system-level API를 포함하는 libSystem 라이브러리도 있습니다.
  • Core Services: 이 계층의 프레임워크는 문자열 조작, 컬렉션 관리, 네트워킹, URL 유틸리티, 연락처 관리 및 환경 설정과 같은 핵심 서비스를 제공합니다. 또한 GPS, 나침반, 가속도계, 자이로스코프 등 디바이스의 하드웨어 기능에 기반한 서비스도 제공합니다. 이 계층의 프레임워크의 예로는 코어 위치, 코어 모션 및 시스템 구성이 있습니다.
    이 계층에는 문자열 및 컬렉션과 같은 일반적인 데이터 유형에 대한 추상화를 제공하는 프레임워크인 파운데이션과 코어 파운데이션이 모두 포함됩니다. 핵심 프레임워크 계층에는 개체 그래프 관리 및 개체 지속성을 위한 프레임워크인 핵심 데이터도 포함되어 있습니다.
  • Media: 이 계층의 프레임워크와 서비스는 핵심 서비스 계층에 의존하며 Cocoa Touch 계층에 그래픽 및 멀티미디어 서비스를 제공합니다. 여기에는 코어 그래픽, 코어 텍스트, OpenGL ES, 코어 애니메이션, AVFoundation, 코어 오디오 및 비디오 재생이 포함됩니다.
  • Cocoa Touch. 이 계층의 프레임워크는 iOS 기반 애플리케이션을 직접 지원합니다. 여기에는 게임 키트, 지도 키트 및 iAd와 같은 프레임워크가 포함됩니다. Cocoa Touch 계층과 핵심 서비스 계층에는 각각 iOS용 애플리케이션을 개발하는 데 특히 중요한 Objective-C 프레임워크가 있습니다. 이들은 iOS의 핵심 Cocoa 프레임워크입니다:
  • UIKit. 이 프레임워크는 애플리케이션이 사용자 인터페이스에 표시하는 객체를 제공하고 이벤트 처리 및 그리기를 비롯한 애플리케이션 동작의 구조를 정의합니다. UIKit에 대한 설명은 UIKit(iOS)를 참조하십시오.
  • Foundation. 이 프레임워크는 객체의 기본 동작을 정의하고, 관리 메커니즘을 설정하며, 기본 데이터 유형, 컬렉션 및 운영 체제 서비스를 위한 객체를 제공합니다. 파운데이션은 본질적으로 코어 파운데이션 프레임워크의 객체 지향 버전이며, 파운데이션 프레임워크에 대한 자세한 내용은 파운데이션을 참조하세요.

 

-  추후 업데이트 예정


 

 

Cocoa framework는 macOS용 애플리케이션을 개발하는 데 사용되는 Apple의 네이티브 객체 지향 API입니다.

  1. Foundation Framework:
    • 기본 데이터 타입과 컬렉션 타입을 다루는 클래스(예: NSString, NSArray, NSDictionary)와 네트워킹, 파일 접근, 데이터 처리를 위한 유틸리티를 제공합니다.
    • 프로그램 간의 데이터 교환, 데이터 저장과 같은 기능을 담당합니다.
  2. AppKit Framework:
    • 사용자 인터페이스를 구축하는 데 필요한 모든 요소를 제공합니다. 이에는 버튼, 텍스트 필드, 슬라이더 등의 UI 컴포넌트와 이벤트 처리, 그래픽, 창 관리 등의 기능이 포함됩니다.
    • AppKit은 전통적인 macOS 애플리케이션의 데스크톱 환경에 적합하게 설계되었습니다.
  3. Core Data:
    • 데이터 모델의 관리를 위해 사용되며, 데이터를 SQLite 데이터베이스, XML, 바이너리 파일 등의 형식으로 저장할 수 있게 해줍니다.
    • 모델 객체, 관계 및 상속을 쉽게 관리할 수 있도록 도와주는 강력한 데이터 관리 프레임워크입니다.
  4. Cocoa Bindings:
    • 데이터와 UI 요소를 바인딩하여 코드를 간소화시키고, MVC(Model-View-Controller) 패턴을 보다 쉽게 구현할 수 있도록 도와줍니다.
    • 사용자 인터페이스 요소를 데이터 소스에 직접 연결하고, 데이터 변경을 자동으로 UI에 반영하도록 할 수 있습니다.

Cocoa는 Objective-C와 Swift 언어를 지원하며, 이를 통해 개발자들은 더 강력하고 효율적인 macOS 애플리케이션을 구축할 수 있습니다. 각 구성 요소는 각기 다른 기능을 제공하며, 이들을 조합함으로써 풍부하고 다양한 기능을 갖춘 애플리케이션을 개발할 수 있습니다.

 


 

ref