🍎swift/swift 기초

[swift] 프로퍼티, 메서드,인스턴스 용어 정리

Kendrick 2023. 12. 22. 00:16

Swift에서 프로퍼티, 인스턴스 메서드, 타입 메서드는 다음과 같은 의미를 가집니다

  • 프로퍼티 (Properties): 프로퍼티는 클래스, 구조체, 또는 열거형과 같은 타입에 값을 저장하는 변수나 상수입니다. 이들은 인스턴스 프로퍼티와 타입 프로퍼티로 나뉩니다.
  • 인스턴스 메서드 (Instance Methods): 특정 클래스, 구조체, 또는 열거형의 인스턴스에 속하는 메서드입니다. 이 메서드들은 특정 타입의 인스턴스에 대해 호출되며, 해당 인스턴스의 데이터에 접근하거나 수정하는 기능을 수행할 수 있습니다.
  • 타입 메서드 (Type Methods): 타입 자체에 연결된 메서드입니다. static 키워드를 사용하여 선언하며, 클래스의 경우 class 키워드를 사용하여 재정의가 가능한 타입 메서드를 만들 수도 있습니다. 타입 메서드는 인스턴스가 아닌 타입 자체에 대해 호출됩니다.
  • 인스턴스 (Instance) : 인스턴스란 타입의 구체적인 실현과 같다 즉 인스턴화 시킨다는 뜻은 구체화(메모리에 할당)시킨다는 의미이입니다.

예를 들어, struct에서 static var 사용 예시는 다음과 같습니다

struct Example {
    static var commonValue: Int = 0
}

Example.commonValue = 5
print(Example.commonValue) // 출력: 5

 

예시 코드

프로퍼티 예시

struct Person {
    var name: String // 인스턴스 프로퍼티
    static var species: String = "Homo sapiens" // 타입 프로퍼티
}

var person = Person(name: "John")
print(person.name) // 인스턴스 프로퍼티 사용
print(Person.species) // 타입 프로퍼티 사용

 

인스턴스 메서드 예시

class Dog {
    var name: String

    init(name: String) {
        self.name = name
    }

    func bark() {
        print("\(name) is barking")
    }
}

let dog = Dog(name: "Buddy")
dog.bark() // 인스턴스 메서드 호출

 

타입 메서드 예시

class Math {
    static func square(number: Int) -> Int {
        return number * number
    }
}

let result = Math.square(number: 3) // 타입 메서드 호출
print(result)

타입 메서드는 인스턴스에게 의존하지 않고 호출할 수 있다.

어떤 값을 retrun받아 직접 프로퍼티에 할당하고 싶을 때 유용하게 쓰인다. 

 

인스턴스 예시

class Dog {
    var name: String
    var breed: String

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

    func bark() {
        print("\(name) barks!")
    }
}

이런 상태에서는 아직 직접적인 실채화를 시키지 않은 상태, 즉 메모리에 할당되지 않은 상태이다. 

Dog라는 class는 단지 추상적인 표현만 할 뿐 실제하지 않는 상태이다.

Dog class를 인스턴스화시키고 싶다면 다음과 같이 할 수 있다.

let myDog = Dog(name: "Buddy", breed: "Golden Retriever")

여기서 myDog는 Dog class의 인스턴스이다. Dog class에 정의된 프로퍼티와 메서드를 가지며 메모리에 실제 존제하는 객체이다.

인스턴스를 사용함으로서 하나의 정의를 만들고 그 정의에 따라 찍어 낼 수 있게 한다.

 

let myDog = Dog(name: "Buddy", breed: "Golden Retriever")
let myDogA = Dog(name: "A", breed: "Golden Retriever")
let myDogB = Dog(name: "B", breed: "Golden Retriever")
let myDogC = Dog(name: "C", breed: "Golden Retriever")
let myDogD = Dog(name: "D", breed: "Golden Retriever")

인스턴스를 사용함으로써, 같은 클래스 또는 구조체를 기반으로 다양한 객체를 생성하고 각각의 객체가 서로 다른 상태(속성 ) 가질 있습니다.