[Swift] Swift의 convenience init 이해하기

2023. 10. 25. 21:58· → Swift Study
목차
  1. 1. 이니셜라이저(Initializer)란?
  2. 2. Designated Initializer와 Convenience Initializer
  3. 2.1. Designated Initializer
  4. 2.2. Convenience Initializer
  5. 3. convenience init 사용 예시
  6. 4. convenience init의 규칙
  7. 5. 결론

Swift에서 클래스를 작업할 때, 객체를 생성하고 초기화하는 과정은 매우 중요하다. Swift는 이니셜라이저를 사용하여 객체를 안전하고 효율적으로 초기화할 수 있는 기능이 있다! 그중에 convenience init에 대해 알아보자.

convenience init은 클래스 초기화를 더 간편하게 해주는 특별한 종류의 이니셜라이저이다. 기본 이니셜라이저(designated initializer)를 보조하는 역할을 한다.

Swift의 convenience init

객체를 생성하고 초기화하는 과정은 매우 중요합니다. 우리는 이니셜라이저를 사용하여 객체를 안전하고 효율적으로 초기화할 수 있다.

1. 이니셜라이저(Initializer)란?

클래스의 인스턴스가 생성될 때, 그 인스턴스의 모든 프로퍼티에 유효한 초기값을 할당해야 한다. 이 과정을 초기화라고 하며, 이니셜라이저는 이러한 초기화 과정을 담당하는 특별한 메서드이다.

2. Designated Initializer와 Convenience Initializer

Swift에는 두 종류의 이니셜라이저가 있다. 바로 Designated Initializer 와 Convenience Initializer.

2.1. Designated Initializer

클래스의 모든 프로퍼티를 초기화하고, 필요한 경우 부모 클래스의 이니셜라이저를 호출한다.
모든 클래스는 적어도 하나 이상의 Designated Initializer 를 가져야 한다.

2.2. Convenience Initializer

클래스 내에서 다른 이니셜라이저를 호출하여 객체를 초기화한다.
코드 중복을 줄이고, 객체 생성을 더 간편하게 만들기 위해 사용한다고 한다.

3. convenience init 사용 예시

아래는 Person 클래스에서의 convenience init의 사용 예시이다.

class Person {  
    var name: String  
    var age: Int  

    // Designated Initializer  
    init(name: String, age: Int) {  
        self.name = name  
        self.age = age  
    }  

    // Convenience Initializer  
    convenience init(name: String) {  
        self.init(name: name, age: 0)  
    }  
}  

let john = Person(name: "Swift", age: 30)  // Designated Initializer 사용  
let unknown = Person(name: "Unknown")     // Convenience Initializer 사용  

위 예시에서 Person 클래스는 이름과 나이를 프로퍼티로 가지고 있다.. init(name:age:)는 Designated Initializer로, 이름과 나이를 모두 초기화한다. 반면에 convenience init(name:)는 Convenience Initializer로, 이름만을 매개변수로 받고 나이는 기본값 0으로 설정한다.

4. convenience init의 규칙

convenience init을 사용할 때 몇 가지 규칙이 있다.

Convenience Initializer는 같은 클래스의 다른 이니셜라이저를 반드시 호출해야 한다.
Convenience Initializer는 결국 Designated Initializer를 간접적으로라도 호출해야 한다.
Designated Initializer는 부모 클래스의 이니셜라이저를 호출해야 할 수도 있지만, Convenience Initializer는 그럴 필요가 없다.

5. 결론

convenience init은 객체의 초기화 과정을 더 유연하게 만들어 준다. 코드의 중복을 줄이고, 필요한 매개변수만으로 객체를 쉽게 생성할 수 있도록 도와준다.

'→ Swift Study' 카테고리의 다른 글

[Swift] 약한참조 (weak self) Swift 로 실습해보기  (0) 2024.01.21
[Swift] GCD 알아보기 4 - 동시성 관련 문제  (0) 2024.01.11
[Swift] GCD 알아보기 3 - DispatchGroup  (0) 2024.01.11
[Swift] GCD 알아보기 2 - GCD 종류  (0) 2024.01.09
[Swift] GCD 알아보기 1 - 동기, 비동기, 직렬, 동시, 병렬  (1) 2024.01.08
  1. 1. 이니셜라이저(Initializer)란?
  2. 2. Designated Initializer와 Convenience Initializer
  3. 2.1. Designated Initializer
  4. 2.2. Convenience Initializer
  5. 3. convenience init 사용 예시
  6. 4. convenience init의 규칙
  7. 5. 결론
'→ Swift Study' 카테고리의 다른 글
  • [Swift] GCD 알아보기 4 - 동시성 관련 문제
  • [Swift] GCD 알아보기 3 - DispatchGroup
  • [Swift] GCD 알아보기 2 - GCD 종류
  • [Swift] GCD 알아보기 1 - 동기, 비동기, 직렬, 동시, 병렬
Swift librarian
Swift librarian
Swift librarian
Swift Library
Swift librarian
전체
오늘
어제
  • 분류 전체보기 (231)
    • 📺 Programming (5)
    • → Architecture (2)
    • → Design Pattern (0)
    • → Computer Science (15)
    • ⚙️ Algorithm (0)
    • → 알고리즘 관련 (22)
    • → Problems (104)
    • 🚀 Project (0)
    • → 알쏭달쏭 (0)
    • → Shook (2)
    • → Solver (8)
    • → Taster (7)
    • → Outline (4)
    • → Pointer (2)
    • → Guesser (3)
    • 🦜 Swift (2)
    • → Swift Archive (12)
    • → Swift Study (12)
    • → Xcode (6)
    • 🧰 Framework (0)
    • → Foundation (1)
    • → UIKit (2)
    • → SwiftUI (3)
    • → CoreData (2)
    • → MapKit (1)
    • → CoreHaptic (1)
    • → User Notification (1)
    • → StoreKit (2)
    • 🏛️ Library (0)
    • → TCA (0)
    • 🐈‍⬛ Git (8)
    • → Git의 원리 (2)
    • → Git 심화 (1)
    • 📦 Other (1)
    • 👦🏻 Log (0)

최근 글

hELLO · Designed By 정상우.v4.2.2
Swift librarian
[Swift] Swift의 convenience init 이해하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.