ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (Swift) 클래스,구조체/ 열거형 차이
    Programing Language/Swift 2019. 10. 15. 22:40
    728x90
    반응형

    - 예시 코드

    struct ValueType {
        var property = 1
    }
    
    class ReferenceType {
        var property = 1
    }
    
    // 첫 번째 구조체 인스턴스
    let firstStructInstance = ValueType()
    
    // 두 번째 구조체 인스턴스에 첫 번째 인스턴스 값 복사
    var secondStructInstance = firstStructInstance
    
    // 두 번째 구조체 인스턴스 프로퍼티 값 수정
    secondStructInstance.property = 2
    
    // 두 번째 구조체 인스턴스는 첫 번째 구조체를 똑같이 복사한 
    // 별도의 인스턴스이기 때문에 
    // 두 번째 구조체 인스턴스의 프로퍼티 값을 변경해도
    // 첫 번째 구조체 인스턴스의 프로퍼티 값에는 영향이 없음
    print("first struct instance property : \(firstStructInstance.property)")    // 1
    print("second struct instance property : \(secondStructInstance.property)")  // 2
    
    
    // 클래스 인스턴스 생성 후 첫 번째 참조 생성
    let firstClassReference = ReferenceType()
    // 두 번째 참조 변수에 첫 번째 참조 할당
    let secondClassReference = firstClassReference
    secondClassReference.property = 2
    
    // 두 번째 클래스 참조는 첫 번째 클래스 인스턴스를 참조하기 때문에
    // 두 번째 참조를 통해 인스턴스의 프로퍼티 값을 변경하면
    // 첫 번째 클래스 인스턴스의 프로퍼티 값을 변경하게 됨
    print("first class reference property : \(firstClassReference.property)")    // 2
    print("second class reference property : \(secondClassReference.property)")  // 2

     

    변수에 구조체를 넣고 인스터스화 하면 그 구조체 안에 있는 값은 복사가 된다. 그렇기에

    var firstStructInstance = ValueType()

    // 두 번째 구조체 인스턴스에 첫 번째 인스턴스 값 복사

    var secondStructInstance = firstStructInstance

     

    // 두 번째 구조체 인스턴스 프로퍼티 값 수정

    secondStructInstance.property = 2

    를 변경하더라도 firstStructInstance.property의 값은 그대로 1이다.

     

    반면에 변수에 클래스를 넣고 인스터스화 하면 그 클래스 안에 있는 값은 새롭게 복사 되는것이 아니기에,

    var firstClassReference = ReferenceType()

    // 두 번째 참조 변수에 첫 번째 참조 할당

    var secondClassReference = firstClassReference

    secondClassReference.property = 2

     

    이렇게 하면 firstClassReference.property의 값도 2가 된다.

    728x90
    반응형
Designed by Tistory.