본문 바로가기

프로그래밍/iphone

Cocoa 개요.

[스터디중인 Cocoa 정리 포스터1]

Cocoa는 Mac OS X을 위한 주요 응용프로그램환경중 하나.
Cocoa의 객체 지향 API는 자바, Objective-C로 구성된 응용프로그램의 개발을 쉽게 한다.
이런 Cocoa는 프레임워크가 된다.(공유객체라이브러리의 집합개념)

Cocoa 수행능력                                   
  • 시스템 리소스로의 액세스 조정->프로그램이 타 어드레스 침범 방지->핵심운영체제내부작동으로부터 프로그램분리
  • 프로그램 제작에 필요한 인프라제공
  • 객체지향적
Cocoa에서는 QuickTime 과 OpenGL을 이용해서 개발이 가능하다.

기본적 객체지향개념                                                                             

[객체]
인스턴스 변수 객체 = 데이터 운용절차+ 데이터; 개별적 프로그램 단위
객체 데이터 in 인스턴스 변수
메소드(Methods) = 함수(인스턴스변수의 데이터 영향을 주는넘 or 데이터를 사용하는넘)

[캡슐화]
아래 그림처럼 데이터가 메소드에 의해 감싸진 모델이 객체. 캡슐화라고 부른다.
실제 데이터가 메소드에 의해 캡슐화됨. 
따라서, 외부코드들은 직접적으로 데이터로의 액세스가 불가능해짐
-->메세지를 전송해서 데이터를 요구해야함
(즉 메소드를 통해서만 객체로의 액세스가능)

From Learning Cocoa.pdf

[클래스]
클래스는 객체를 생성하는 프로그램 엔티티(entity).
인스턴스 구조, 인터페이스를 정의하게 되고, 동작을 지정한다.
따라서, 새 객체가 필요하면 먼저 새 클래스를 정의해야한다.
이때 객체가 가질 데이터구조, 메소드를 지정하면 됨.
하나의 클래스에서 수많은 객체생성이 가능함.

[메소드&메세지]
객체를 위해 클래스가 구현하는 프로시저
public 과 private 로 나뉘며, public 의 경우 클래스 헤더파일에 선언, private 의 경우엔 구현(implemetation)파일에 나타난다.
메시지의 경우는 메소드 발생 요건이 되는데, 특정 기능을 수행하도록 요청을 하게된다.
Objective-C 에서는 메세지 처리시 [   ] 를 이용.

return = [calnumber square:numberA]
반환값 수신자 메소드이름:인수
calnumber 이 메시지 수신하는 객체 square  이 메소드가 된다. square:numberA가 메시지가 됨
calnumber이 받게된 메시지를 내부에서 계산을 한후 return 으로 저장.

Objective-C에서는 메세지인수를 라벨로 식별. 콜론후 위치
인수가 여러개일 경우 아래 와 같이 표현.키워드당 1개의 인자
from learning cocoa.pdf

리턴값의 경우 동일한 유형의 변수이어야 함.
메세지의 중첩이 가능하므로, 굳이 따로 변수선언없이 코딩이 가능. 가독성이 떨어지긴하다..

위의 선언의 경우,
newString 의 변수에 리턴값을 저장하게 되는데
stringOne 이 수신자1(receiver 1) 이 되며 이후가 메세지1이 된다.
메세지1에는 인자부분에 또다시 NSString 으로 보낸 메시지가 포함되어있다.
NSString 이 수신자2(receiver2) 이후가 메세지2가 됨
또, 인자부분에 stringTwo 가 receiver3, rangeOfString이 메소드가 된다.

[다형성&동적 바인딩]
다형성(polymorphism)-동일한 이름의 메소드를 가지더라도 객체가 다를 경우엔 동일한 메시지를 수신해도 다른 방법으로 응답을 함.
다형성 지원 유무의 예제 코드

C의 경우 다형성지원이 않됨. 
따라서, 도형의 추가시 또다른 case 를 만들어내서 수정을 해야한다.
하지만, objective-c 의 경우 디스플레이 함수를 손볼 필요가 없음.

동적바인딩(Dynamic binding) - 수신객체와 메세지가 실행중 결정가능
런타임프로세스는 이 동적바인딩을 이용해서, 적당한 메소드를 찾게 된다.

objective-c 에서는 만능인 id 라는 객체를 사용하게 되는데,
해당 객체의 클래스 포인터를 포함해서, 특정 클래스를 정의할 필요가 없게 된다.

[상속]
상위클래스의 속성과 동작을 물려받게 됨