Suyeon9911 / TIL

매일 오전에 적는 미라클 TIL 🥣
11 stars 0 forks source link

[Swift] Swift와 Objective-C #43

Closed Suyeon9911 closed 2 years ago

Suyeon9911 commented 2 years ago

Objective-C 와의 관계

많은 사람들이 Objective-C를 이제 묻혀질 언어로만 생각하고 있지만, 의외로 그렇지 않다.

Swift 프로젝트에서도 Objective-C는 아무런 제약 없이 사용 가능하다(!!). Swift의 컴파일러 백엔드와 Objective-C의 컴파일러 백엔드는 둘다 LLVM으로 동일하며, 어떤 언어를 사용해서 코드를 작성하더라도 같은 형태의 중간언어로 번역되어 컴파일 된다.

실전에서는 Swift에서 기존 Objective-C로 작성되어 있는 라이브러리를 사용하기 위해서라도 Objective-C는 반쯤 현역으로 사용된다. 프로젝트 내에서 대부분의 코드는 Swift로 작성되지만, Objective-C 기반으로 작성되어 있는 기존 코드가 상당수이기 때문에, Swift가 정착된 후에도 한동안 Objective-C의 사용은 계속될 것으로 보인다.

현재는 Apple 계열의 많은 라이브러리가 Swift로 재작성되거나 Swift만으로 작성되고 있으며 Objective-C로 작성된 라이브러리라고 해도 Xcode 등의 IDE가 Swift에서 바로 사용할 수 있도록 적절히 처리해주기 때문에, Objective-C로 만들어진 라이브러리를 직접 수정할 일만 없다면 Objective-C를 전혀 몰라도 Swift로 작성하는데에 아무런 문제가 없다. 굳이 신규 프로젝트를 Objective-C로 진행하는 경우는 거의 없으므로 Swift를 주력 언어로 사용한다면 Objective-C는 코드 리딩 정도만 할 줄 알면 충분하다. (어차피 Swift나 Obj-C나 Cocoa Framework 기반이라 코드 리딩을 위해 별도로 공부할 필요도 없다.)

Swift 와의 차이점

https://hururuek-chapchap.tistory.com/175 https://joycestudios.tistory.com/3

1. 지향점

Swift : 멀티 프로그래밍 패러다임 언어(객체 지향, 함수형, 프로토콜 지향 언어) Objective C : C 방식의 스몰토크 스타일의 메시지 구문형 언어

2. 헤더 파일

Swift : 별도의 헤더 파일이 없이 .swift 파일에서 처리 Objective C : 헤더(.h)와 본문(.m) 파일이 따로 존재

3. 버전업

Swift : Swift 컴파일러 버전 업에 따른 API의 규칙 및 사용 방법이 변경될 수 있음. 이는 Swift 버전업에 따른 기존 소스 마이그레이션작업이 필요할 수 있음 Objective C : 컴파일러 버전업에 따른 API 변동 없음. 기존에 작성하던 코드가 변동없이 계속 사용 가능

4. 코딩 스타일

Swift : Java와 유사한 형태의 간결한 코딩 방식, Objective C보다 훨씬 짦은 코딩으로 개발이 가능 Objective C : C 스타일와 블럭 코딩( [ ] ) 스타일 형태로 코딩

5. 변수 선언

Swift : 변수 선언이 명확인 타입 지정이 없어도 됨, 단 초기화 시에는 명확하게 값을 입력해주어야 함 Objective C : 변수형이 초기에 명확하게 선언되어야 함

6. nil 처리

Swift : nil(null) 포인트 에러 및 할당값 오류를 컴파일 단계에서 명확히 잡아줌 Objective C : nil 포인트 처리를 사용자가 신경써서 처리해야 함. 컴파일 단계에서 nil 오류 등을 잡아주지 않음

7. 타입 체크

Swift : 타입 세이프(Type-Safe)한 언어 방식, 상수 및 변수 타입을 컴파일 시에 바로 체크하여 알려준다. Objective C : 컴파일 시에는 변수 타입에 대한 체크를 하지 않아 사용자가 직접 관리를 신경써야한다. 런타임 오류가 발생하 여지가 더 많음

8. ARC(Auto Reference Couting)

Swift : C 네이티브 코드에 대해서도 ARC를 지원한다. Objective C : C 네이티브 코드에서는 별도록 ARC를 관리하여야 한다.

9. 효율성

Swift : 컴파일 및 앱 실행 속도가 빠른 대신에 앱 사이즈가 Objective C 앱보다 더 큼 Objective C : 컴파일도 기존 C 보다 느리지만 앱 사이즈는 Swift 대비 작음