티스토리 뷰

728x90

가장많이 보았고 
가장많이 헷갈렸던 인스턴스, 메서드 에 대해 정리 해 보려 합니다
 
그동안 어림짐작해서 이건 메서드겠구나 했는데 
정확히 알고 넘어가야겠다!!! 
 

가즈아!

 
 


 

메서드 (Methods)

특정 타입의 클래스, 구조체, 열거형과 관련된 함수 를 메서드라 합니다.

함수 , 이것은 함수였다.

메소드에는 인스턴스 메서드, 타입 메서드 가 있어요. 
 

인스턴스 메서드 ( Instance Methods )

인스턴스 메서드는 특정 클래스(class), 구조체(struct), 열거형(enum)의 인스턴스에 속한 메서드 입니다.
아래 코드 처럼요!

class Counter {   // <-- 특정 class
    var count = 0
    func increment() {  // <-- 인스턴스 메소드!!
        count += 1
    }
    func increment(_ amount: Int) {   // <-- 인스턴스 메소드!!
        count += amount
    }
    func reset() {   // <-- 인스턴스 메소드!!
        count = 0
    }
}

 
인스턴스 메서드는 그 인스턴스가 속한 특정 타입의 인스턴스에서만 실행이 가능해요. 
 
위의 코드를 예제로 써볼게요
 


이런기능을 해볼거에요.
 

  •  Counter 클래스를 선언하고 인스턴스 메서드 ( inscrement(), increment(_ amount: Int), reset() )를 정의해 count 프로퍼티를 변경하는 기능

 

class Counter {
    var count = 0
    func increment() {
        count += 1
    }
    func increment(_ amount: Int) {
        count += amount
    }
    func reset() {
        count = 0
    }
}

let counter = Counter()  // Counter 클래스 호출, count 값은 0
counter.increment()  // count = 1
counter.increment(7)  // count = 8
counter.reset() // count = 0

먼저 let counter = Counter()로 호출을 꼭꼭 해줘야합니다. 아니면 얘가 접근을 못해요. 
다음 상수(let) 선언을 했던 counter에 .(점)으로 Counter안에 있는 메소드에 접근을 합니다. 
counter.increment()  
counter.reset() 처럼요. 
 
인스턴스 메서드는 인스턴스를 만들고 내부함수를 호출해야하지만, 
안만들고 호출하는 방법도 있어요!
 

고것은 바로 타입 메서드 

타입 메서드 ( Type Methods )

인스턴스 메서드와는 다르게 타입메서드는 특정 타입 자체에서 호출해 사용합니다. 
타입 메서드의 선언은 메서드 키워드 func 앞에 static 혹은 class 키워드를 추가하면 됩니다.
 

// type method

class typeMethods {
    
    static func staticMethod() {   // <-- static
        print("==== staticMethod ====")
    }
    
    class func classMethod() {     // <-- class
        print("==== classMethod ====")
    }
    
}

typeMethods.staticMethod() // <-- 바로 호출
typeMethods.classMethod()  // <-- 바로 호출

이렇게요 !! 
 
인스턴스 메서드와 차이점을 발견하셨나요 ?

let counter = Counter()

인스턴스는 이런식으로 호출을 꼭 해야했습니다. 
타입 메서드 같은경우는 타입 이름에서 메서드를 호출해요. 
 
static 혹은 class 이둘의 차이도 궁금하시겠죠!
이둘의 차이는 override를 할수있는지 없는지의 차이로 보시면 됩니다!!

class : override (O)
static : override (X)

"class" 키워드의 경우는 하위 클래스가 슈퍼클래스의 해당 메소드 구현을 재정의 할수 있도록 허용할 수 있습니다. 
 
override가 뭐냐구요 ? 
여기에 정리를 해놓았습니다. 
같이 공부하러 가보시죠!!


메소드만 정리하는데 꽤 내용이 길어지네요.
타입 메소드는 개념만 적어놔서 제가 좀더 공부한 후에 예제랑 같이 공부할수있게 블로깅 해놓겠습니다.
 
프로퍼티 정리는 따로 해야겠네요 !! 

 
 
 

이해하는데 도움이 됐어요
https://jusung.gitbook.io/the-swift-language-guide/language-guide/11-methods
https://zeddios.tistory.com/258

728x90

'iOS' 카테고리의 다른 글

[iOS] DatePicker, DateFormatter  (0) 2021.11.25
[Swift] 프로퍼티 (Properties)  (0) 2021.11.24
[iOS] Frame, Bounds 차이  (0) 2021.11.14
WebSocket 용어  (0) 2021.11.12
[Swift] Override  (0) 2021.11.11