3월, 2020의 게시물 표시

3. Framework: weak linking

이미지
3. Framework: weak linking 이번 포스트에서는 저번 포스트에 이어서 Framework의 weak linking에 대해서 알아보려고 합니다. weak linking이란? 먼저, 상황을 먼저 설명드리겠습니다. 최신 OS가 출시되면서 새로운 기능이 추가되었습니다. 이 기능은 당연히 이전 버전OS에서는 없는 기능이기 때문에 동작할 수 없습니다. 이전 버전 OS와 최신OS를 지원하는 framework를 제작하는데 최신OS에서 동작하는 새로운 기능도 지원하고 싶을 때 문제가 발생합니다. 새로운 기능은 이전 버전 OS에서는 동작하지 않기 때문에 오류가 발생합니다. 이 문제를 해결하기 위해서 나온 해결책이 weak linking입니다. weak linking은 심볼이 framework에 존재하지 않으면 null로 변경하고 심볼이 존재하면 동작을 수행합니다. weak linking을 통해 이전 OS의 호환성을 유지하면서 새로운 OS에 기능 추가를 할 수 있는 유연성을 발휘할 수 있습니다. weak linking이 어떻게 동작하는지 예제를 통해서 알아보겠습니다. WeakFramework를 Objective-C용 framework로 생성한 후 WeakTest.h와 WeakTest.c파일을 아래와 같이 생성합니다. // WeakTest.h 파일 #ifndef WeakTest_h #define WeakTest_h #include < stdio . h > #endif /* WeakTest_h */ // WeakTest.c 파일 #include "WeakTest.h" void WeakFunc ( void ) { printf ( "Weak Func가 호출되었습니다.\n" ) ; } Sample App 프로젝트를 생성하고 ViewController.m파일에 아래와 같이 코드를 작성합니다. # import "ViewContr

2. Framework: 이름충돌

이미지
2. Framework: 이름충돌 지난 포스트에서 framework에 대해서 알아보았습니다. 이번 포스트에서는 여러 framework를 한 프로젝트에서 사용할 때 발생할 수 있는 이름 충돌에 대해서 알아보려고 합니다. 여러 framework를 사용하다보면 중복된 이름을 가진 심볼이 발생할 수 있습니다. 예제를 만들어서 두개의 framework에 중복된 심볼이 있는 경우 어떻게 동작하는지 확인해보겠습니다. 1. Dynamic library test 먼저, Framework1.framework를 생성하고 MyClass1과 TestC 파일을 아래와 같이 생성합니다. // TestC.h #ifndef TestC_h #define TestC_h #include < stdio . h > extern void CommonTestFunc ( void ) ; #endif /* TestC_h */ // TestC.c #include "TestC.h" void CommonTestFunc ( void ) { printf ( "Framework1에서 CommonTestFunc가 호출되었습니다.\ns" ) ; } // MyClass1.h # import < Foundation / Foundation . h > @interface MyClass1 : NSObject - ( void ) execute ; @end // MyClass1.m # import "MyClass1.h" # import "TestC.h" @implementation MyClass1 - ( void ) execute { CommonTestFunc ( ) ; } @end 이번에는 Framework2.framework를 생성하고 MyClass2와 TestC파일을 생성합니다.