스닥
Playground
스닥
전체 방문자
오늘
어제
  • 분류 전체보기 (125)
    • 개발자 기본기 (1)
    • Swift 아키텍처 (6)
    • iOS 개발 (55)
      • Swift (12)
      • UIKit (17)
      • SwiftUI (9)
      • CoreData (9)
      • MusicKit (4)
      • WebKit (2)
      • 개발 환경 (0)
      • WatchOS (2)
    • 애플 개발자 아카데미 (4)
    • 막 쓰는 개발일지 (0)
    • 운영체제 (4)
    • 네트워크, 서버 (16)
      • Network (9)
      • Server (7)
    • 알고리즘 (8)
    • C언어 (7)
      • 함수 (7)
    • 하루 이야기 (23)

블로그 메뉴

  • GitHub계정
  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 깊이 우선
  • core data
  • 너비 우선
  • 트리
  • dfs
  • BFS
  • docker
  • SWIFT
  • 서버
  • 자료구조
  • 알고리즘
  • ios rendering
  • C 언어
  • 문자열 복사
  • 도커
  • ip주소
  • swift performance
  • Server
  • Core Animation
  • struct class 성능

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
스닥

Playground

[SwiftUI] inout은 어떻게 작동하는가 (C언어의 Call by Reference와 비교)
iOS 개발/SwiftUI

[SwiftUI] inout은 어떻게 작동하는가 (C언어의 Call by Reference와 비교)

2022. 3. 21. 18:38

 

 

 

 

 

Generics 함수를 공부하던 중, inout이 어떻게 작동하는지 궁금해져서 한번 주솟값들을 찍어봤습니다.

swift에서 inout은 C언어의 Call by Reference와 똑같이 작동할까요?

 

 

먼저 C언어에서 Call by Reference를 살펴볼게요

 

#include <stdio.h>


void swap(int *a, int *b)
{
	int temp;

	
	temp = *a;
	*a = *b;
	*b = temp;
}

int main(void)
{
	int a = 42;
	int b = 21;
    
	swap(&a, &b);
}

 

C에서는 pointer를 사용하여, 주솟값을 함수로 넘겨줍니다.

그리고 이 주솟값 안의 변수를 복사하고 수정하는 등의 작업을 손쉽게 처리할 수 있습니다.

 

 

 

이렇게 실제로 주솟값을 보내서 해당 주솟값이 가리키는 변수만 수정한다는 것을 알 수 있었습니다.

 

Before Call Swap Function
a: 42(address: 0x16f7c362c)
b: 21(address: 0x16f7c3628)

----------------------------
In Function

Before Swap
a: 42(address: 0x16f7c362c)
b: 21(address: 0x16f7c3628)

After Swap
a: 21(address: 0x16f7c362c)
b: 42(address: 0x16f7c3628)
----------------------------

After Call Function
a: 21(address: 0x16f7c362c)
b: 42(address: 0x16f7c3628)

 

 

 

 

그럼 Swift의 inout 키워드에서는 어떨까요?

 

 

import Foundation

func address(of object: UnsafeRawPointer) -> String{
    let address = Int(bitPattern: object)
    return String(format: "%p", address)
}

func swapTwoValues<T>(a: inout T, b: inout T) {
    var temp = a
    print("In Function")
    print("------------")
    print("a:", address(of: &a))
    print("b:", address(of: &b))
    a = b
    b = temp
    print("a:", address(of: &a))
    print("b:", address(of: &b))
    print("------------")
}



var a = "abc"
var b = "cde"
print("Before call function")
print("------------")
print("a: ", address(of: &a))
print("b: ", address(of: &b))
print("------------")
swapTwoValues(a: &a, b: &b)
print("After call function")
print("------------")
print("a: ", address(of: &a))
print("b: ", address(of: &b))
print("------------")

 

 

 

마찬가지로 해당 변수의 주솟값은 그대로 있고 주솟값이 가리키는 변수를 수정하는 작업과 정확히 같은 작업이 일어납니다.

 

Before call function
------------
a:  0x100008008
b:  0x100008018
------------

In Function
------------
a: 0x100008008
b: 0x100008018

a: 0x100008008
b: 0x100008018
------------


After call function
------------
a:  0x100008008
b:  0x100008018
------------

 

copy-in copy-out 되는 과정은, 주솟값이 복사되는 걸로 (일단)

'iOS 개발 > SwiftUI' 카테고리의 다른 글

[SwiftUI] @escaping에 대해서  (2) 2022.04.11
[SwiftUI] Generics 타입 제약 (Type Constraints) 다루기  (0) 2022.03.20
[SwiftUI] ForEach에서 \.self를 사용하는 이유와 id 중복 문제 해결 방법  (0) 2022.03.13
[SwiftUI] json parsing 방법  (0) 2022.03.10
[SwiftUI] View 가독성을 늘리는 3가지 방법 (View 쪼개기)  (0) 2022.03.10
[SwiftUI] View protocol과 body 변수에 대한 고찰 (some 키워드를 사용하는 이유)  (0) 2022.02.25
[Swift UI] @State에 대한 아주 얕은 고찰  (0) 2021.11.07
[SwiftUI] Swift UI에 대한 첫인상  (2) 2021.11.07
    스닥
    스닥
    https://github.com/feldblume5263

    티스토리툴바