iOS/공부

Library && Framework

iOS_Dev_Ruel 2024. 8. 9. 14:23

안녕하세요 Ruel입니다

오늘은 라이브러리와 프레임워크에 대해서 알아보려고 합니다.

개발을 진행하면서 항상 Library(라이브러리)와 Framework(프레임워크)라는 말을 많이 접하고 있었습니다.

상세하게 알아보지 않아 그냥 막연하게 라이브러라와 프레임워크는 비슷하다고 생각하고 있었습니다.

 

‘라이브러리’와 ‘프레임워크’에 대해서 아세요?🤔

 

뭔가 알고 있다라고 생각했지만 막상 설명을 하려니 잘 모르고 있다는 게 느껴졌고,

어디서는 라이브러리 어디서는 프레임워크……….

 

🌀대혼돈의 카오스 🌀

그래서 라이브러리와 프레임워크를 알아보고 정리해봅시다.💪🏻


프레임워크(FrameWork)

프레임워크란?

애플의 문서에 나와있는걸 보자면

  • 프레임워크는 여러 가지 공유 자원을 하나의 패키지로 묶어주는 계층적 디렉터리 임.
    여기에는 동적 공유 라이브러리, nib파일, 이미지파일, 로컬라이즈 문자열, 헤더 파일, 참고 문서 등이 포함될 수 있음.
    이 자원들은 여러 애플리케이션에서 동시에 사용할 수 있고, 시스템은 필요할 때 메모리에 로드하고 가능한 한 번만 로드된 자원을 여러 애플리케이션이 공유함.
  • 프레임워크는 하나의 번들(bundle)임.
    번들(bundle)이란? → 여러 파일과 리소스를 하나로 묶어놓은 패키지임
    iOS나 macOS에서는 Core Foundation Bundle Services나 Cocoa의 NSBundle 클래스를 사용하여 번들의 내용물을 접근할 수 있음

그러나!!🔥

프레임워크 번들은 일반적인 번들과 몇가지 차이점이 있음.

  1. 일반 번들 : 일반적으로 Finder(파일 탐색기)에서 하나의 파일처럼 보임.
    사용자가 쉽게 내부를 볼 수 없도록 “불투명”하게 만들어져 있음.
  2. 프레임워크 번들 : Finder에서 하나의 파일처럼 보이지 않고, 디렉터리(폴더)처럼 보임.
    그래서 사용자가 디렉터리를 열어 내부 파일과 폴더를 직접 탐색할 수 있음.

즉, 프레임워크 번들은 개발자가 쉽게 접근하고 사용할 수 있도록 만든 디렉토리 구조의 번들임.
→ 일반 번들과 달리 프레임워크 번들은 사용자가 직접 내부의 모든 것을 찾아볼 수 있음

  • 프레임워크는 정적 및 동적 공유 라이브러리와 동일한 목적을 제공함.
    특정 작업을 수행하기 위해 응용 프로그램이 호출할 수 있는 코드 묶음을 제공한다는 말임.
    ex) Cocoa 프레임워크의 Application Kit과 Foundation 프레임워크는 다양한 Cocoa 클래스와 메서드에 대한 프로그래밍 인터페이스를 제공함.

프레임워크의 장점 프레임워크는 정적 및 동적 공유 라이브러리에 비해 아래와 같은 장점이 있음.
1. 리소스 그룹화:

  • 프레임워크는 관련 있지만 별개의 리소스들을 하나로 묶음으로 그롭 화함.
  • 이 그룹화로 인해 리소스를 설치하고 제거하거나 위치를 쉽게 찾을 수 있음

2. 다양한 리소스 유형 포함

  • 프레임워크는 라이브러리보다 더 다양한 리소스 유형을 포함할 수 있음
  • ex) 프레임워크에는 관련 헤더 파일과 문서도 포함될 수 있음

3. 버전 관리

  • 같은 번들에 여러 버전의 프레임워크를 포함할 수 있음
  • 이로 인해 오래된 프로그램과의 하위 호환성을 유지할 수 있음.

4. 메모리 사용 효율

  • 프레임워크의 읽기 전용 리소스는 메모리에 물리적으로 하나의 복사본만 존재
  • 이를 사용하는 프로세스의 수와 관계없이 리소스를 공유하여 시스템의 메모리 사용량을 줄이고 성능을 향상함

❗️프레임워크는 반드시 프로그래밍 인터페이스를 제공할 필요는 없음.
     경우에 따라 리소스 파일만을 포함할 수 있음. 
     하지만 이런 사례는 흔치 않음.


라이브러리(Library)

라이브러리란?

특정 기능을 수행하는 코드의 모음.

재사용 가능한 코드 묶음이기 때문에 개발자는 라이브러리를 이용하여 코드를 재사용하고 유지보수를 쉽게 가져갈 수 있음.

  • 라이브러리는 정적 라이브러리동적 라이브러리로 구분할 수 있음
    1. 정적 라이브러리 (Static Library)
      • .a’ 확장자를 갖는 파일로 볼 수 있음
      • 컴파일 시 프로그램에 복사되어 포함됨
      • 모든 코드가 프로그램에 포함되기 때문에 프로그램(앱)의 크기가 커질 수 있음
      • 추가적으로 로드할 필요가 없기 때문에 속도가 빠를 수 있음
      • 외부 종속성이 없어 배포 및 관리에 용이
      • 라이브러리를 업데이트할 경우 프로그램을 다시 컴파일해야 함
    2. 동적 라이브러리 (Dynamic Library)
      • .dylib’ 확장자를 갖는 파일로 볼 수 있음
      • 런타임에 프로그램에 의해 로드됨
      • 여러 프로그램이 동일한 라이브러리를 공유함
      • 라이브러리가 업데이트 및 수정되더라도 다시 컴파일할 필요 없음
      • 메모리 사용량을 줄일 수 있음 → 여러 프로그램이 동일한 라이브러리를 공유하기 때문
      • 런타임에 로드가 되어야 하기 때문에 성능 저하가 올 수 있음
      • 라이브러리가 없어지거나 변경되면 정상적으로 동작하지 않을 수 있음
  • 라이브러리는~?
    • 라이브러리는 여러 프로그램에서 동일한 기능을 재사용할 수 있음. 즉, 재사용성이 좋음
    • 프로그램을 기능별로 나누어 관리할 수 있음. 즉, 모듈화가 가능!!
    • 코드의 변경을 쉽게 하고, 버그를 수정하거나 기능을 추가할 때 전체 프로그램을 수정할 필요 없이 해당 라이브러리만 수정하면 됨. 즉, 유지보수성이 좋아짐
    • 여러 프로그램이 동일한 코드를 공유함으로 메모리 사용량을 줄이고 일관성을 유지할 수 있음. 즉, 코드를 공유할 수 있따~

정적 및 동적 공유 라이브러리의 목적

정적 라이브러리 (Static Library)

  • 정적 라이브러리는 프로그램이 빌드될 때 해당 라이브러리의 코드가 프로그램에 포함됨. 즉, 프로그램이 실행 파일로 만들어질 때 라이브러리의 코드도 함께 복사됨.
  • 정적 라이브러리를 사용하면 프로그램이 라이브러리를 사용하기 위해 별도로 로드할 필요가 없지만, 모든 코드가 포함되므로 실행 파일의 크기가 커질 수 있음.

동적 라이브러리(Dynamic Library)

  • 동적 라이브러리는 프로그램이 실행될 때 필요한 시점에 라이브러리가 메모리에 로드됨. 즉, 여러 프로그램이 동시에 하나의 동적 라이브러리의 코드를 공유하여 사용할 수 있음.
  • 동적 라이브러리를 사용하면 메모리 사용량이 줄어들고, 라이브러리를 수정해도 프로그램을 다시 빌드할 필요가 없다는 장점이 있음.

아니 그래서 뭐가 다른건데?

프레임워크가 동적, 정적 라이브러리와 동일한 목적을 갖고 있다면

프레임워크랑 라이브러리가 뭐가 다를까...

 

 

이 둘의 차이점은 코드를 제어하고 호출하는 주도권에 차이가 있다고 한다.

 

프레임워크는 전체적이 흐름 제어의 주도권이 스스로(프레임워크)에게 있다.

라이브러리는 스스로 동작하지 않고 개발자가 코드를 작성하여 호출됨.


 

이렇게 프레임워크와 라이브러리를 정리해 보았는데,

아직 글로만 정리하고 실 사례를 확인하지 못하다 보니

제대로 이해가 안 된듯한 느낌이 있어요..

 

잘못된 부분 혹은 새롭게 알려주 실부분 있으시면 언제든지 댓글 남겨주세요.💬

감사합니다.🙇🏻‍♂️