코코아(API)
Cocoa (API)개발자 | 애플사 |
---|---|
기입처 | C, C++, Objective-C, Swift |
운영 체제 | MacOS |
유형 | 소프트웨어 프레임워크 |
면허증. | 독자 사양 오픈 소스[citation needed] 컴포넌트 포함 |
웹 사이트 | 애플 개발자 |
코코아는 데스크톱 운영 체제 macOS용 Apple의 기본 객체 지향 애플리케이션 프로그래밍 인터페이스(API)입니다.
코코아는 Foundation Kit, Application Kit 및 코어 데이터 프레임워크로 구성되어 있습니다.Cocoa.h
헤더 파일 및 C 표준 라이브러리 및 Objective-C [1]런타임과 같은 라이브러리에 포함된 라이브러리와 프레임워크.
코코아 애플리케이션은 일반적으로 Apple이 제공하는 개발 도구, 특히 Xcode(이전 Project Builder)와 Interface Builder(현재는 Xcode의 일부)를 사용하여 개발되며 프로그래밍 언어 Objective-C 또는 Swift를 사용합니다.그러나 Cocoa 프로그래밍 환경은 Clozure CL, LispWorks, Object Pascal, Python, Perl, Ruby 및 AppleScript와 같은 다른 도구를 사용하여 PasCocoa, PyobjC, CamelBones, RubyCococoa 및 DiveC와 같은 브리지 메커니즘을 사용하여 액세스할 수 있습니다.브릿지 메커니즘이 필요 없는 맥루비(MacRuby)라는 이름의 루비 언어 구현은 이전에 애플에 의해 개발되었으며, Nu는 브릿지 없이 코코아에서 사용할 수 있는 리스프 같은 언어이다.또한 Objective-C Cocoa 프로그램을 간단한 텍스트 에디터로 작성하여 명령줄 또는 makefile에서 GCC(GNU 컴파일러 컬렉션) 또는 Clang을 사용하여 수동으로 빌드할 수도 있습니다.
최종 사용자의 경우 코코아 애플리케이션은 코코아 프로그래밍 환경을 사용하여 작성된 애플리케이션입니다.코코아 프로그래밍 환경은 많은 공통 UI 요소(버튼, 스크롤바 등)를 제공하고 애플리케이션의 많은 측면을 자동화하여 Apple의 휴먼 인터페이스 지침을 준수하기 때문에 이러한 애플리케이션은 일반적으로 익숙한 모양과 느낌을 가지고 있습니다.
iOS, iPadOS, tvOS 및 watchOS에는 제스처 인식, 애니메이션 및 다른 그래픽 제어 요소 세트를 포함하는 Cocoa Touch라는 유사한 API가 있습니다.아이폰, 아이팟 터치, 아이패드, 애플 TV, 애플 워치와 같은 애플 기기용 애플리케이션에 사용됩니다.
역사
코코아는 1980년대와 1990년대에 NeXT가 개발한 NeXTSTEP 및 OpenStep 프로그래밍 환경에서 여러 소프트웨어 프레임워크(주로 App Kit 및 Foundation Kit)의 계보를 잇고 있습니다.애플은 1996년 12월 NeXT를 인수한 뒤 오픈스텝의 직접적인 후계자가 될 랩소디 운영체제 개발에 착수했다.블루박스라는 이름의 클래식 Mac OS 애플리케이션을 위한 에뮬레이션 기반을 갖추게 되었습니다.OpenStep 기반의 라이브러리와 바이너리 지원은 옐로우 박스라고 불립니다.랩소디는 Mac OS X로 진화했고, 옐로우 박스는 코코아가 되었다.따라서 코코아 클래스는 NSString 또는 NSArray와 같은 문자로 시작합니다.이는 OpenStep 프레임워크의 원래 소유권 용어인 [2]NextSTEP의 약자입니다.
OpenStep 개발에 투입된 작업의 대부분은 Mac OS X 개발에 적용되었으며, 코코아가 가장 눈에 띄는 부분입니다.하지만 차이가 있다.예를 들어, NexTSTEP과 OpenStep은 텍스트와 그래픽을 화면에 표시하기 위해 Display PostScript를 사용한 반면, 코코아는 애플의 Quartz(Portable Document Format(PDF) 이미징 모델을 사용하지만 기본 기술은 사용하지 않음)에 의존합니다.또한 코코아는 NSURL 및 WebKit HTML 클래스 등을 포함한 인터넷 지원 수준을 가지고 있으며 OpenStep은 NSFileHandle 클래스 및 Berkeley 소켓을 통한 관리 네트워크 연결에 대한 기본적인 지원만 가지고 있습니다.
그 결과 나온 소프트웨어 프레임워크는 편의를 위해 코코아라는 이름을 받았습니다. 왜냐하면 그 이름은 이미 애플에 의해 상표권이 있었기 때문입니다.현재 이 이름이 사용되기 전 수년 동안, 애플의 코코아 상표는 어린이를 위한 멀티미디어 프로젝트 디자인 애플리케이션의 이름으로 유래되었습니다.이 애플리케이션은 원래 KidSim이라는 이름으로 Apple Advanced Technology Group에서 개발되었으며, 그 후 "Cocoa"라는 이름으로 이름이 변경되어 상표로 등록되었습니다.애플을 위한 코코아를 개발하기 위해 고용된 피터 젠슨이 만든 이 이름은 웹 페이지에 [3]내장되어 있기 때문에 "Java for kids"를 떠올리게 하기 위한 것이었다.이 소프트웨어 프레임워크에 새로운 상표를 등록할 때 발생할 수 있는 지연을 피하기 위해 상표, 즉 "Cocoa"라는 이름을 다시 사용했습니다.원래 "코코아" 프로그램은 스티브 잡스의 애플 복귀에 따른 합리화 중 하나로 애플에서 중단되었다.그 후 서드파티에 라이선스되어 2014년까지 Stagecast Creator로 판매되었다.
메모리 관리
코코아 환경의 특징 중 하나는 동적으로 할당된 메모리를 관리하는 기능입니다.공급업체와 사용자 모두 대부분의 클래스가 파생된 Foundation Kit의 NSObject 클래스는 메모리 관리를 위한 참조 카운트 체계를 구현합니다.NSObject 루트 클래스에서 파생된 객체는retain
및 arelease
유지 카운트를 유지합니다.라는 제목의 방법retainCount
존재하지만 이름과 달리 일반적으로 개체의 정확한 보유 카운트를 반환하지 않습니다.주로 시스템 수준의 목적으로 사용됩니다.수동으로 기동하는 것은 추천하지 않습니다.
새로 할당된 개체:alloc
또는copy
보유 카운트는 1입니다.해당 오브젝트 전송 aretain
메시지는 유지 카운트를 증가시키고 메시지를 전송합니다.release
message를 지정하면 유지 카운트가 감소합니다.객체의 보유 카운트가 0에 이르면 C++ 소멸자와 유사한 절차에 의해 할당 해제됩니다. dealloc
가 기동하는 것은 보증되지 않습니다.
Objective-C 2.0부터 Objective-C 런타임은 옵션의 가비지 컬렉터를 실장했습니다.이 가비지 컬렉터는 이제 사용되지 않고 Automatic Reference Counting(ARC; 자동 참조 카운트)에 의해 폐지되었습니다.이 모델에서 런타임은 "유지" 및 "해제"와 같은 코코아 참조 계수 작업을 no-ops로 전환했습니다.가비지 컬렉터는 Objective-C 2.0의 iOS 구현에 존재하지 않습니다.Objective-C의 가비지 컬렉션은 우선순위가 낮은 백그라운드 스레드에서 실행되며 사용자 경험을 응답하기 위해 Coco의 사용자 이벤트에서 중지될 수 있습니다.레거시 가비지 컬렉터는 Mac OS X 버전 10.13에서도 사용할 수 있지만 Apple에서 제공하는 응용 프로그램은 이를 사용하지 않습니다.
2011년 LLVM 컴파일러는 Automatic Reference Counting(ARC; 자동 참조 카운트)을 도입했습니다.이는 Objective-C 소스 코드의 정적 분석을 수행하고 필요에 따라 유지 및 해제 메시지를 삽입함으로써 기존의 가비지 컬렉터를 대체합니다.
주요 프레임워크
코코아는 프레임워크라고 불리는 세 개의 Objective-C 객체 라이브러리로 구성됩니다.프레임워크는 실행 시 프로그램의 주소 공간에 동적으로 로드될 수 있는 컴파일된 개체인 공유 라이브러리와 기능적으로 유사하지만 프레임워크는 관련 리소스, 헤더 파일 및 문서를 추가합니다.코코아 프레임워크는 번들의 한 종류로 구현되며, 표준 위치에 전술한 항목을 포함합니다.
- Foundation Kit(Foundation)는 NextSTEP [4]3의 Enterprise Objects Framework에 처음 등장했습니다.OpenStep 작업의 일부로 개발되었으며, 이후 1994년 이 시스템이 출시되었을 때 OpenStep의 AppKit의 기반이 되었습니다.MacOS에서 Foundation은 Core Foundation을 기반으로 합니다.Foundation은 문자열 및 값 조작, 컨테이너 및 반복, 분산 컴퓨팅, 이벤트 루프(실행 루프) 및 그래픽 사용자 인터페이스에 직접 연결되지 않은 기타 기능을 제공하는 일반적인 객체 지향 라이브러리입니다.프레임워크의 모든 클래스 및 상수에 사용되는 "NS" 접두사는 NeXT와 Sun Microsystems가 공동 개발한 코코아의 OPENSTEP 유산에서 유래했습니다.
- 어플리케이션 키트(AppKit)는 오리지널 NextSTEP 어플리케이션 키트의 직계입니다.여기에는 프로그램에서 그래픽 사용자 인터페이스를 만들고 상호 작용하기 위해 사용할 수 있는 코드가 포함되어 있습니다.AppKit은 Foundation 위에 구축되며 동일한 NS 접두사를 사용합니다.
- 핵심 데이터는 Foundation과 Cocoa에 포함된 Cocoa.[1]h에서 찾을 수 있는 객체 지속성 프레임워크입니다.
코코아 아키텍처의 중요한 부분은 포괄적인 뷰 모델입니다.이것은 어플리케이션 프레임워크의 일반적인 방법에 따라 구성되지만 Quartz가 제공하는 PDF(Portable Document Format) 도면 모델을 기반으로 합니다.이것에 의해, PostScript와 같은 그리기 커맨드를 사용해 커스텀 그리기 컨텐츠를 작성할 수 있습니다.또, 자동 프린터 지원 등도 가능합니다.Cocoa 프레임워크는 그래픽 그리기의 모든 클리핑, 스크롤, 스케일링 및 기타 잡무를 관리하므로 프로그래머는 기본 인프라스트럭처 구현에서 해방되어 애플리케이션 콘텐츠의 고유한 측면에 집중할 수 있습니다.
모델 뷰 컨트롤러
Xerox PARC의 Smalltalk 팀은 결국 쉬운 개발과 높은 코드 재사용으로 이어지는 설계 철학을 정착시켰습니다.MVC(Model-View-Controller)라는 이름의 이 개념은 애플리케이션을 3개의 상호작용 객체 클래스 세트로 나눕니다.
- 모델 클래스는 문제 영역 데이터 및 작업(예: 사람/부서/부처 목록, 양식화된 텍스트 섹션/문단/각주 포함 문서)을 나타냅니다.
- 뷰 클래스는 인간과 컴퓨터의 상호 작용을 위한 시각적 표현과 제공(캡션된 아이콘의 스크롤 가능한 그리드 및 가능한 작업의 팝업 메뉴 등)을 구현합니다.
- 컨트롤러 클래스에는 모델 데이터를 뷰 표현으로 표면화하고, 어피던스로 시작된 사용자 액션을 모델 작업에 매핑하며, 상태를 유지하여 두 작업을 동기화하는 논리가 포함되어 있습니다.
코코아의 디자인은 MVC 원칙을 공정하게 적용하지만 절대적으로 엄격하지는 않습니다.OpenStep에서 제공되는 대부분의 클래스는 (AppKit에 있는) 높은 수준의 View 클래스이거나 NSString과 같은 비교적 낮은 수준의 모델 클래스 중 하나였습니다.유사한 MVC 시스템에 비해 OpenStep은 강력한 모델 계층이 부족했습니다.예를 들어 "문서"를 나타내는 주식 클래스는 없었습니다.코코아로 전환하는 동안 모델 계층이 크게 확장되어 데스크톱 애플리케이션에 공통적인 기능을 제공하기 위해 사전 롤링된 여러 클래스를 도입했습니다.
Mac OS X 10.3에서는 컨트롤러 계층에 대해 미리 정의된 동작을 제공하는 NSController 클래스 패밀리가 도입되었습니다.이러한 클래스는 키-값 관찰 및 키-값 바인딩과 같은 프로토콜을 광범위하게 사용하는 코코아 바인딩 시스템의 일부로 간주됩니다.'바인딩'이라는 용어는 종종 뷰와 컨트롤러 사이의 두 개체 간의 관계를 나타냅니다.바인딩을 통해 개발자는 세분화된 동작을 조정하기보다는 선언적 관계에 더 집중할 수 있습니다.
Mac OS X 10.4의 등장으로, 애플은 모델 계층에서 변경 추적과 지속성을 표준화하는 코어 데이터 프레임워크를 도입함으로써 이 기반을 더욱 확장했습니다.실제로 이 프레임워크는 애플리케이션 데이터 변경, 필요에 따라 변경 취소, 디스크 저장 및 다시 읽기 프로세스를 크게 간소화합니다.
3개의 MVC 도메인 모두에 대한 프레임워크 지원을 제공할 때, Apple의 목표는 개발자가 작성해야 하는 보일러 플레이트 또는 "글루" 코드의 양을 줄이고 애플리케이션 고유의 기능에 시간을 할애할 수 있는 자원을 확보하는 것입니다.
레이트 바인딩
대부분의 객체 지향 언어에서 메서드에 대한 호출은 메모리 내의 코드에 대한 포인터로 물리적으로 표현됩니다.특정 명령어 처리 클래스가 필요하기 때문에 일반적으로 책임사슬 패턴에 따라 구성되므로 응용 프로그램 설계가 제한됩니다.코코아는 대부분 이 접근법을 유지하지만 Objective-C의 늦은 결합은 더 많은 유연성을 열어준다.
Objective-C에서 메서드는 호출 메서드를 설명하는 문자열인 셀렉터에 의해 표시됩니다.메시지가 전송되면 실렉터는 Objective-C 런타임으로 전송되어 사용 가능한 메서드 목록과 대조되며 메서드의 구현이 호출됩니다.셀렉터는 텍스트 데이터이므로 이를 파일에 저장하거나 네트워크 또는 프로세스 간에 전송하거나 다른 방법으로 조작할 수 있습니다.메서드의 구현은 컴파일 시간이 아닌 런타임에 검색됩니다.이로 [5]인해 약간의 퍼포먼스 저하가 발생하지만, 레이트바인딩에 의해 같은 실렉터가 다른 실장을 참조할 수 있습니다.
이와 유사한 토큰으로 코코아는 KVC([6]key-value coding)라고 불리는 광범위한 데이터 조작 방법을 제공합니다.이를 통해 런타임에 이름을 기준으로 개체의 데이터 또는 속성을 조회하거나 변경할 수 있습니다.속성 이름은 값의 키 역할을 합니다.전통적인 언어에서는 이러한 늦은 바인딩은 불가능합니다.KVC는 뛰어난 설계 유연성을 가져옵니다.개체의 유형을 알 필요는 없지만 KVC를 사용하여 해당 개체의 속성을 검색할 수 있습니다.또, 코코아 용어 KVO(Key-Value Observation)를 이용해 시스템을 확장함으로써, 언도레도의 자동 서포트를 제공한다.
레이트 스태틱바인딩은 스태틱바인딩과 다이내믹바인딩 사이의 바인딩의 변형입니다.프로그램이 실행되기 전 이름의 바인딩을 정적(얼리)이라고 합니다.프로그램 실행 시 실행되는 바인딩은 동적(레이트 또는 가상)입니다.
리치 오브젝트
코코아의 가장 유용한 특징 중 하나는 시스템이 제공하는 강력한 기본 객체입니다.예를 들어 Foundation 클래스를 고려합니다.NSString
그리고.NSAttributedString
, 유니코드링을 제공합니다.NSText
AppKit의 system. 프로그래머가 문자열 오브젝트를 GUI에 배치할 수 있도록 합니다.
NSText
및 관련 클래스는 문자열 표시 및 편집에 사용됩니다.관련된 오브젝트 컬렉션을 통해 어플리케이션은 간단한 한 줄 텍스트 입력 필드부터 완전한 여러 페이지, 여러 열 텍스트 레이아웃 스키마까지 모든 것을 구현할 수 있습니다.케이닝, 연결, 임의의 도형을 둘러싼 텍스트 실행, 완전한 Unicode 지원, 안티앨리어싱된 렌데프 등의 전문 타이포그래피 기능을 갖추고 있습니다.호출음. 문단 레이아웃은 텍스트 보기에 연결할 수 있는 내장된 "룰러" 개체를 사용하여 자동으로 또는 사용자가 제어할 수 있습니다.맞춤법 검사는 시스템 전체 언어 사전을 사용하여 자동으로 수행됩니다.Undo/Redo 무제한 지원이 내장되어 있습니다.내장된 기능만 이용하면 텍스트 에디터 애플리케이션을 10줄의 코드로 작성할 수 있다.새로운 컨트롤러 오브젝트에서는 이 값이 0에 가까워질 수 있습니다.확장이 필요할 때, Cocoa의 Objective-C를 사용하면 이것이 간단한 작업이 됩니다.Objective-C에는 기존 클래스를 "in-place"로 수정할 수 있는 "categories" 개념이 포함됩니다.프레임워크의 원래 클래스를 변경하지 않고, 소스에 액세스하지 않고도 카테고리에서 기능을 수행할 수 있습니다.다른 일반적인 언어에서는 이 동일한 작업을 수행하려면 추가된 기능을 지원하는 새로운 서브클래스를 도출한 후 원래 클래스의 모든 인스턴스를 새로운 서브클래스의 인스턴스로 교체해야 합니다.
구현 및 바인딩
코코아 프레임워크는 Objective-C에 기재되어 있다.Objective-C를 보다 대중적인 언어로[7] 대체하기 위해 코코아 프레임워크(Java bridge로 명명)를 위한 Java 바인딩도 제공되었지만, 이러한 바인딩은 코코아 개발자들 사이에서 인기가 없었고, 코코아의 메시지 전달 의미론도 [8]Java와 같은 정적 유형의 언어로 잘 번역되지 않았다.런타임 바인딩에 대한 코코아의 필요성은 코코아의 주요 특징 중 많은 부분을 자바에서 사용할 수 없다는 것을 의미합니다.2005년, 애플은 자바 브릿지가 폐지될 것이라고 발표했는데, 이는 10.4 이후 맥OS 버전에서 코코아에 추가된 기능이 코코아-자바 프로그래밍 인터페이스에 추가되지 않을 것임을 의미한다.
애플 월드와이드 개발자 컨퍼런스(WWDC) 2014에서 애플은 Objective-C를 대체할 [9]새로운 프로그래밍 언어인 Swift를 선보였다.
AppleScriptObjC
원래 AppleScript Studio는 더 간단한 코코아 [10]애플리케이션을 개발하기 위해 사용될 수 있었다.하지만 눈표범에 관해서는 더 이상 사용되지 않는다.코코아 [11]프레임워크를 사용하는 동안 AppleScript에서 프로그래밍을 허용하는 AppleScriptObjC는 AppleScript에서 프로그래밍을 허용합니다.
기타 바인딩
다른 언어에서 사용할 수 있는 서드파티 바인딩에는 Clozure CL, Monobjc 및 NObjective(C#), Coco#(CLI), Cocodao 및 D/Objective-C Bridge,[12][13] LispWorks, CamelBones(Python), FPCAzocoa(Pacoa) 등이 있습니다.Nu는 Objective-C 객체 모델을 직접 사용하므로 바인딩 없이 코코아 프레임워크를 사용할 수 있습니다.
기타 구현
또한 GNUstep 및 Cocotron과 [15]같은 코코아 프레임워크의 주요 부분의 오픈 소스 구현이 있으며, 이를 통해 크로스 플랫폼 코코아 애플리케이션 개발은 Microsoft Windows 및 Linux와 같은 다른 운영 체제를 대상으로 할 수 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ a b Mac 테크놀로지 개요: OS X 프레임워크Developer.apple.com 를 참조해 주세요.2013년 9월 18일 취득.
- ^ Amit Singh (June 19, 2006). Mac OS X Internals: A Systems Approach. ISBN 0-321-27854-2.
Cocoa is an important inheritance from NeXT, as indicated by .. the "NS" prefix
- ^ Mardesich, Jodi (April 14, 1997). "A Sour Note in Apple's Rhapsody Once-Loyal Software Writers Wary of New OS as Crucial Conference Looms". No. Morning Final. San Jose Mercury News. Retrieved August 13, 2015.
- ^ 하이브리드 월드Cilinder.be 를 참조해 주세요.2013년 9월 18일 취득.
- ^ Wikibooks - 목표 C의 장점
- ^ "Key-Value Coding Programming Guide". Retrieved September 27, 2021.
- ^ Steve Klingsporn (2003). "Writing Cocoa Apps in Java". MacTech. 19 (12).
- ^ "Using the Java Bridge" (PDF). Apple Inc.
Because Java is a strongly typed language, it requires more information about the classes and interfaces it manipulates at compile time. Therefore, before using Objective-C classes as Java ones, a description of them has to be written and compiled.
- ^ "Apple's top secret Swift language grew from work to sustain Objective-C, which it now aims to replace".
- ^ "AppleScript Studio Programming Guide (Not Recommended): About AppleScript Studio". Apple, Inc. Retrieved November 20, 2013.
- ^ "AppleScriptObjC Release Notes". Apple, Inc. Retrieved November 20, 2013.
- ^ 코코다오, 코코아 애플리케이션을 D 언어로 만드는 브리지.
- ^ 코코아의 언어 바인딩 메커니즘인 D/Objective-C Bridge.
- ^ 보다 광범위한 구현 목록
- ^ 코코트론, 코코아의 무료 소프트웨어 구현.
참고 문헌
- Aaron Hillegass:Mac OS X용 코코아 프로그래밍, Adison-Wesley, 2008년 제3판, Paperback, ISBN 0-321-50361-9.
- Stephen Kochan: Programming in Objective-C, Sams, 제1판 2003, Paperback, ISBN 0-672-32586-1.
- 마이클 빔, 제임스 던컨 데이비슨:코코아, 오라일리, 2003년 제1판, 페이퍼백, ISBN 0-596-00462-1.
- Erick Tejkowski:Coco Programming for Dummies, 제1판 2003, Paperback, ISBN 0-7645-2613-8.
- 심슨 가핑클, 마이클 K 마호니:코코아 어플리케이션 구축:A Step by Step Guide, O'Reilly, 제1판 2002, Paperback, ISBN 0-596-00235-1.[1]
- Paris Butfield-Addison, Jon Manning: Objective-C, O'Reilly, 2012년 제3판, Paperback, ISBN 978-1-449-9를 통한 코코아 학습.
- 스콧 번뇌, 에릭 M. 벅, 도널드 에이 야크트맨: 코코아 프로그래밍, 샘스, 2002년 제1판, 페이퍼백, ISBN 0-672-32230-7.
- 에릭 M. 벅, 도널드 A. Yacktman: 코코아 디자인 패턴, Addison-Wesley Professional, 2009년 제1판, Paperback, ISBN 978-0321535023
- 빌 치즈먼:Mac OS X용 코코아 레시피, Peachpit Press, 2002년 제1판, Paperback, ISBN 0-201-87801-1.
- 앤드류 던컨:Objective-C Pocket Reference, O'Reilly, 제1판 2002, Paperback, ISBN 0-596-00423-0.
외부 링크
- 공식 웹사이트[데드링크]
- Mac Developer Library, Coco Layer, Apple 설명서
- iDevApps, Mac 프로그래밍 포럼
- 코코아 데브 센트럴
- 코코아 개발
- 스택 오버플로:코코아
- ^ Garfinkel, Simson; Mahoney, Michael K. (2002). Building Cocoa Applications: A Step by Step Guide. O'Reilly. CiteSeerX 10.1.1.394.3248.