@implementation Shape 에 구현해 놓은 메소드들을 보자. @implementation Shape - (void) setFillColor : (ShapeColor) c { fillColor = c; } - (void) setBounds : (ShapeRect) b { bounds = b; } - (void) draw { // draw 는 구현하지 않는다. } @end Shape 에서 draw 를 구현하지는 않지만 하위 클래스가 상속받아 구현하도록 항상 정의한다. 하위 클래스에서 -(void) draw 를 구현하면 된다.
@interface Circle : NSObject @interface 지시자 다음에는 클래스 이름이 따라온다. 콜론(:) 뒤에 오는 식별자가 상속받으려는 상위 클래스의 이름이다. Objective-C 는 다중 상속을 지원하지 않는다. @interface Circle : Shape @end // Circle @interface Rectangle : Shape @end // Rectangle * Circle과 Rectangle의 인터페이스를 Shape에서 상속
Circle fillColor bounds setFillColor: setBounds: draw Rectangle fillColor bounds setFillColor: setBounds: draw 이와 같이 중복되는 부분이 많으면 비효율 적이다. 중복되는 코드를 한곳에 합쳐서 정리 하는 방법 - 상속. Shape 클래스를 상속받아 Circle 과 Rectangle 를 정의 하면 이와 같다. Circle 클래스를 수퍼클래스( 부모클래스 )라 부른다. Circle 과 Rectange 클래스를 서브클래스 ( 자식클래스 ). Circle 과 Rectangle 은 Shape 로 부터 상속을 받았기 때문에 Shape의 인스턴스 변수 fillColor 와 bounds 를 받는다. 메소드 또한 상속.
* 메소드 선언 (method declarations) : 내가 지원하는 기능이라고 선언 - (void) draw; - (void) setFillColor: (ShapeColor) fillColor; - (void) setBounds: (ShapeRect) bounds; ----------------------------------------------- - (반환타입) 메소드 이름: (반환타입) 인수; - 기호는 메소드를 선언한다는 의미.
@interface Circle : NSObject + @interface Circle : 컴파일러에게 "Circle이라는 이름을 갖는 새 클래스를 위한 인터페이스가 있다"고 알려준다. + NSObject : 컴파일러에게 "Circle클래스가 NSObject 클래스를 기반으로 한다"는 것을 알려준다. 모든 Circle은 NSObject이기도 하며 또한 NSObject 클래스가 정의하고 있는 모든 것들을 상속받는다는 것을 알려준다.
Xcode에서 프로그램을 편집하고 있는 경우, 프로그램을 실행할 때 파일 경로 전달은 이렇게 한다. 우선, Xcode의 왼쪽 파일 목록에서 Executables를 아래로 펼치고, 프로그램 이름을 더블 클릭한다. 그럼, [Executables "파일이름" Info] 창이 뜨는데, 여기서 Arguments 섹션에 있는 + 기호를 클릭하고 실행 인수를 입력한다. 이 인수는 파일의 경로가 되겠다. 이제 이 창을 닫고 프로그램을 실행한다. Xcode는 실행인수를 파일의 argv 배열에 전달한다.
NSString 요소는 상당히 많은 수의 기능을 담고 있으며 코코아에서 문자열이 팔요한 곳이면 언제 어디서나 사용된다. NSString 의 주요 메소드는 Foundation/NSString.h에서 선언되어 있다. NSString 은 내용의 변경이 불가능하다. 일단 메모리에 문자열이 할당되면 다음에 문자열을 바꾼다고 그 자리에 들어가지 않고 다른 메모리영역에 할당된다. NSString 의 기능 : - 문자열의 길이를 알려줌 -다른 문자열과의 비교 -정수 또는 실수로의 값 변환 등등등..... Ex) NSString *strTest = @"1234"; NSLog(@"length : %d, integer value = %d", [strTest length], [strTest integerValue]); //l..
Mac OS X 는 Apple의 현 CEO인 스티브 잡스(Steave Jobs)가 운영했던 NeXT의 객체지향 기술을 활용하고 있다. 1988년 NeXT가 개발한 NeXT 컴퓨터는 Unix를 기반으로 한 Machintosh 이상이라고 불릴 정도로 진보적인 GUI 환경을 보였다. 이 NeXT 컴퓨터의 기본 소프트웨어인 NEXTSTEP (후에 멀티 플랫폼 환경을 지원하면서 OPENSTEP으로 개명)의 개발언어가 바로 Objective-C 이다. 그리고 Mac OS X 에서 애플리케이션을 실행하기 위해 사용되는 Cocoa API는 OPENSTEP의 주요 API를 계승하고 발전시킨 것이다. 사실 Cocoa API 에 사용되는 NS라는 접두어는 NEXTSTEP에서 유래된 것이다. - Cocoa API 는 접두사 ..
Object-C 에서는 #import 라는 전처리기 지시자를 사용한다. #import 는 #include 와는 달리 같은 헤더 파일이 여러번 임포트되더라도 단 한번만 읽는다. #include 를 쓰다보면 헤더 파일 내에서 또 다른 헤더 파일을 인클루드 하는 경우가 종종 있는데, 이런 식으로 하다보면 매크로나 타입의 정의가 그 횟수만큼 반복되면서 중복 정의 에러가 발생하기 쉽다. - #import 는 그파일에서 실제로 #import 가 같은 헤더 파일을 여러번 포함해도 헤더 파일이 한번만 포함된다는 것을 보장.