objective-C, 오브젝트C, 오브젝티브C) Class(클래스)
객체는 데이터 변수와 메서드라 불리는 함수들로 구성, 이 함수를 호출하고 실행함으로써 작업을 수행한다.
(이것을 총괄하여 멤버(member)라고 부른다.)
오브젝티브-C 클래스는 interface와 implementation으로 정의된다.
클래스는 오브젝트가 생성되었을 때 어떠한 못브을 보일 것인지 정의하고, 메서드는 어떠한 일을 하는지, 멤버 변수는 어떠한 것이 있는지 정의한다.
interface
새로운 클래스가 상속받는 베이스 클래스를 지정하고, 클래스의 멤버와 메서드를 선언한다.
입력형식
@interface NewClassName: ParentClass{
ClassMembers;
}
ClassMethods;
@end
ClassMembers : 클래스에서 사용할 변수들을 선언한다.(이것을 인스턴스 변수라 불림)
멤버 변수를 선언하는 방식은 일반적인 오브젝티브-C의 변수 선언과 같다.
ClassMethods : 호출될 메서드를 선언한다. 메서드는 기본적으로 호출될 때 특정한 일을 수행하는 함수이다.
ParentClass : ParentClass에 NSObject 클래스가 들어갔는데 이 클래스는 오브젝티브-C 파운데이션 프레임워크의 표준 베이스 클래스로서, 대부분의 클래스 생성시 상속받는 클래스로 사용된다. 위의 소스는 BankAccount 클래스가 NSObject라는 부모 클래스로부터 상속을 받았기 때문에 우리가 직접 코딩할 필요없이 인스턴트의 생성,관리,제거에 대한 메서드를 이용할 수 있다.
인스턴스 변수(instance variables) : 객체지향 프로그래밍의 주요 목표는 데이터 캡슐화, 즉 데이터는 클래스 안에 저장되어야 하고 오직 클래스에서 선언된 메서드에서만 접근이 가능해야 하는데 클래스에서 캡슐화가 된 데이터가 바로 인스턴트 변수이다. (요약하면 클래스 내에서만 작용하는 변수)
클래스 메서드와 인스턴스 메서드
클래스 메서드는 클래스의 인스턴트를 생성하는 것과 같은 클래스 차원의 일을 수행
선언시 앞에 '+' 를 사용한다.
인스턴스 메서드는 두 개의 인스턴트 변수에 대해 산술 연산하여 결과를 얻는 것과 같은 클래스의 인스턴스에 대한 작업을 수행
선언시 앞에 '-'를 사용한다.
메서드가 반환할 결과 값이 있으면 메서드 이름 앞의 괄호 속에 데이터 타입을 지정해준다. (없다면 void)
데이터를 전달받아야 하는 경우에는 메서드 이름 뒤에 콜론을 붙인 후, 괄호 속에 데이터 타입과 인자의 이름을 지정
Ex)
1. 인스턴스 메서드에 결과값을 반환하지않으므로 void, y라는 long 타입 데이터를 받는다.
2. long 타입 데이터를 반환하는 인스턴스 메서드이다.
3. 반환값이 없는 한 인스턴스 메서드에 2개의 인자를 받은 것이다. (setAccount - long타입 y, andBalance - double타입 x)
implementation
클래스를 만드는 다음단계는 선언한 메서드의 코드를 implementation으로 구현하는 것이다.
입력형식
@implementation NewClassName
ClassMethods
@end
interface 부분에서 선언한 메서드를 구현하려면 같은 클래스 이름을 쓰고 반환값이 있는곳에 return 변수; 를 해주면 된다.
▲이렇게 implementation 부분을 작성한다.
인스턴스 선언 및 초기화하기
이 클래스를 가지고 어떠한 일을 하기 위해서는 인스턴스를 만들어야한다. 가장 먼저 할 일은 인스턴스가 만들어졌을 때 이 인스턴스의 포인터를 저장할 변수를 선언하는 것이다.
입력형식
NewClass 변수; 클래스 인스턴스의 참조를 저장할 변수를 만드는것
변수=[NewClass ClassMethods] 클래스의 메서드를 호출하는 것
위의 문장은 BankAccount *account1=[[BankAccount alloc] init]; 로 줄일수있다.
메서드 호출과 인스턴스 데이터 접근하기
메서드 호출 형식
[오브젝트포인터변수 호출할메서드];
오브젝티브-C 도트 표기법
도트 표기법이란 인스턴스 변수나 접근하려는 속성 이름 다음에 도트로 클래스 인스턴스를 지정하여 인스턴스 변수에 접근 하는방법이다. 도트 표기법을 이해하는 핵심은 선언된 신서사이즈 접근자 메서드들에 대한 인스턴스 변수들만 사용할 수 있다는 것이다. 만약 신서사이즈(synthesize)되지 않은 접근자에 대한 인스턴스 변수에 접근하려고 도트 표기법을 사용하려고 한다면 그 코드는 에러가 뜰 것이다.
(아마 선언한 인스턴트 변수만 사용할 수 있다고 설명하는 것 같다)
사용 예)