카테고리 없음

iOS프로그래밍실무(7/15)

59date 2025. 4. 16. 21:23
// 날짜를 표현하는 열거형 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 구조체 정리 요약

  1. 기본 자료형은 구조체
    • Int, Double, String 등은 모두 struct로 정의됨
  2. Memberwise Initializer 자동 제공
    • 구조체는 별도로 생성자를 만들지 않아도 자동으로 멤버 변수용 생성자가 생김
  3. @frozen 구조체
    • 예: @frozen struct Int
    • 의미: 추후에 속성을 추가/삭제할 수 없음 (최적화를 위해 고정)
  4. Array, Dictionary, Set
    • 이들도 모두 제네릭 구조체(Generic Structure)
    • struct Array<Element>처럼 타입을 받아 동작함
  5. 값 타입 vs 참조 타입
    • struct, enum 인스턴스 → 값 타입 (value type)
    • class 인스턴스 → 참조 타입 (reference type)
  6. 구조체는 상속 불가
    • 오직 클래스만 상속 가능

 

✅ 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에도 확장해줄 수 있음