9일차 수업을 듣고 새로 알게 된 것과 알고 싶은 것을 정리한 글 입니다.
Learned
- 라이브러리 vs 프레임워크
- 라이브러리는 개발자가 필요할때마다 단순 활용이 가능한 도구의 모음으로 특정 기능을 모아둔 코드나 함수의 묶음을 의미한다.
- 프레임워크는 자체적인 구조를 가지고 있어서 개발자는 그 틀(Frame)에 안에서 작업(work)해야한다.
이런 점들 덕분에 프레임워크를 사용하면 체계적으로 프로그램을 관리할 수 있고 원하는 기능을 집중적으로 구현할 수 있다. - 둘의 공통점은 개발자가 원하는 기능을 구현하는데 도움을 준다는 점이고, 차이점은 흐름 제어 권한이 누구에게 있느냐이다.
프레임워크는 자체적인 흐름이 있기 때문에 그 안에서 개발을 해야하지만
라이브러리는 개발자가 원할때 사용하고 직접 코드를 제어할 수 있다.
- 의존성 관리 도구 (Dependency Manager)
- 의존성이란?
- 두 모듈이나 클래스 사이의 관계로, 한 쪽이 다른 한 쪽을 사용하여 기대고 있는 상태를 의미한다.
- 예를들어 A 클래스 안에서 B 클래스를 사용하거나, A 라이브러리 내부에서 B 라이브러리를 사용하는 케이스.
매우 넓게보면 전체가 내부에 있는 하나의 특정 부분에 의존한다고 볼 수 있다.
- 코코아팟(cocoPods)
- 대부분의 라이브러리가 지원하고 자동으로 의존성을 관리해준다.
- 프로젝트를 빌드할 때마다 모든 라이브러리가 함께 빌드되어 속도가 느리다는 단점이 있다.
- 카르타고 (Carthage) : 코코아팟에 비해 속도는 빠르지만 지원하는 라이브러리가 적다.
- Swift Package Manager(SPM)
- 애플이 지원하는 의존성 관리 도구
- Xcode 11부터 GUI가 환경이 좋아지면서 사용빈도와 지원 라이브러리가 점점 늘어나고 있다.
- 의존성이란?
의존성 관리의 중요성
만약 복잡한 의존 관계에 있는 클래스 하나가 변경된다면 그 클래스를 사용하는 다른 모든 클래스가 영향을 받기 때문에
의존성을 관리하는 것은 매우 중요하다.
- 소프트웨어 버전 규칙
- major.minor.patch 의 형태를 띈다. ex) 6.5.1
- major : API가 변경될때 버전을 올리고 기존 버전과 호환이 거의 안된다.
- minor : 기존 버전과 호환되며 새로운 기능이 추가될때 버전을 올린다.
- patch : 주로 버그가 수정될때 버전을 올린다.
SPM에서 라이브러리의 Dependency Rule을 설정할 수 있다.
ex) major 6 버전만 사용, 3.5.0 ~ 4.2.1 범위의 버전만 사용 등
- 메모리 영역
- 메모리는 크게 Code, Data, Stack, Heap으로 나눈다.
- Code 영역에는 기계어로 컴파일된 코드가 저장된다.
- Data 영역에는 전역 변수가 저장되고 프로그램이 종료될때 까지 메모리 공간을 차지한다.
- Stack과 Heap은 하나의 메모리 영역을 공유한다.
- Heap은 낮은 주소부터 (위쪽 부터) 공간을 차지하고 Stack은 높은 주소부터 (아래 부터) 공간을 차지한다.
- 구조체에 존재하는 MemberWise 초기자가 클래스에 제공되지 않는 이유 ->
클래스의 상속이라는 특성때문에 초기자를 제공했을때 개발자가 의도하지 않은 문제가 발생할 수 있어서.
대체로 크리티컬한 문제는 아니지만 그런 문제를 겪을 수 있는 상황 자체를 없애기 위해서라는 추측
이상입니다.
'TIL' 카테고리의 다른 글
[Sesac IOS] 11일차 TIL (0) | 2022.07.18 |
---|---|
[Sesac IOS] 10일차 TIL (0) | 2022.07.16 |
[Sesac IOS] 8일차 TIL (0) | 2022.07.13 |
[Sesac IOS] 7일차 TIL (0) | 2022.07.12 |
[Sesac IOS] 6일차 TIL (0) | 2022.07.11 |