ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] 메서드의 종류
    🍏Swift 2022. 10. 13. 02:06

     

    안녕하세요 Skyler입니다 :)
    메서드의 종류에 대해서 한번 정리해보려고 합니다 :)

    그전에 함수와 메서드의 차이에 대해서 간단하게 말씀드리겠습니다!

     

    함수  vs  메서드

    저는 지금까지 함수랑 메서드가 그냥 영어와 한글의 차이인 줄 알았습니다..
    근데 아니더라고요!

    func eatFood() {
    	print("chicken")
    }

    위와 같이 일반적으로 func 키워드로 생성하는 것은 모두 함수에 해당합니다!

     

    메서드는 이러한 함수들 중 클래스, 구조체, 열거형 속에 포함되어 있는 함수를 가리킵니다!
    예를 들어 우리가 아래와 같이 클래스 내부에서 함수를 선언한다면 eatFood()는 메서드라고 표현합니다! 

    class Delicious {
        func eatFood() {
            print("chicken")
        }
    }

     

    인스턴스 메서드 (Instance Method)

    인스턴스를 생성해야만 호출이 가능한 메서드
    아래와 같이 아무런 수식어 없이 func으로 시작하는 메서드는 모두 인스턴스 메서드임!

     
    class Delicious {
        func eatFood() {
            print("chicken")
        }
    }

     

    인스턴스 메서드 호출 방법

    Delicious에 대한 인스턴스를 생성하고 .(dot)을 통해서 메서드에 접근해서 사용하면 됨!

    let person = Delicious()
    person.eatFood()

     

     

    타입 메서드 (Type Method)

    타입에 관련된 메서드로 인스턴스 생성 없이 타입 자체의 이름으로만 호출이 가능한 메서드
    아래와 같이 메서드 선언 시 func 앞에 static 또는 class가 붙으면 타입 메서드임!

    class Phone {
    
    	static func call1() {
    		print("Hi")
    	}
    
    	class func call2() {
    		print("Bye")
    	}
    
    }
     

     

    타입 메서드를 호출하는 방법

    타입 메서드들은 인스턴스와 전혀 상관이 없기 때문에 아래와 같이 타입 이름 자체에 .(dot)으로 접근해서 사용하면 됨!

    Phone.call1()
    Phone.call2()

     

    static vs class

    타입 메서드를 선언하기 위해선 func 앞에 static 혹은 class를 붙여주면 된다고 했음!

    여기서 중요한 건 static과 class의 차이인데 static과 class의 차이는 메서드 오버 라이드(override)의 여부입니다!

    *override: 재정의라고도 하며 메서드를 수정해서 사용하는 것이라고 생각하면 쉬움!

     

    static

    static은 하위 클래스에서 해당 타입 메서드를 오버라이드 하는 것을 금지합니다!

    class Delicious {
        static func eat() {
            print("chicken")
        }
    }
    
    class Person: Delicious {
        override static func eat() { //불가함
        }
    }

    그러므로 static으로 선언을 하게 되면 위와 같이 하위 클래스에서 해당 타입 메서드에 대한 오버라이드가 되지 않음!

     

    class

    class는 하위 클래스에서 해당 타입 메서드를 오버라이드 하는 것을 허용합니다!

    class Delicious {
        static func eat() {
            print("chicken")
        }
    }
    
    class Person: Delicious {
        override static func eat() { //가능함
        	print("pizza")
        }
    }

    그러므로 class로 선언을 하게 되면 위와 같이 하위 클래스에서 해당 타입 메서드에 대한 오버라이드가 가능함!

     

     

    '🍏Swift' 카테고리의 다른 글

    [Swift] Optional  (0) 2023.02.19
    [Swift] Enumeration  (0) 2023.02.09
    [Swift] Access Control  (0) 2023.02.06
    [Swift] map, filter, reduce 등 고차함수  (0) 2023.02.03
    [Swift] 프로토콜  (0) 2022.08.09
Designed by Tistory.