값 형식(Value Type)과 참조 형식(Reference Type)
값 형식 - Structure , Enumeration , Tuple
참조 형식 - Class , Closure
값 형식은 원본에 영향을 미치지 않지만 참조 형식은 원본에 영향을 미친다.
- 객체지향 프로그래밍에서는 대부분 참조형식으로 구현한다.
- 상대적으로 적은 데이터를 구현하고 상속이 필요하지 않으면 값 형식을 사용한다.
- 값이 전달되는 시점에 복사본이 생성되어야 하는 경우에도 값 형식을 사용한다.
- 참조를 전달해야 하거나 상속을 해야하는 경우는 Class를 사용한다.
값 형식
struct Point {
var x: Int
var y: Int
}
var point1 = Point(x: 5, y: 10)
var point2 = point1 // 복사
point1.x = 7 // point1 변경
print(point1) // 출력 : Point(x: 7, y:10)
print(point2) // 출력 : Point(x: 5, y:10) // 복사본을 사용하므로 point2는 변경되지 않는다.
위 예시 중 point1 , 2 는 모두 Point 구조체의 인스턴스를 가지고 있다,
하지만 값 형식의 특성으로 데이터를 복사해서 처리하기 때문에 point1 을 변경해도 point2 는 변경되지 않는다.
참조 형식
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var person1 = Person(name: "Alice")
var person2 = person1 // 참조 복사
person1.name = "Bob" // person1 변경
print(person1.name) // 출력 : Bob
print(person2.name) // 출력 : Bob - 값 형식과 다르게 person2도 변경됨
person1 과 person2 는 Person 클래스의 인스턴스를 받는다.
따라서 person1의 값을 변경하면 person2의 값도 변경된다.
'◽️ Programming > Swift 문법' 카테고리의 다른 글
Swift 계산 속성 (0) | 2024.03.01 |
---|---|
Swift 저장 속성 (0) | 2024.03.01 |
Swift Structure와 Class의 공통점과 차이점 (0) | 2024.03.01 |
Swift enum (0) | 2024.03.01 |
Swift Closure (0) | 2024.03.01 |