728x90
반응형
@inlinable은 코드 최적화를 돕는 특수한 속성이라고 한다.
사실 inline은 swift에만 있는 기능이 아니라 일반적인 프로그래밍 언어에 있는 내용이다.
인라인화는 컴파일러가 함수호출을 함수 본문으로 바꿔치기 하는 것을 의미한다. 이로 인해서 실행 시에 함수 호출로 인한 오버헤드가 줄어들고 프로그램의 성능이 향상 될 수 있다.
인라인화가 적용되지 않을 경우는 다음과 같지만
override func viewDidLoad() {
super.viewDidLoad()
self.printSquareNumber(number: 1)
}
func printPlusOne(number: Int) {
print("result : \(number * number)")
}
인라인이 적용되는 경우는 다음처럼 사용할 수 있다.
override func viewDidLoad() {
super.viewDidLoad()
print("result : \(1 * 1)")
}
메서드를 호출하는 개념이 아니라 메소드의 body 부분이 호출하는 쪽에서 통째로 사용되는 것이다.
인라인화를 하지 않았을때는 모듈화나 유지보수 측면에서 유리하겠지만,
인라인화를 사용하는 경우에는 메모리를 조금더 최적화 할 수 있다.
그래서 재귀호출이 없고, 엄청 간단한 함수 같은 경우에는 바로 인라인으로 구현할 경우 오버헤드를 줄일 수 있다.
스위프트에서 internal, public 접근제한인 경우에서 @inlinable 속성을 붙이면 그 선언이 정의된 모듈 외부에서도 인라인화 될 수 있다.
하지만 @inlinable이 적용된 함수는 인터페이스의 일부가 되어서, 이후에도 해당 함수의 내부 구현이 변경되지 않아야 한다.
그래서 @inlinable을 사용할때는 신중하게 사용해야 한다.
728x90
반응형
'개발삽질기 > iOS' 카테고리의 다른 글
CS193P 1편,2편 요약 (0) | 2023.07.01 |
---|---|
@escaping 클로저란 뭘까? (0) | 2023.06.30 |
AlignmentGuide가 뭘까? + 세그먼트 컨트롤 삽질 시작 (0) | 2023.06.30 |
ViewBuilder가 뭐지? (0) | 2023.06.30 |
왜 Padding을 안줬는데 Padding이 변할까 (0) | 2023.06.29 |