레이블이 OOP인 게시물을 표시합니다. 모든 게시물 표시
레이블이 OOP인 게시물을 표시합니다. 모든 게시물 표시

2025/07/06

Swift 구조체(Struct)와 클래스(Class): Swift 객체 지향 프로그래밍의 핵심

안녕하세요! 지난 블로그에는 Swift 앱의 안정성을 책임지는 옵셔널에 대해 자세히 알아보았는데요. 
오늘은 Swift 프로그래밍의 가장 근간이 되는 두 가지 사용자 정의 데이터 타입, 바로 구조체(Struct)클래스(Class)에 대해 깊이 파고들 것입니다. 

구조체와 클래스는 데이터를 캡슐화하고, 관련된 기능들을 묶어서 관리하는 객체 지향 프로그래밍의 핵심 요소입니다. 
이 둘은 겉보기에는 비슷해 보이지만, 내부적으로 데이터를 다루는 방식에 큰 차이가 있어 Swift 개발에서 매우 중요한 선택의 기로에 서게 합니다. 
언제 무엇을 사용해야 할지 명확히 이해하는 것이 견고하고 효율적인 앱을 만드는 데 결정적인 역할을 할 것입니다. 

 1. 구조체(Struct): 값 타입(Value Type)의 대표 주자 


구조체는 관련된 데이터를 하나로 묶어 표현하는 경량화된 타입입니다. Swift의 대부분의 기본 데이터 타입(Int, String, Array, Dictionary 등)이 사실은 구조체로 구현되어 있습니다. 구조체의 가장 큰 특징은 **값 타입(Value Type)**이라는 점입니다.

💡 값 타입이란?


값 타입은 데이터를 복사할 때, 실제 값을 통째로 복사합니다. 마치 문서를 복사해서 원본과 완전히 다른 사본을 만드는 것과 같습니다. 사본을 아무리 수정해도 원본에는 영향을 주지 않습니다.

//Swift 값 타입 예제
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 10, y: 20)
var p2 = p1 // p1의 값이 p2로 복사됨 (별개의 복사본 생성)

print("p1: (\(p1.x), \(p1.y))") // 출력: p1: (10, 20)
print("p2: (\(p2.x), \(p2.y))") // 출력: p2: (10, 20)

p2.x = 30 // p2의 값만 변경
p2.y = 40

print("p1 (변경 후): (\(p1.x), \(p1.y))") // 출력: p1 (변경 후): (10, 20) - p1은 변하지 않음
print("p2 (변경 후): (\(p2.x), \(p2.y))") // 출력: p2 (변경 후): (30, 40)

위 예시에서 p2 = p1 을 했을 때 p1 의 모든 값이 p2 로 복사되었고, 이후 p2를 변경해도 p1은 영향을 받지 않는 것을 볼 수 있습니다.