본문 바로가기

Dev/iOS & SWIFT

[Swift] 클래스 vs 구조체 vs 열거형 | 값 (Value) vs 참조 (Reference)

728x90

01. 클래스 vs 구조체 vs 열거형

클래스 (Class)

  • 전통적인 OOP 관점에서의 클래스
  • 단일 상속
  • 메서드/프로퍼티
  • 참조 타입
  • Apple 프레임워크의 큰 뼈대는 모두 클래스로 구성

 

구조체 (Struct)

  • C 언어 등의 구조체보다 다양한 기능
  • 상속 불가 → 자신을 상속할 필요가 없거나, 상속받을 필요가 없을 때 사용!
  • 메서드/프로퍼티
  • 값 타입 → 참조가 아닌 복사!
  • Swift의 대부분 큰 뼈대는 모두 구조체로 구성

 

열거헝 (Enum, Enumeration)

  • 유사한 종류의 여러 값을 유의미한 이름으로 한 곳에 모아 정의
    → 열거형 자체가 하나의 데이터 타입! case 하나하나 전부 하나의 유의미한 값으로 취급
  • 다른 언어의 열거형과는 많이 다른 존재
  • 상속 불가
  • 메서드/프로퍼티
  • 값 타입

 

  Class Struct Enum
Type Reference Value Value
Subclassing O X X
Extension O O O

 

02. Value vs Reference

  • Value: 데이터를 전달할 때 값을 복사하여 전달
  • Reference: 데이터를 전달할 때 값의 메모리 위치를 전달
truct 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

 

본 내용은 부스트코스의 'iOS 프로그래밍을 위한 스위프트 기초' 강의를 토대로 작성되었습니다

 

728x90