iOS Study/Swift Study
Swift์์์ Call By Value vs Call By Reference
youngjaeLee1026
2022. 3. 12. 16:35
1. Call By Value
- Call By Value๋, ๊ฐ์ ์ํ ํธ์ถ๋ก ํจ์์ ์ ๋ฌ์ธ์๋ก ๋ณ์์ ๊ฐ์ด ์ ๋ฌ๋ ๋ ๋ณต์ฌ๋ผ์ ์ ๋ฌ๋๋ ๋ฐฉ๋ฒ
- ๋ณ์์ ๊ฐ์ด ๋ณต์ฌ๋ผ์ ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์ ํจ์์์ ๊ฐ์ ๋ณ๊ฒฝํ๋๋ผ๋ ์๋ณธ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์
2. Call By Reference
- Call By Reference๋, ์ฐธ์กฐ์ ์ํ ํธ์ถ๋ก ํจ์์ ์ ๋ฌ์ธ์๋ก ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ด ์ ๋ฌ๋๋ ๋ฐฉ๋ฒ
- ์ฃผ์๊ฐ ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์, ํจ์์์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ์๋ณธ ๊ฐ์ด ๋ณ๊ฒฝ๋จ
//
// main.swift
// CallByValueCallByReference
//
// Created by ์ด์์ฌ on 2022/03/12.
//
//MARK: - Framework
import Foundation
//MARK: - Type
struct ValueType {
//MARK: - Property
var number: Int
//MARK: - Initializer
init(_ number: Int) {
self.number = number
}
}
class ReferenceType {
//MARK: - Property
var number: Int
//MARK: - Initializer
init(_ number: Int) {
self.number = number
}
}
//MARK: - Function
func callByValue(_ valueType: ValueType) -> Void {
var newValueType: ValueType = valueType
newValueType.number = 10
}
func callByReference(_ referenceType: ReferenceType) -> Void {
var newReferenceType: ReferenceType = referenceType
newReferenceType.number = 10
}
func solution() -> Void {
var valueType: ValueType = ValueType(5)
var referenceType: ReferenceType = ReferenceType(5)
print("Before Call By Value : \(valueType.number)")
print("Before Call By Reference : \(referenceType.number)")
callByValue(valueType)
callByReference(referenceType)
print("Call By Value : \(valueType.number)")
print("Call By Reference : \(referenceType.number)")
}
solution()
3. Swift์์์ Array
- Swift์์ Array๋ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด struct ์ฆ, ๊ฐ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ ์์ ์ฃผ์๋ฅผ ์ ๋ฌํ๋ Java์ ๋ฌ๋ฆฌ Call By Value์ ๋ฐฉ์์ ๋ฐ๋ฆ
- Call By Value๋ฅผ Call By Reference ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ผ๋, ๊ถ์ฅํ์ง ์๋ ๋ฐฉ๋ฒ์
- ๋จ, ๋ชฉ์ ์ด ๋ช ํํ๊ณ ์ ํํ๊ฒ ๋์ํ๋ ๊ฒฝ์ฐ์๋ ์๋ ์์์ฒ๋ผ ์ฌ์ฉํ ์๋ ์์
//array์ 0๋ฒ ์์์ 1๋ฒ ์์๋ฅผ ๋ฐ๊พธ๋ ํจ์
func swap(_ array: inout [Int]) -> Void {
let temp: Int = array[0]
array[0] = array[1]
array[1] = temp
}
func solution() -> Void {
var array: [Int] = [2, 1, 3, 4, 5]
swap(&array)
print(array) // [1, 2, 3, 4, 5]
}
solution()