// 날짜를 표현하는 열거형 enum
enum Date {
case intDate(Int, Int, Int) // (Int, Int, Int) 형태의 연관값 (연, 월, 일)
case stringDate(String) // String 형태의 연관값 (예: "2025년 5월 20일")
}
// 열거형 값 선언 및 초기화
var todayDate = Date.intDate(2025, 4, 30)
// 아래 줄을 주석 처리하면 intDate(2025,4,30)이 유지됨
todayDate = Date.stringDate("2025년 5월 20일")
// 열거형 값을 switch문으로 분기 처리
switch todayDate {
case .intDate(let year, let month, let day):
print("\(year)년 \(month)월 \(day)일")
case .stringDate(let date):
print(date)
}
✅ Swift 구조체 정리 요약
- 기본 자료형은 구조체
- Int, Double, String 등은 모두 struct로 정의됨
- Memberwise Initializer 자동 제공
- 구조체는 별도로 생성자를 만들지 않아도 자동으로 멤버 변수용 생성자가 생김
- @frozen 구조체
- 예: @frozen struct Int
- 의미: 추후에 속성을 추가/삭제할 수 없음 (최적화를 위해 고정)
- Array, Dictionary, Set
- 이들도 모두 제네릭 구조체(Generic Structure)
- struct Array<Element>처럼 타입을 받아 동작함
- 값 타입 vs 참조 타입
- struct, enum 인스턴스 → 값 타입 (value type)
- class 인스턴스 → 참조 타입 (reference type)
- 구조체는 상속 불가
- 오직 클래스만 상속 가능
✅ Memberwise Initializer란?
구조체(struct)를 선언하면 자동으로 생성해주는 생성자(initializer)를 말함
구조체에 정의된 모든 프로퍼티를 매개변수로 받아 초기화할 수 있게 해준다.
(시험 나올 거 같음)
✅ 구조체 vs 클래스 기본 차이
항목구조체 (struct) 클래스 (class)
타입 | 값 타입 (Value Type) | 참조 타입 (Reference Type) |
복사 방식 | 복사 시 값 전체 복사 | 복사 시 주소(참조) 공유 |
상속 | ❌ 불가 | ✅ 가능 |
Deinit (소멸자) | 없음 | 있음 |
mutating 키워드 | 필요 | 불필요 |
스레드 안정성 | 상대적으로 좋음 | 공유 시 충돌 우려 있음 |
✅ Swift의 extension 정리
📌 extension이란?
- 기존에 있는 클래스, 구조체, 열거형, 프로토콜에
새로운 기능을 추가할 때 사용하는 문법
(시험 나올 거 같음)
extension Double {
var squared: Double {
return self * self
}
}
- Double 타입에 squared라는 계산 프로퍼티 추가
- self * self → 제곱값을 반환
let myValue: Double = 3.5
print(myValue.squared) // 👉 12.25 (3.5 * 3.5)
print(3.5.squared) // 👉 12.25 (리터럴도 사용 가능)
print(myValue.isZero) // 👉 false (0이 아니니까)
✅ 요약
코드 설명 결과
squared | 제곱 계산 | 12.25 |
isZero | 0인지 확인 | false |
extension으로 Double에 기능 추가 가능!
필요하면 Int나 String에도 확장해줄 수 있음