일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- IOS
- Hitit
- hokeys
- Svelte
- 자스민
- 이종호
- hokidoki
- javascript
- data structure
- 개발
- 리액트 예제
- 스위프트
- HTML
- SWIFT
- queue
- jest
- 힛잇
- TDD
- 개발자
- 호키스
- 비동기
- 자바스크립트 자료구조
- 계명대 이종호
- 자바스크립트
- 호키도키
- 리액트
- 스벨트
- react
- 자료구조
- 계명대
Archives
- Today
- Total
Dog foot print
[Swift] Inout 본문
값에 의한 전달
var x = 1;
func add(x : Int){
x += 1;
print(x)
}
add(x : x); //2
print(x); //1
우리가 함수에 전달인자로 어떤 값을 전달하게 되면, 함수 내부에서 매개변수의 값을 증가를 시켜도, 전달인자로 전달한 변수나 상수는 값이 변하지 않는 것을 볼 수 있다. 이는 함수의 전달인자로 변수를 전달 하였을 때, 메모리 주소자체를 넘겨주는 것이 아닌 메모리 내부에 존재하는 값을 전달 하여, 매개변수에 할당 하였기 때문이다. 이를 값에 의한 전달
이라 한다.
참조에 의한 전달
class Student{
var age : Int;
var name : String;
init(age : Int,name : String){
self.age = age;
self.name = name;
}
}
let harry = student(10,"harry");
func changeAge(target : Student, age : Int){
target.age = age;
}
changeAge(target : harry, age : 20);
print(harry.age) // 20
객체는 독특한 성격을 가지고 있는데, 만약 객체가 함수에 전달인자로 전달되게 되면 이는 객체가 복사되는 것이 아니기 때문에, 함수내에서 전달된 객체의 접근 할 수 있다. 이 처럼 메모리 주소의 값을 복사하는 것이 아니라, 메모리 주소 자체를 파라메터로 전달 하는 것을 참조에 의한 전달
이라고 한다.
Inout
import UIKit
var age = 20;
func changeAge(age :inout Int ){
age = 40;
}
print(age); //20
changeAge(age: &age);
print(age) //40
객체 타입을 제외한 나머지 타입들은 값에 의한 전달
이 발생한다. 그러나, Inout
키워드를 매개변수에 명시해주고, 주소 전달자와 같이 변수를 전달하게 되면 함수내에서 해당 메모리에 접근하여, 파라메터로 전달 받은 변수를 변경 할 수 있다.
물론 이는 특수한 상황에서 사용되어야 하며, 무분별한 사이드 이펙트를 제어 할 수 있다는 장점이 있다.
반응형
'IOS > Swift' 카테고리의 다른 글
[SWIFT] 구조체와 클래스 (0) | 2021.07.13 |
---|---|
[SWIFT] CLOSURE (0) | 2021.07.09 |
[SWIFT] 함수 시작하기 (0) | 2021.07.07 |
[SWIFT] Optional (0) | 2021.07.05 |
[SWIFT] Dictionary (0) | 2021.07.05 |
Comments