Swift 값 형식과 참조 형식

값 형식(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