[swift] 스위프트 투칸의 동반 동물

스위프트 언어는 풍부한 기능을 제공하며, 그 중 하나는 동반 객체(companion object)입니다. 동반 객체는 클래스, 구조체 또는 열거형과 연결되어 해당 타입의 관련 데이터와 동작을 제공합니다.

동반 객체는 특정 타입의 인스턴스와 관련된 전역 데이터와 함수를 사용하기 위해 유용합니다. 예를 들어, 동반 객체를 사용하여 특정 타입의 인스턴스 생성을 추상화할 수 있습니다. 이것은 특히 팩토리 메서드를 사용해 객체 생성을 제어해야 하는 경우 유용합니다.

스위프트의 동반 객체는 특별한 이름을 가지지 않으며, 동반 객체가 정의된 타입의 이름과 동일한 이름으로 접근할 수 있습니다. 이 점은 Java 등의 다른 언어에서 사용되는 동반 객체와 다릅니다.

struct Animal {
    let name: String
    static let numberOfLegs = 4
    
    static func makeSound() {
        print("Animal makes a sound!")
    }
    
    static var favoriteAnimal: Animal {
        return Animal(name: "Dog")
    }
}

let cat = Animal(name: "Cat")
print(Animal.numberOfLegs) // 4
Animal.makeSound() // Animal makes a sound!
print(Animal.favoriteAnimal.name) // Dog

위의 코드에서 Animal 구조체는 name 속성과 numberOfLegs 속성을 가지며, makeSound()favoriteAnimal의 두 가지 동반 객체 메서드를 정의합니다. 동반 객체 메서드는 static 키워드로 마크되며, 동반 객체 속성 또한 정적 속성으로 선언됩니다.

이제 우리는 Animal 타입의 인스턴스를 생성하고, 동반 객체의 속성과 메서드에 접근할 수 있습니다. 위의 예시에서 numberOfLegs는 모든 Animal 인스턴스에 동일한 값을 가지며, makeSound()는 인스턴스가 아니라 타입 자체와 연관되어 있습니다. 또한 favoriteAnimal은 동반 객체 속성으로, 모든 인스턴스가 공유할 수 있는 값을 반환합니다.

스위프트의 동반 객체는 일반적으로 타입에 특정한 기능을 추가하는 데 사용되지만, 개발자의 필요에 따라 다양하게 활용될 수 있습니다. 앞으로 동반 객체를 활용하여 객체 생성 및 타입 관련 메서드를 직관적이고 효율적으로 작성해보세요!

참고 자료