[iOS] 프레임워크와 라이브러리
프레임워크와 라이브러리에 대해 설명해보라하면 큰 틀과 느낌은 설명할 수 있을 것 같은데 자세히는 못할 것 같아서 알아본다.
자세히 설명을 못한다는건 모른다는 소리니까!
프레임워크
프레임워크를 직역해보자.
frame(뼈대) work(일하다) 뼈대를 가지고 일하는 것이다.
정해진 레시피로 요리하는 밀키트로 예시로 들 수 있다.
일정한 형태의 틀(레시피)를 가지고 결과물을 만드는 것!
프레임워크란?
소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합이다.
개발 시 필수적인 코드, 알고리즘, 데이터베이스 연동 등과 같은 기능을 위해 어느정도 뼈대를 제공해주는 것이다.
프레임워크가 제공하는 뼈대 위에 개발자가 코드를 작성하여 개발할 수 있다.
특징
개발자들이 따라야 할 가이드라인을 가진다.
개발할 수 있는 범위가 정해져 있다.
개발자를 위한 다양한 도구들이 지원된다.
특정 개념들의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성되어 있다.
컴포넌트들은 재사용이 가능하다.
높은 수준에서 패턴들을 조작화 할 수 있다.
장점
공통의 틀을 제공하여 코드 품질을 높일 수 있다.
개발 편의성이 오르기 때문에 시간을 줄일 수 있다.
오류의 폭을 줄일 수 있다.
단점
프레임워크의 의존도가 늘어나 개발 능력이 저하될 수 있다.
개발자의 자유도가 떨어진다.
예시
iOS에서 가장 대표적인 프레임워크는 UIKit이다.
라이브러리
단순 활용 가능한 도구들의 집합을 말한다.
소프트웨어 개발에 필요한 특정 기능을 위해 작성한 코드, 함수들의 집합이다.
공통으로 사용될 수 있는 기능들을 모듈화 한 것으로 완전한 프로그램이 아니라 특정한 부분 기능만을 수행하도록 제작된다.
사용 목적
생산성과 편의성이다.
원하는 구현사항이 있을 때 누군가 이미 라이브러리로 만들어놨다면 라이브러리를 사용하는 사람은 편하게 개발할 수 있다.
예를 들어 누군가 자동차를 라이브러리로 만들어놨다면 그걸 사용하는 사람은 자동차를 만들 필요없이 바로 탑승할 수 있다.
라이브러리가 없다면 자동차부터 만들어야 할 것이다.
예시
라이브러리는 많은 종류가 있다.
iOS에서 자주 사용하는 라이브러리는 RxSwift, Snapkit, Alamofire 등이 있다.
프레임워크와 라이브러리 차이
라이브러리와 프레임워크 차이는 제어 흐름에 대한 주도성이 누구에게/어디에 있느냐에 따라 다르다.
프레임워크
전체적인 흐름을 스스로가 쥐고 있으며, 사용자가 그 안에서 필요한 코드를 짜 넣는다.
제어의 역전이 적용되어 있다.
내 코드가 호출 당한다.
라이브러리
사용자가 전체적인 흐름을 만들며, 라이브러리를 가져다 쓰는 것이라고 할 수 있다.
내 코드가 호출한다.
제어의 역전이란?
내가 호출당하는 입장이 되는 것을 제어의 역전이라고 한다.
예를 들어 viewDidLoad에 내 코드를 넣어두면 화면의 생명주기에 맞게 호출되는 함수들이 있다.
UIKit 프레임워크가 타이밍에 맞춰서 내 코드를 실행시켜주는 것이다.