Objectiive-C 동적 타입과 바인딩, 객체 생성 메소드


  1. 동적 타입 : 코드 작성 시 타입을 명시하지 않은 것을 의미한다.
    1. 변수나 메소드 정의 시 int, char 와 같은 정적 타입이 아닌 "id" 로 사용한다.
    2. 포인터 형으로 * 를 사용하지 않는다.
      예시) id dynamiicTypeVar; -(id) dynamicTypeMethod1:(int)arg; -(void) dynamicTypeMethod2:(id)arg;
    3. 정적 타입 : 코드 작성 시 타입을 명시하는 것으로 동적 타입과 반대되는 개념이다.
      예시) BOOL boolVar; int intVar; NSString *strVar;
  2. 바인딩(Binding) : 참조와 구현이 연결
    1. 포인터 변수가 객체와 연결
    2. 메소드 호출 코드와 메소드 구현부가 연결
    3. 정적 바인딩(Static binding) : 컴파일 시간에 결정
    4. 동적 바인딩(Dynamic binding) : 런타임(Runtime)에 결정되며, Objectiive-C에서 사용
  3. 객체 생성 메소드
    1. 객체 생성이란? 클래스를 사용하기 위해서 별도의 메모리 공간을 할당해주는 것을 의미한다.
    2. 객체 생성방법 : [[클래스_이름 alloc] init];
      1. alloc : 객체를 생성하는 메소드
      2. init : 객체를 초기화하는 메소드
    3. 객체 생성 메소드에서 동작해야하는 코드는 init 메소드를 재정의하는 것이다.
      1. init 메소드 재정의 방법
        1. 부모 클래스를 이용한 초기화
        2. 부모 클래스의 초기화 과정 성공 시 초기화 코드 동작
        3. 생성된 객체 반환(self)
      2. 기본 틀은 아래와 같다.
        init 메소드 재정의 기본 틀
        -(id)init {
        self = [super init]; // 부모 클래스를 이용한 초기화
        if(self) { // 부모 클래스의 초기화 과정 성공시 초기화 코드
        //초기화 코드 생성
        return self; // 생성된 객체 반환 
        }
      3. 아래는 적용한 코드이다.
  4. 팩토리 메소드 : 객체 생성 디자인 패턴으로 객체를 생성하고 반환하는 코드로 클래스 메소드이다. 메소드의 이름은 클래스의 이름으로 시작한다.
    1. 기본 틀은 아래와 같다.
      팩토리 메소드 기본 틀
      +(id)classname {
      Classname *obj = [[Classname alloc] init];
      return obj; 
      }
    2. 아래는 적용한 코드이다.