[Swift Apple ] Swift 구조체(Struct)란?

📦 Swift 구조체(Struct)란?

– 쉽고 가벼운 데이터 관리의 시작!

Swift를 배우다 보면 “클래스 말고도 구조체(Struct) 라는 게 있다”고 많이 듣게 됩니다.

그렇다면 구조체는 무엇이고, 왜 Swift에서 자주 사용하는 걸까요?





✅ 구조체(Struct)란 무엇인가요?

구조체(Struct) 는 여러 개의 데이터를 하나로 묶고, 그 안에 기능(메서드)도 담을 수 있는 데이터 설계 도구입니다. 클래스처럼 속성(Properties)메서드(Methods) 를 가질 수 있지만, 가볍고 단순한 목적으로 사용됩니다. Swift는 다른 언어보다 구조체를 훨씬 적극적으로 사용해요!  Swift의 대표적인 타입인 String, Array, Dictionary 도 사실 구조체입니다!


🏗️ 구조체 기본 문법

struct Student {
    var name: String
    var grade: Int

    func introduce() {
        print("안녕하세요! 저는 \(grade)학년 \(name)입니다.")
    }
}

let student1 = Student(name: "지우", grade: 6)
student1.introduce()

출력:

안녕하세요! 저는 6학년 지우입니다.


Swift 구조체 Struct
Swift 구조체 Struct



🎯 구조체의 주요 특징

특징

설명

값 타입 (Value Type)

복사(copy)해서 전달됨

상속 불가

클래스처럼 상속은 안 됨

초기화 지원

자동으로 생성자(init) 제공

불변성 강조

let으로 선언 시 내부 데이터 수정 불가



🧪 구조체 예제


예제 1: 좌표(Point) 구조체

struct Point {
    var x: Int
    var y: Int

    func display() {
        print("현재 위치: (\(x), \(y))")
    }
}

let point = Point(x: 10, y: 20)
point.display()


Swift 구조체 Struct 예제 1
Swift 구조체 Struct 예제 1




예제 2: 직사각형(Rectangle) 구조체

struct Rectangle {
    var width: Int
    var height: Int

    func area() -> Int {
        return width * height
    }
}

let rect = Rectangle(width: 5, height: 4)
print("넓이: \(rect.area())")


Swift 구조체 Struct 예제 2
Swift 구조체 Struct 예제 2



⚡ 클래스(Class)와의 차이점

구분

구조체 (Struct)

클래스 (Class)

타입

값 타입

참조 타입

상속

❌ 불가

✅ 가능

메모리

스택(Stack) 저장

힙(Heap) 저장

사용 목적

가벼운 데이터

복잡한 객체 관리

예시

좌표, 크기, 설정값

사용자 정보, 게임 캐릭터



💡 언제 구조체를 사용할까?


Swift 공식 가이드라인에 따르면, 아래와 같은 경우 구조체 사용이 권장됩니다.

  • 데이터가 비교적 간단할 때

  • 복사해도 문제 없을 때 (값 타입 특성)

  • 상속이 필요 없을 때

  • 여러 곳에서 안전하게 사용해야 할 때


✅ 예시: 좌표, 크기(Size), 설정값, 모델 데이터(API 응답 데이터 등)



✏️ 실습 아이디어


실습 1: 영화(Movie) 구조체 만들기

  • 속성: 제목, 감독, 상영시간

  • 기능: 영화 정보 출력 메서드



실습 2: 은행 계좌(Account) 구조체 만들기

  • 속성: 계좌번호, 잔액

  • 기능: 입금, 출금 메서드


단, mutating 키워드로 값 변경이 가능하도록 설정해보세요!
struct Account {
    var balance: Int = 0

    mutating func deposit(amount: Int) {
        balance += amount
    }
}








🧪  실습 과제 참조 코드

🎬 실습 1: 영화(Movie) 구조체 만들기

struct Movie {
    var title: String
    var director: String
    var runningTime: Int   // 단위: 분 (minutes)

    func displayInfo() {
        print("🎥 영화 제목: \(title)")
        print("🎬 감독: \(director)")
        print("⏱️ 상영시간: \(runningTime)분")
    }
}

// 사용 예시
let myFavoriteMovie = Movie(title: "Interstellar", director: "Christopher Nolan", runningTime: 169)
myFavoriteMovie.displayInfo()

/*
출력 결과:
🎥 영화 제목: Interstellar
🎬 감독: Christopher Nolan
⏱️ 상영시간: 169분
*/


🏦 실습 2: 은행 계좌(Account) 구조체 만들기 (mutating 활용)

struct Account {
    var accountNumber: String
    private(set) var balance: Int = 0

    // 입금 메서드
    mutating func deposit(amount: Int) {
        guard amount > 0 else {
            print("❌ 입금 금액은 0보다 커야 합니다.")
            return
        }
        balance += amount
        print("✅ \(amount)원 입금 완료. 현재 잔액: \(balance)원")
    }

    // 출금 메서드
    mutating func withdraw(amount: Int) {
        guard amount > 0 else {
            print("❌ 출금 금액은 0보다 커야 합니다.")
            return
        }
        if amount <= balance {
            balance -= amount
            print("✅ \(amount)원 출금 완료. 현재 잔액: \(balance)원")
        } else {
            print("❌ 출금 실패: 잔액 부족")
        }
    }
}

// 사용 예시
var myAccount = Account(accountNumber: "123-456-789")
myAccount.deposit(amount: 5000)    // ✅ 입금
myAccount.withdraw(amount: 2000)   // ✅ 출금
myAccount.withdraw(amount: 4000)   // ❌ 잔액 부족


/*
출력 결과:
✅ 5000원 입금 완료. 현재 잔액: 5000원
✅ 2000원 출금 완료. 현재 잔액: 3000원
❌ 출금 실패: 잔액 부족
*/

🚨 구조체 사용 시 주의할 점

  • 값 타입이라서 복사본이 전달됩니다.

  • 내부 데이터를 변경하려면 메서드에 mutating 키워드를 꼭 사용해야 해요.

  • 너무 복잡한 로직이나 상속이 필요한 경우엔 Class 를 고려하세요.



✨ 마무리하며


Swift에서 구조체는 단순한 데이터 묶음 그 이상입니다!

Swift가 지향하는 안정성(Safety)효율성을 잘 반영한 타입이죠.

  • 가볍고 빠르게 처리할 데이터 → Struct

  • 복잡하고 확장 가능한 객체 → Class


이제 상황에 맞게 구조체를 활용해보세요.

Swift 개발자의 실력이 한 단계 올라갈 거예요! 😄

댓글 쓰기