📦 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 |
🎯 구조체의 주요 특징
특징 |
설명 |
---|---|
값 타입 (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 |
예제 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 |
⚡ 클래스(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 개발자의 실력이 한 단계 올라갈 거예요! 😄
댓글 쓰기