본문 바로가기
공부하기/Swift

Swift 중요한 용어와 개념

by hyunjicraft 2020. 12. 14.

프로그래밍 언어 공통

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

- 라이브러리는 재사용이 가능하도록 미리 만들어둔 최소 기능 단위이다.  보통 라이브러리는 API를 제공한다.

크게 표준 라이브러리와 사용자 라이브러리가 있는데 표준 라이브러리는 언어에서 제공해주는 것(ex. printf 함수)이고 사용자 라이브러리는 보통 표준 라이브러리를 이용하여 만들어진다.

- 프레임워크란 라이브러리들과 또다른 프레임워크들을 모두 포함한다.

자바를 편하게 쓸 수 있도록 만든 스프링, 파이썬을 편하게 쓸 수 있도록 만든 장고 등을 예로 들 수 있다.

 

- 라이브러리와 프레임워크 모두 편리하고 개발시간을 단축시키는데 도움이 되며, 재사용이 가능하다는 장점이 있다.

또 여러 사람이 사용하기 때문에 대부분 신뢰할 수 있다.

 

- 라이브러리의 경우에는 필요한 것만 가져다가 쓸 수 있으나 프레임워크는 프로그램의 틀이 갖추어진 상태에서 개발해야하기 때문에 불필요한 요소가 들어갈 수 있어 느리고 무거울 수 있다. 또 프레임워크에 버그가 있는 경우 개인이 수정하기 힘들다.

 

2. ARC

- Automatic Reference Counting의 약어로 어떠한 인스턴스를 참조하는 것이 하나도 없는 경우 자동으로 메모리에서 해제해주는 기능이다.

ARC는 컴파일 시점에서 시스템 자원이 예측되기 때문에 편리하고 코드를 통해 언제 메모리에서 해제되는지 예측할 수 있으나 잘못 사용하면 메모리 누수가 발생할 수 있다.

- ARC와 상반되는 개념으로 Garbage Collection(GC)이 있다.

GC는 인스턴스가 언제 메모리에서 해제될지 예측할 수 없고 메모리 검사를 위한 자원이 필요해서 성능이 떨어질 수 있으나 메모리 누수 없이 확실하게 인스턴스를 메모리에서 해제할 수 있다는 장점이 있다.

 

Swift

1. weak 과 strong 그리고 unowned

- weak과 unowned는 약한참조를 뜻하는 키워드이고 레퍼런스 카운트가 증가하지 않는다.

weak은 optional 타입에 사용하고 unowned는 non-optional인 경우에 사용하는데, weak은 메모리에서 해제되면 nil값으로 대체되고 unowned는 메모리에서 해제된 인스턴스를 계속 가리킨다. unowned는 잘못 사용하면 런타임 에러가 발생할 수 있기 때문에 명확하게 예측가능한 경우에만 사용해야 한다.

- strong은 값이 지정되는 순간에 레퍼런스 카운트가 증가하며 ARC로 인한 자동 메모리 해제가 일어나지 않아 nil을 할당해주어야 메모리를 해제할 수 있다.

 

* 클로저 블록에서 weak self를 명시해주면 레퍼런스 카운트가 되지 않기 때문에 순환참조가 발생하지 않는다.

 

댓글