학습
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학년
코드 한 줄씩 동작 설명
struct Student { ... }:Student라는 이름의 구조체를 정의합니다. 이 구조체는 이름, 나이, 학년을 속성으로 가집니다.var name: String: 학생의 이름을 문자열 타입으로 저장할 변수입니다.var age: Int: 학생의 나이를 정수 타입으로 저장할 변수입니다.var grade: String: 학생의 학년을 문자열 타입으로 저장할 변수입니다.let student1 = Student(...):Student구조체의 인스턴스를 생성하고,student1변수에 할당합니다.print(...): 생성된student1의 정보를 출력합니다.- 구조체는 관련된 데이터를 그룹화하는 사용자 정의 데이터 타입이다.
- 값 타입으로 복사되어 전달되며, 메모리 관리가 효율적이다.
- 실무에서 데이터 모델링에 유용하게 사용된다.
- 다음에 학습하면 좋은 주제: 클래스(Class)와 구조체(Struct)의 차이, 프로토콜(Protocol) 사용법.
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의 이름은 변하지 않음.