IMCAT.DEV
로그인 가입
Swift 입문 객체지향

Swift 기본적인 구조체(Struct) 사용

Swift 기본적인 구조체(Struct) 사용 — 초급

기본적인 구조체(Struct) 사용

1. 도입 (왜 배워야 하는가)

Swift에서 구조체(Struct)는 데이터 모델을 정의하는 데 매우 중요한 역할을 합니다. 실무에서는 종종 객체 지향 프로그래밍(Object-Oriented Programming) 패러다임을 사용하여 데이터를 구조화하고 관리하는 것이 필요합니다. 구조체를 사용하면 관련된 데이터를 하나의 단위로 묶어 관리할 수 있으며, 이는 코드의 가독성을 높이고 유지보수를 쉽게 만들어줍니다.

구조체 없이 데이터를 개별 변수로 관리한다면, 코드가 복잡해지고 오류가 발생하기 쉬워집니다. 예를 들어, 고객 정보를 저장할 때 이름, 나이, 주소를 각각의 변수로 관리하면 관리가 어려워질 수 있습니다. 이럴 때 구조체를 사용하면 모든 관련 정보를 하나의 구조체로 묶어 간단하게 관리할 수 있습니다.

2. 핵심 개념 설명

구조체(Struct)는 관련된 데이터를 그룹화하는 사용자 정의 데이터 타입입니다. 이는 클래스(Class)와 유사하지만, 값 타입(value type)으로 처리되며, 메모리 관리 측면에서 차이가 있습니다.

실생활 비유: 구조체는 마치 "학생"이라는 카테고리의 여러 정보를 담은 "학생 카드"와 같습니다. 학생 카드에는 이름, 나이, 학년 등의 정보가 담겨 있어, 이를 통해 학생에 대한 정보를 쉽게 확인하고 관리할 수 있습니다.

관련 용어 정리

용어설명
구조체(Struct)관련된 데이터를 묶어주는 사용자 정의 데이터 타입
값 타입(Value Type)데이터가 복사되어 전달되는 타입. 구조체가 이에 해당
클래스(Class)참조 타입(Reference Type)으로, 객체 지향 프로그래밍에서 사용

3. 기본 코드 예제

아래 코드는 구조체를 정의하고 사용하는 가장 기본적인 예제입니다.

struct Student {
    var name: String
    var age: Int
    var grade: String
}

let student1 = Student(name: "홍길동", age: 20, grade: "2학년")
print("이름: \(student1.name), 나이: \(student1.age), 학년: \(student1.grade)")

위 코드의 실행 결과는 다음과 같습니다:

이름: 홍길동, 나이: 20, 학년: 2학년

코드 한 줄씩 동작 설명

  1. struct Student { ... }: Student라는 이름의 구조체를 정의합니다. 이 구조체는 이름, 나이, 학년을 속성으로 가집니다.
  2. var name: String: 학생의 이름을 문자열 타입으로 저장할 변수입니다.
  3. var age: Int: 학생의 나이를 정수 타입으로 저장할 변수입니다.
  4. var grade: String: 학생의 학년을 문자열 타입으로 저장할 변수입니다.
  5. let student1 = Student(...): Student 구조체의 인스턴스를 생성하고, student1 변수에 할당합니다.
  6. print(...): 생성된 student1의 정보를 출력합니다.
  7. 4. 실전 활용 예제

    1. 쇼핑몰에서 장바구니를 구현할 때

    구조체를 사용하여 장바구니에 담긴 상품 정보를 관리할 수 있습니다.

    struct Product {
        var name: String
        var price: Double
    }
    
    struct Cart {
        var items: [Product]
        
        func totalPrice() -> Double {
            return items.reduce(0) { $0 + $1.price }
        }
    }
    
    let product1 = Product(name: "노트북", price: 1200.00)
    let product2 = Product(name: "스마트폰", price: 800.00)
    let cart = Cart(items: [product1, product2])
    print("총 가격: \(cart.totalPrice())")

    이 코드는 장바구니에 담긴 상품의 총 가격을 계산합니다.

    2. 학생 성적 관리

    학생의 성적 정보를 구조체로 관리하여 쉽게 접근할 수 있습니다.

    struct Grade {
        var subject: String
        var score: Int
    }
    
    let mathGrade = Grade(subject: "수학", score: 95)
    let englishGrade = Grade(subject: "영어", score: 88)
    print("\(mathGrade.subject): \(mathGrade.score), \(englishGrade.subject): \(englishGrade.score)")

    5. 흔한 실수와 주의사항

    1. 구조체의 속성 초기화 누락

    struct Student {
        var name: String
        var age: Int
    }
    
    let student1 = Student() // 오류 발생: 모든 속성을 초기화해야 함

    올바른 코드:

    let student1 = Student(name: "홍길동", age: 20) // 모든 속성을 초기화

    2. 값 타입과 참조 타입의 혼동

    구조체는 값 타입이기 때문에, 복사된 인스턴스가 원본 인스턴스에 영향을 미치지 않습니다.

    var student1 = Student(name: "홍길동", age: 20)
    var student2 = student1
    student2.name = "김철수"
    print(student1.name) // "홍길동"

    이 경우 student1의 이름은 변하지 않음.

    6. 정리

    • 구조체는 관련된 데이터를 그룹화하는 사용자 정의 데이터 타입이다.
    • 값 타입으로 복사되어 전달되며, 메모리 관리가 효율적이다.
    • 실무에서 데이터 모델링에 유용하게 사용된다.
    • 다음에 학습하면 좋은 주제: 클래스(Class)와 구조체(Struct)의 차이, 프로토콜(Protocol) 사용법.