초기화 (Initialization)

Minseong·2022년 2월 22일
0

swift

목록 보기
7/10

초기화 (Initialization)란 무엇인가?

  • 초기화 (Initialization) 는 인스턴스의 클래스, 구조체, 또는 열거형을 사용하기 위해 준비하는 단계

저장 프로퍼티에 초기값 설정

  • 클래스와 구조체는 인스턴스가 생성될 때까지 모든 저장된 프로퍼티에 적절한 초기값을 반드시 설정해야함

초기화 구문 (Initializers)

  • 특정 타입의 새로운 인스턴스를 생성하기 위해 호출
  • 초기화 구문은 함수와 메서드 처럼 소괄호 앞에 식별 함수 이름을 가지지 않는다
  • 따라서 초기화 구문의 파라미터의 이름과 타입은 어떤 초기화 구문을 호출해야 하는지 식별하는데 특히 중요한 역할
  • 가장 간단한 형식:
// 파라미터가 없는 init 의 단일 초기화 구문을 정의
struct Fahrenheit {
    var temperature: Double
    init() {
        temperature = 32.0
    }
}
var f = Fahrenheit()
print("\(f.temperature)°") // 32.0°
// 기본값을 제공하면 더 간단하게 작성할 수 있다
struct Fahrenheit {
    var temperature = 32.0
}

Customizing Initialization

초기화의 정의 부분에 초기화 파라미터 (initialization parameters) 를 제공할 수 있다

struct Celsius {
    var temperatureInCelsius: Double
    //파라미터 Argument Labels 라벨 모두 사용 가능
    init(fromFahrenheit fahrenheit: Double) {
        temperatureInCelsius = (fahrenheit - 32.0) / 1.8
    }
    init(fromKelvin kelvin: Double) {
        temperatureInCelsius = kelvin - 273.15
    }
}
let boilingPointOfWater = Celsius(fromFahrenheit: 212.0)
// boilingPointOfWater.temperatureInCelsius is 100.0
let freezingPointOfWater = Celsius(fromKelvin: 273.15)
// freezingPointOfWater.temperatureInCelsius is 0.0

옵셔널 프로퍼티 타입 (Optional Property Types)

  • 옵셔널 타입의 프로퍼티는 자동적으로 "아직 값 없음" 나타내기 nil 값으로 초기화

구조체 타입에 대한 초기화 구문

  • 구조체 타입은 별도의 초기화 구문을 정의하지 않으면 자동적으로 멤버별 초기화 구문을 제공
struct Size {
    var width = 0.0, height = 0.0
}
let twoByTwo = Size(width: 2.0, height: 2.0)
// 기본값을 가지는 모든 프로퍼티의 값은 생략가능
let twoByTwo = Size(width: 2.0)
  • Size 구조체는 자동으로 새로운 Size 인스턴스를 초기화 하기 위해 사용할 수 있는 init(width:height:) 멤버별 초기화 구문을 받음

값 타입을 위한 초기화 구문 위임

  • 여러 초기화 구문에서 코드가 중복되는 것을 방지
  • 다른 초기화 구문을 참조하기 위해 self.init 을 사용
  • 초기화 구문 내에서만 self.init 을 호출가능
struct Size {
    var width = 0.0, height = 0.0
}
struct Point {
    var x = 0.0, y = 0.0
}
struct Rect {
    var origin = Point()
    var size = Size()
    init() {}
    init(origin: Point, size: Size) {
        self.origin = origin
        self.size = size
    }
    init(center: Point, size: Size) {
        let originX = center.x - (size.width / 2)
        let originY = center.y - (size.height / 2)
        self.init(origin: Point(x: originX, y: originY), size: size)
    }
}
profile
안녕하세요! ios 공부 중인 초보 개발자입니다!

0개의 댓글

관련 채용 정보