포스트

문법 (10) 구조체 (struct) vs 클래스 (class) vs 열거형 (enum)

Swift에서 구조체(struct), 클래스(class), 열거형(enum)의 차이와 활용법을 설명합니다.

문법 (10) 구조체 (struct) vs 클래스 (class) vs 열거형 (enum)

구조체 (struct) vs 클래스 (class) vs 열거형 (enum)

Swift에서는 데이터를 구조화하여 다루기 위해 구조체(struct), 클래스(class), 열거형(enum)을 사용할 수 있습니다.
각 타입의 차이점을 이해하고 적절한 상황에서 사용하는 것이 중요합니다.


1. 구조체 (struct)

구조체는 값 타입(Value Type)이며, 인스턴스를 복사할 때 새로운 복사본을 생성합니다.

구조체 선언

1
2
3
4
5
6
7
8
9
10
11
struct Person {
    var name: String
    var age: Int
}

var person1 = Person(name: "Alice", age: 25)
var person2 = person1 // 복사됨 (새로운 인스턴스)
person2.name = "Bob"

print(person1.name) // Alice
print(person2.name) // Bob
  • person1person2는 서로 독립적인 메모리 공간을 가짐.

2. 클래스 (class)

클래스는 참조 타입(Reference Type)이며, 인스턴스를 복사할 때 같은 객체를 참조합니다.

클래스 선언

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Person {
    var name: String
    var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

var personA = Person(name: "Alice", age: 25)
var personB = personA // 같은 객체를 참조
personB.name = "Bob"

print(personA.name) // Bob
print(personB.name) // Bob
  • personApersonB는 같은 객체를 가리키므로 변경 사항이 공유됨.

3. 열거형 (enum)

열거형은 값 타입이며, 특정한 값들의 집합을 정의하는 데 사용됩니다.

열거형 선언

1
2
3
4
5
6
7
8
9
enum Direction {
    case north
    case south
    case east
    case west
}

var move = Direction.north
move = .south

열거형과 연관 값 (Associated Value)

1
2
3
4
5
6
enum Result {
    case success(data: String)
    case failure(error: String)
}

let response = Result.success(data: "데이터 로드 성공")

4. 구조체 vs 클래스 vs 열거형 비교

특징구조체 (struct)클래스 (class)열거형 (enum)
타입값 타입참조 타입값 타입
상속불가능가능불가능
복사 방식독립적인 복사본 생성같은 객체를 참조독립적인 복사본 생성
사용 목적단순한 데이터 구조복잡한 객체 및 상속 필요특정한 값의 집합

5. 언제 구조체, 클래스, 열거형을 사용할까?

  • 구조체 (struct): 데이터가 독립적으로 유지되어야 할 때 사용 (예: 좌표, 색상, 설정 값)
  • 클래스 (class): 상속이 필요하거나, 객체 간 상태 공유가 필요한 경우 (예: 네트워크 연결, 데이터 모델)
  • 열거형 (enum): 특정한 값의 집합을 표현해야 할 때 (예: 상태, 방향, HTTP 응답 코드)

결론

Swift에서는 값 타입(구조체, 열거형)참조 타입(클래스)을 구분하여 사용할 수 있습니다.
적절한 타입을 선택하면 메모리 관리와 코드 안정성을 높일 수 있습니다.

다음 글에서는 프로퍼티 (저장 프로퍼티, 연산 프로퍼티, lazy)에 대해 알아보겠습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.