Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- n번째 원소까지
- 스페인어
- 문자열 정렬하기 (1)
- 프로그래머스 자동커밋
- 연산자
- 프로그래머스 문자열 정렬하기 (1)
- 프로그래머스 최댓값 만들기(2)
- 프로그래머스 조건에 맞게 수열 변경하기 3
- Break
- 객체지향
- 프로그래머스 주사위 게임1
- 주사위 게임1
- cocoapods 설치 오류
- continue
- 프로그래머스 문자열 붙여서 출력하기
- ruby설치
- 스파르타 코딩클럽 내일배움캠프
- 배열 만들기1
- 프로그래머스 n의 배수 고르기
- Til
- Error installing cocoapods
- 프로그래머스
- 조건에 맞게 수열 변경하기 3
- swift
- 문자열 붙여서 출력하기
- 스파르타코딩캠프
- 프로그래머스 배열 만들기1
- 프로그래머스 n번째 원소까지
- array
- 프로그래머스 암호 해독
Archives
- Today
- Total
dev._.note
[Swift] 초기화(Initialization) 본문
📌 초기화와 생성자
- 초기화는 클래스, 구조체, 또는 열거형의 인스턴스를 생성하고 속성을 초기화하여 사용할 수 있도록 하는 과정을 의미. Swift에서 초기화는 객체가 메모리에 할당되고 속성이 적절히 설정되어 안정적으로 사용될 수 있도록 하는 중요한 단계.
인스턴스란?
객체 지향 프로그래밍에서, 인스턴스(Instance)는 클래스, 구조체 또는 열거형과 같은 타입의 실제 예시를 나타냄. 클래스나 구조체 등의 템플릿(틀)을 기반으로 생성된 실제 데이터를 가리킴. 즉, 클래스나 구조체를 기반으로 만들어진 객체를 인스턴스라 함.
// Person 클래스 정의
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func greet() {
print("Hello, my name is \\(name) and I'm \\(age) years old.")
}
}
// Person 클래스의 인스턴스 생성
let john = Person(name: "John", age: 30)
let emily = Person(name: "Emily", age: 25)
// 생성된 인스턴스 사용
john.greet() // 출력: Hello, my name is John and I'm 30 years old.
emily.greet() // 출력: Hello, my name is Emily and I'm 25 years old.
초기화 방법
기본 초기화(Default Initialization):
클래스의 속성이 기본 값으로 초기화되는 것을 지원하며 이는 클래스의 모든 속성이 기본 값을 가지고 있을 때 자동으로 발생.
class Person {
var name: String = ""
var age: Int = 0
}
let person = Person() // 기본 초기화
지정 초기화(Designated Initialization):
init 키워드를 사용하여 클래스의 모든 속성을 초기화.
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let person = Person(name: "John", age: 30) // 지정 초기화
편의 초기화(Convenience Initialization):
기본 초기화 또는 지정 초기화를 간편하게 호출.
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
convenience init(name: String) {
self.init(name: name, age: 0)
}
}
let person = Person(name: "Alice") // 편의 초기화 사용
강제 해제(Force Unwrapping)되지 않는 옵셔널 초기화:
옵셔널 타입을 가진 속성은 선언과 동시에 초기화되거나 나중에 값을 할당가능.
class Person {
var name: String?
var age: Int = 0
}
let person = Person()
person.name = "Emily"
person.age = 25
📌 실패 가능 생성자
- 기존 생성자는 컴파일 시점에 모든 프로퍼티가 초기화 되어야 하기 때문에 초기화 실패의 경우, 컴파일 에러가 발생
- 하지만 실패 가능 생성자(Failable Initializer)는 초기화에 실패하더라도 에러가 발생하지 않고 nil을 리턴. Optional한 생성자.
// class의 실패 가능 생성자
class UserProfile {
let username: String
// 실패 가능 생성자: 유효하지 않은 이름을 사용할 경우 초기화 실패
init?(username: String) {
// 유효한 사용자 이름인지 확인
guard username.count >= 5 else {
return nil // 입력된 사용자 이름이 유효하지 않을 경우 초기화 실패
}
self.username = username
}
}
// 실패 가능 생성자를 사용하여 인스턴스 생성
if let validProfile = UserProfile(username: "user123") {
print("Valid username: \(validProfile.username)")
} else {
print("Invalid username. Username should be at least 5 characters long.")
}
if let invalidProfile = UserProfile(username: "user") {
print("Valid username: \(invalidProfile.username)")
} else {
print("Invalid username. Username should be at least 5 characters long.")
}
// struct의 실패 가능 생성자
struct Animal {
let name: String
init?(name: String) {
if name.isEmpty {
return nil // 생성자 내에서 실패 가능 부분에 nil을 리턴하면 됨
}
self.name = name
}
}
let animal1 = Animal(name: "choco") //인스턴스 생성. 타입은 Animal? 이다
let animal2 = Animal(name: "") // 문자열이기에 유효한 타입이지만 nil이 리턴된다
// enum의 실패 가능 생성자
enum HeightUnit {
case feet
case centiMeter
init?(symbol: String) {
switch symbol {
case "f":
self = HeightUnit.feet
case "cm":
self = HeightUnit.centiMeter
default:
return nil
}
}
}
let feet: HeightUnit = HeightUnit.feet // HeightUnit 타입
let centi: HeightUnit? = HeightUnit(symbol: "cm")
let feet2: HeightUnit? = HeightUnit(symbol: "F") // nil
'Dev > SWIFT' 카테고리의 다른 글
[Swift] readLine() (2) | 2023.12.02 |
---|---|
[Swift] 계산기 만들기 (0) | 2023.12.01 |
[Swift] 상속(Inheritance) (0) | 2023.11.30 |
[Swift] Class와 Struct, Enum (0) | 2023.11.30 |
[Swift] radix (0) | 2023.11.29 |