Swift(20) 인스턴스

개발렬·2023년 8월 2일

Swift

목록 보기
20/23
post-thumbnail

인스턴스에 대하여

인스턴스는 클래스나 구조체의 실제 예제, 즉 생성된 객체를 인스턴스라고 합니다.

struct Person() {}

let bob = Person()

bob은 Person 구조체의 인스턴스입니다. bob 객체는 Person 구조체의 인스턴스라고 할 수 있습니다.
이렇게 생성된 인스턴스로 해당 구조체에서 정의된 속성 혹은 메서드를 사용할 수 있습니다.

class Person {
    var name: String
    var age: Int

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

    func sayHello() {
        print("안녕하세요! 저의 이름은 \(name)이고, \(age)살입니다.")
    }
}

// Person 클래스의 인스턴스 생성
let john = Person(name: "John", age: 30)
john.sayHello() // 출력: 안녕하세요! 저의 이름은 John이고, 30살입니다.

인스턴스가 생성되면?

인스턴스가 생성되면 데이터를 저장할 메모리 공간이 할당됩니다. 스택이나 힙에서 이루어집니다.

  1. 스택에서의 메모리 할당
  • 함수나 메소드에서 사용되는 지역 변수와 함수의 매개변수들은 스택에 할당됩니다.
  • 할당된 변수들의 생명주기는 함수 호출이 완료되면 사라집니다.
  • 스택은 정적인 크기를 갖고 있으므로, 컴파일 타임에 스택의 크기가 결정됩니다.
  1. 힙에서의 메모리 할당
  • 클래스와 클로저 같은 참조 타입은 인스턴스가 힙 메모리에 할당됩니다.
  • 힙은 개발자가 직접 할당하고 해제해야 하는 메모리 영역입니다. 힙은 크기가 상대적으로 크며, 프로그램의 실행 중에 동적으로 메모리를 할당하고 해제할 수 있습니다.
  • Swift는 ARC (Automatic Reference Counting)를 사용하여 메모리 관리를 수행합니다. 객체는 해당 객체를 참조하는 변수 또는 상수의 수에 따라 참조 카운트가 증가하고 감소합니다.

조건이 있는 인스턴스를 만들어보자 init?

init?(name: String, year: Int, address: String? = nil, phoneNumber: Int? = nil) {

        guard name.count > 2, year >= 1990 else {
            return nil
        }

        self.name = name
        self.year = year
        self.address = address
        self.phoneNumber = phoneNumber
}

init 메소드가 옵셔널(init?)로 선언하여 생성자(초기화 메소드)가 유효하지 않은 정보로 호출되는 경우, 즉 유효성 검사를 통과하지 못하는 경우 해당 생성자가 인스턴스를 생성하지 않고 nil을 반환할 수 있습니다.

profile
Flutter, iOS...나는 모바일 앱 개발자

0개의 댓글