티스토리 뷰

freepik.com

안녕하세요! Diana 입니다.

얼마전 면접을 보고 왔는데 "프레임워크와 라이브러리의 차이점을 알려주세요!" 라는 질문을 받았습니다.

프레임워크와 라이브러리..? 

개발자로써 정말 많이 듣고 정말 많이 사용했던 것인데 명확하게 설명이 안되더라구요..

후.. 잘 모르고 두 개념을 혼용해서 썼던 과거를 반성하며 프레임워크, 라이브러리 그리고 덧붙여 패키지까지 오늘 제대로 알아보려고 합니다!

 


 

✅ 사전 용어 정리

✓모듈(Module)

모듈이란 하나의 배포 단위를 이야기합니다.

프레임워크, 라이브러리, 스위프트 패키지 그리고 빌드 타겟 모두 Xcode 에서 하나의 독립된 모듈이죠.

각각의 모듈은 각자의 네임스페이스 및 액세스 컨트롤을 가지고 있습니다.

 

모듈은 주로 특정한 문제를 해결하는데 초점을 맞추고 있습니다.

따라서 이들은 각기 다른 상황에서 재사용될 수 있습니다.

 

✓번들(Bundle)

번들은 하위 디렉토리를 가지고 있는 파일 디렉토리를 의미합니다.

iOS에서 번들은 하나의 패키지에서 관련 파일을 편리하게 제공하는 역할을 하죠.

예를 들어 이미지, nib 파일 그리고 컴파일 코드 등이 있습니다.

시스템은 그들을 하나의 파일로 취급하며 우리는 번들 내부 구조를 파악하지 않고도 리소스에 쉽게 접근할 수 있습니다.

 

✓소스 파일(Source file)

소스파일은 모듈 내부의 스위프트 파일을 의미합니다.

 

✓ 실행 파일(Executable file)

실행파일은 애플리케이션의 메인 바이너리를 의미합니다.

 

✓ 오브젝트 파일(Object file)

오브젝트 코드 파일은 주로 직접 실행되지 않는 기계어 포멧의 코드를 의미합니다.

 

✅  라이브러리 (Library)

라이브러리는 앱에서 사용될 코드와 데이터의 모임(Collection) 입니다.

라이브러리는 컴파일 시점 또는 런타임 시점에 앱에 연결(Link)되어 사용되며 이미지, Asset, nib 파일 등의 리소스는 포함할 수 없습니다.

 

또한 iOS 개발자로 일하며  Static 라이브러리Dynamic 라이브러리에 대해 들어봤을 것입니다.

(이 또한 단골 면접 질문)

 

이 Static 라이브러리와 Dynamic 라이브러리는 앱에 어떻게 연결하느냐에 따라 나뉩니다.

✓ Static Library

Static Library는 object file의 묶음입니다.

파일 익스텐션은 .a 이며 아카이브 툴에 의해 생성됩니다.

앱에서 사용하는 컴파일된 코드와 라이브러리 코드는 컴파일 시점에서 static linker를 통해 executable file로 복사됩니다.

그리고 이 실행파일은 앱 런타임 시점에 메모리 Heap 영역에 로드되어 사용됩니다. 

 

Static Library를 사용하는데는 주의점도 있습니다.

 

첫째, 사용될 타겟의 프로세서 아키텍쳐와 같게 빌드해야 합니다.(x86-64, arm64 등)

둘째, 리소스 파일들(image, assets, nibs, string file)을 포함할 수 없습니다.

 

리소스 파일들은 포함될 수 없지만 한꺼번에 관리되길 원한다면 외부 번들로 생성하여 제공할 수 있습니다. 

 

앱의 성능면에 있어서 Static Library가 많게 되면 앱은 로딩되는 속도와 메모리 확보에 어려움을 겪습니다.

또한 Static Library는 라이브러리 버전이 바뀌었을 때마다 앱과 링킹해주지 않으면 업데이트 된 내용을 지원 받을 수 없습니다.

✓ Dyniamic Library

Dynamic Library 는 Static Library와 달리 컴파일 시점에 executable file로 복사되지 않는 대신 필요 시점에 동적으로 로드되어 사용됩니다.

Dynamic Library의 확장자는 .dylib이며 동적으로 로드됨에 따라 매번 컴파일을 할 필요가 없다는 장점이 있습니다.

 

시스템 iOS와 MacOS 라이브러리는 Dynamic 입니다.

이는 iOS와 MacOS에서 배포된 앱들은 새로운 빌드의 제출 없이도 시스템 라이브러리의 혜택을 받을 수 있음을 나타냅니다.

 

하지만 Dynamic Library를 사용함에 있어 주의해야할 점이 있습니다.

라이브러리가 업데이트 되면 컴파일 없이도 클라이언트 단에 변경사항이 적용되므로 항상 호환성에 주의해야합니다.

 

다이너믹 라이브러리와 호환성 사이의 관계를 더 알아보고 싶다면 아래 링크 참고를 추천드립니다.

나중에 시간이 되면 아래 링크도 정리해보도록 하겠습니다.

https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/DynamicLibraryDesignGuidelines.html#//apple_ref/doc/uid/TP40002013-SW19

 

 

✅ 프레임워크 (Framework)

프레임워크는 Dynamic 라이브러리, 헤더 파일, 그리고 스토리 보드나 이미지 등의 리소스를 하나의 패키지로 캡슐화 한 계층적인 디렉토리 입니다.

프레임워크는 개발하고자 하는 기능에 더 집중할 수 있도록 공통적으로 사용되는 부분을 제공합니다.

프레임워크는 Static 그리고 Dynamic Shared 라이브러리와 비슷한 목적을 시사하지만 몇 가지 다른점이 있습니다.

 

1. 이미지, 언어 다양화 파일 등의 리소스 파일을 포함할 수 있습니다.

2. 메모리에는 프레임워크의 읽기 전용 리소스가 한번 복사되어 올라가기 때문에 이는 iOS 앱과 확장자 사이에서 공유되는데 메모리를 절약할 수 있도록 도와줍니다.

 

하지만 이러한 차이 외에도 아키텍처 관점에서도 둘은 차이를 보입니다.

그 중 "제어 역전"을 주장했던 마틴 파울러에 따르면 제어 역전이야 말로 라이브러리와 프레임워크를 나누는 핵심 이유라고 합니다.

 

1. 라이브러리는 우리가 호출할 수 있는 필수적인 함수들의 집합입니다. 요즘엔 대다수 클래스로 이루어져 있습니다. 각각의 기능은 작업이 종료되면 클라이언트에게 제어권이 넘어옵니다.

2. 프레임워크는 좀더 추상적인 형태로 구현됩니다. 프레임워크를 사용하기 위해서는 우리는 서브클래싱을 하거나 클래스에 플러그인을 함으로써 코드에 프레임워크의 동작을 추가해야합니다. 제어권이 나에게서 프레임워크로 넘어가는 것이죠.

 

프레임워크에는 두 가지 종류가 있습니다.

 

✓Umbrella Framework

Umbrella Framework는 하위에 다른 프레임워크를 포함하고 있습니다.

Umbrella Framework는 macOS 앱에서 가능하지만 Apple에서 권장되는 방법은 아닙니다.

✓Universal Framework

Universal Framework는 프로세스 타입에 상관없이 어디서든 작동하는 프레임워크를 말합니다.

x86_64나 arm64 등 여러 타입을 지원하기 때문에 하나의 타입을 대상으로 하는 프레임워크보다 용량이 큰 편 입니다.

 

 Swift Package

Swift Package는 크로스 플랫폼 언어이며 스위프트 코드를 빌드하기 위해서는 크로스 플랫폼 툴을 필요로 합니다.

Swift Package Manager의 주요 목표 중 하나는 Swift 환경에서 소스코드 배포를 단순화시키는데 있습니다.

 

Swift Package은 소스 파일과 Manifest 파일을 포함하고 있습니다.

Manifest 파일은 스위프트 패키지의 구성을 나타냅니다. Swift Package는 Swift PM과 함께 정의되고 사용됩니다. 

Swift Package는 Dependencies, Target 그리고 Product의 3가지를 포함하고 있습니다.

 

✓ Dependencies(의존성)

Swift Package 파일 내부에는 사용하고 있는 각각의 패키지 파일의 소스코드 위치나 버전 등이 명시되어 있습니다.

 

✓ Target(타겟)

Apple 문서에서 말하는 것과 같이 타겟은 패키지의 Basic Building Block 입니다.

✓ Product(프로덕트)

프로덕트는 패키지의 결과물 입니다. 

 

오늘은 이렇게 프레임워크, 라이브러리 그리고 스위프트 패키지에 대해 알아보았습니다.

'Dev' 카테고리의 다른 글

Git과 Github란?  (0) 2024.08.19
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함