Dog foot print

[SWIFT] 메서드 본문

IOS/Swift

[SWIFT] 메서드

개 발자국 2021. 7. 13. 22:05

메서드

메서드는 일종의 함수로써 클래스나, 구조체, 열거형과 같은 객체 내에서 함수가 선언 될 경우 이를 메소드라고 통칭한다. 메서드는 객체 내부에서 정의되어 객체를 통해 사용이 가능하다는 점이 일반 함수와 차이점이다.

메서드의 종류는 클래스 메서드인스턴스 메서드 이렇게 두 종류가 있다. 인스턴스 메서드는 인스턴스화 된 객체를 통해서만 사용이 가능하고, 클래스 메서드는 인스턴스를 통하지 않고, 사용 할 수 있다는 점이 다르다.

인스턴스 메서드

import UIKit;

class Foo{

    func FooFunc () -> String {
        print("FooFunc실행");
        return "hello method";
    }
}

let myFoo = Foo();
let message = myFoo.FooFunc(); //Foofunc실행
print(message)//hello method

인스턴스 메서드는 일반 함수를 정의할 때와 동일합니다. 사용방법은 일반 함수와 달리 인스턴스에 종속되어 있으므로, 인스턴스.메서드명()형태로 호출 하면 됩니다.

메서드에서는 일반함수와 달리 self라는 예약어를 사용 할 수 있는데, 이 예약어는 메서드내에서 호출된 인스턴스를 가리키는 용어이다. 이는 구조체나 열거형에서도 동일하게 사용 가능합니다.

import UIKit;

class Foo{
    var a = "Foo";

    func FooFunc () -> String {
        print("FooFunc실행");
          self.a = "Boo";
        return "hello method";
    }
}

let myFoo = Foo();
print(myFoo.a) //Foo
let message = myFoo.FooFunc(); //Foofunc실행
print(myFoo.a) //Boo
print(message)//hello method

Tip : self 를 사용하지 않아도, 변수명을 통해 해당 멤버에 접근 할 수는 있지만, 함수내부에서 동일한 변수명이 존재한다면 해당 변수가 스코프에 잡히니, 인스턴스의 멤버변수에 접근하려면 self 키워드를 사용하는 것이 바람직 합니다 .

mutating

import UIKit

struct Foo{

    var x = 10, y = 20;

    mutating func fooFunc(){
        self.x = 20;
        self.y = 30;
    }
}

var myFoo = Foo();
myFoo.fooFunc()
myFoo.x
myFoo.y

구조체나 열거형에서는 메서드를 통해서, 인스턴스의 프로퍼티를 수정하기 위해서는 반드시 func 앞에 mutating을 명시해주어야 한다.

타입 메서드

메서드는 인스턴스화가 진행되어야지 사용 할 수 있지만, 클래스나 구조체 선언을 통해 실행 할 수 도 있는 메서드를 타입 메서드라고 합니다. 타입 메서드의 종류는 static 키워드를 사용하여, 하위 클래스에서 재 정의가 불가능한 것과 class 키워드를 사용하여, 하위 클래스에서 재 정의가 가능한 메서드가 존재합니다.

Note : 구조체에서는 static 메서드만 사용 가능합니다.
Note : 타입 메서드에서는 self키워드를 통해 멤버 변수에 접근 할 수 없습니다.
Note : 타입 메서드에서 self 키워드를 통해 타입 프로퍼티와 타입 메서드에만 접근 가능 합니다.

class Foo{

    static func staticFooFunc(message : String){
        print(message);
    }

    class func classFooFunc(){
        print("재정의가 가능하다 !!")
    }
}

Foo.staticFooFunc(message :"hello static!")
Foo.classFooFunc()

let myFoo = Foo();
Foo.classFooFunc

#swift

반응형

'IOS > Swift' 카테고리의 다른 글

[SWIFT] Type casting  (0) 2021.07.20
[SWIFT] 상속  (0) 2021.07.15
[SWIFT] 프로퍼티  (0) 2021.07.13
[SWIFT] 구조체와 클래스  (0) 2021.07.13
[SWIFT] CLOSURE  (0) 2021.07.09
Comments