본문 바로가기
PROGRAMMING CODE/SWIFT

[Objective-C] 기초

by daye_ 2024. 6. 10.

 

 

1. 구조

.h 파일 -> 선언(헤더파일) @interface

.m 파일 -> 구현(소스파일) @inplementation

 

최상위 클래스 NSObject 상속

 

 

2. 타입추론 불가능, 세미콜론 필수

var str: String = "안녕하세요"
NSString *str = @"안녕하세요";

변수 명 앞에 포인터 * 붙여줘야하며, 데이터 앞 @ 붙여줘야함

 

 

3. 로그

var num = 24
print("오늘의 간식은 \(num)개 입니다.")

NSNumber *num = @24;
NSLog(@"오늘의 간식은 %d개 입니다", num)

 

 

4. 클래스 선언

Class Player {

}

//헤더(선언)
@interface Player: NSObject
@End

//소스(구현)
@implementation Player
@end

 

 

5. 상속

 

Extension vs Category

 

(swift) Extension: 기존 객체 직접 확장. 클래스, 구조체, 프로토콜 등 대부분 객체에 적용가능

(objective-c) Category: 상속 대신 기존 객체 자체를 확장. 클래스 객체만 확장 가능

 

 

6. 범용 타입

 

Any(AnyObject) vs id

 

(swift) Any: 구조체, 클래스, 열거형, 함수 등 스위프트에서 제공하는 모든 타입의 값을 저장

(objective-c) id: 모든 파입의 데이터를 저장할 수 있을 뿐만 아니라, 호환성만 보장된다면 타입 변환할 수 있는 특성이 있다. 코코아 프레임워크나 코코아 터치 프레임워크에서는 범용 타입을 이용한 API 많음

 

 

7. 메소드 호출

// swift
인스턴스.call(3)

// objective-c
[ 인스턴스 call : 3 ]

메소드 호출 대신 객체에 메세지를 보냄.

공백필요(?)

 

 

8. swift와 다르게 NULL 상수 있음

 

 

9. 포인터

객체는 무조건 포인터, 외는 c랑 거의 똑같음

@property (nonatomic, assign) int myAge;
@property (nonatomic, retain) NSString *myName;
@property (nonatomic, retain) NSString *mySubject;

예를 들어 다음과 같이 선언했을 때, int는 기본 타입형이고, NSString은 Objective-c의 클래스이기 때문에 *가 무조건 붙는다.

 

 

10. 객체지향 타입

swift는 클래스, 구조체, 열거형 모두 제공하는 반면 objective-c는 클래스만 제공

-> ??? 옵젝씨도 구조체 있음

 

 

11. 익명 함수

swift는 클로저, objective-c는 블록 개념으로 익명함수 표현 가능

^ 연산자를 사용해서 시작을 나타냄