[Objective-C] edwith-1002

봄바야·2021년 3월 2일
0

Objective-C

목록 보기
2/3

Objective-C를 공부하기 전에
edwith에서 설명해준 영상을 보고 정리했습니다.

2. 최소한의 개념

2.1 오브젝티브-C, OOP를 위한 언어

2.1.1 역사

  • C 기반 문법을 확장한 것
  • smalltalk에 뿌리를 두고있고 java와 형제 지간
  • C, C++과 혼용 가능
  • 아이폰에서는 가비지 컬렉션 지원 안함

2.1.2 클래스와 인스턴스

  • 클래스는 설계도와 같다. 인스턴스는 설계도를 따라 만든 실제 건물이다.
  • 메모리에 자리잡은 오브젝트를 인스턴스(실체) 오브젝트라고 한다.
    • NSString class의 nameString 인스턴스 만들기
      NSString *nameString = [[NSString alloc] initWithString:@”Winter”];

2.1.3 메시징

  • C방식 :
    • DrawGradient(myView,aquaGradient, 0.0, 1.0, YES);
  • Obj-C 방식 :
    • - (void) drawGradient:(CGGradientRdf)gradient fromValue:(float)start toValue:(float)end opaque:(BOOL)opaque; //메소드 선언
    • [myView drawGradient:aquaGradient fromValue:0.0 toValue:1.0 opaque:YES]; //호출

2.1.4 인스턴스 변수와 엑세서 메소드

  • 클래스는 내부적으로 사용할 인스턴스 변수를 가지며 외부에서 직접 접근할 수 없다.
  • 외부에서 인스턴스 변수 접근을 가능하게 하는 메소드를 엑세서 메소드라고 한다.

2.1.5 코코아 클래스 만들기

  • 코코아 클래스는 헤더(.h) 파일과 임프리먼트(.m) 파일로 구성된다.
  • 헤더는 @interface와 @end 로 구성된다.
  • 중괄호 {} 사이에는 인스턴스 변수를 선언하고 블럭 밖에서는 메소드를 선언한다.
  • 소괄호 <>가 뒤따르는 경우 클래스가 준수하는 프로토콜의 이름이 들어간다.
  • 임플리먼트는 @implement 와 @end 로 이루어진다.
  • 그 사이에 필요한 메소드들을 구현한다.
  • @implement 뒤에 인스턴스 이름이 따른다.

2.1.6 헤더 포함

  • #import 는 다른 클래스의 헤더를 불러오는 역할이다.
  • 표준 C의 전처리기 #include 와 동일하지만 중복포함 에러 예방을 한다.
  • 교차 포함을 막기 위해 헤더에 @class 로 클래스의 존재만 알리고 임플리먼트 파일에서 실제 #import 하는게 좋다.

2.2 메모리 관리

  • Obj-C 2.0부터 가비지 콜렉터 추가 됐지만 아이폰은 애플리케이션 개발자가 직접 메모리를 관리해줘야 한다.

2.2.1 원칙

  • 가장 중요한 원칙은, “만든 곳에서 릴리즈 한다”이다.

2.2.2 alloc, retain, release

  • +alloc, -retain, -release 는 NSObject에 선언된 메소드
    • +alloc : 인스턴스 오브젝트가 생성되면 리테인 카운트가 1이 된다.
    • -retain : 인스턴스 오브젝트가 생성되면 리테인 카운트가 1 증가 한다.
    • -release : 오브젝트 참조 카운트를 1 감소한다.

2.2.3 +메소드와 -메소드

  • +가 붙은 메소드는 클래스 메소드
    • +메소드는 오브젝트의 라이프 사이클을 관리할 필요가 없다. 해당 메소드 실행이 끝나면 사라징 예정인 오브젝트이기 때문이다.
  • -가 붙은 메소드는 인스턴스 메소드

2.2.4 addObject, addSubview

  • 컬렉션은 밖에서 리테인 카운트를 관리해준다.
NSString *stringObject = [[NSString alloc] initWithString@"Winter"];
[mutableArray addObject:stringObject];
[stringObject release];
//stringObject's retain count is 1

2.2.5 Autorelease Pool

  • “곧 릴리즈 될 오브젝트들이 모여 있는 곳”

2.3 Delegate와 Subclass

2.3.1 Delegate

  • 누가? 주로 View 의 섭클래스들 이나 Controller 오브젝트들.
  • 무엇을? 이벤트에 대한 처리 권한을 위임하는 것.
  • 누구에게? 위임을 받아 처리할 임의의 오브젝트. 위임을 맡은 오브젝트는 프로토콜에 정해진 메소드를 구현해주면 된다.

2.3.2 Subclass

  • 서브클래스는 클래스를 상속받아 기능을 확장하거나 원래의 기능을 변경하는 것을 말한다.

2.3.3 Subclass? Delegate?

  • 동일한 목적에 대해 다른 구현을 보여준다.
  • 서브클래스는 상위클래스에 대한 자세한 이해가 요구된다.
  • 델리게이트 메소드들은 대부분 선택적인(optional) 프로토콜 메소드이다.

2.3.4 프로토콜

  • 코코아에서 프로토콜은 “구현하기로 약속한 메소드”이다.
  • 메소드를 전부 또는 일부 구현함으로써 프로토콜의 기능을 구현하게 된다.

2.4 용어 정리

2.4.1 IBOutlet & IBAction

  • IBOutlet과 IBAction은 인터페이스 빌더 파일과 연결되는 인스턴스 변수와 액션 메소드이다.

2.4.2 id

  • Obj-C 유연성을 대표하는 키워드 id 타입의 변수 형.
    컴파일 시가 아닌 런타임시 결정됨.

2.4.3 SEL, @selector()

  • SEL은 함수 포인터다.
    컴파일된 셀렉터의 타입이 SEL이며, SEL을 얻어내는 지시어가 @selector()이다.

출처
https://www.edwith.org/isobaric_obj_c

0개의 댓글