본문 바로가기

Swift_Grammar

[Swift_Grammar] Method

 

이번 포스팅에서는 메서드에 대해서 알아보겠다.

 

참고로 함수가 위치하고 있는 곳, 또는

사용되는 범위 등에 따라서

함수인지 메서드인지

호칭만 달리 정해진다.

 

모듈 전체에서 사용 - 함수

구조체, 클래스, 열거형등 특정 타입에 연관되어 사용 - 메서드

 

따라서 기본적인 함수의 형태를 다루었던
저번 함수 포스팅의 연장선이라고 할수 있겠다.

 

 

[Swift_Grammar] 함수

오늘은 함수에 대해서 간단히 알아보겠다. 함수라는건 기능을 만드는 것. 그리고 함수 하나에는 하나의 기능을 만드는 코드가 들어가야 가장 베스트이다. 기본적으로 func라는 키워드와 함수의

devddong.tistory.com

 

Instance Method

 

먼저 인스턴스 메서드를 보자면 
특정 타입의 인스턴스(객체)에 속한 함수라고 할 수 있다.
인스턴스 내부의 프로퍼티 값을 변경한다거나 
특정 연산 결과를 반환하는등 
인스턴스와 관련된 기능을 실행한다.

 

하단 코드를 보겠다.

add라는 인스턴스 메서드를 호출했을때

someValue라는 인스턴스 프로퍼티의 값을 수정하고있다.

이와 같이 자신의 프로퍼티 값을 수정할 때

class의 인스턴스 메서드는 딱히 신경써줘야할 부분이 없다.

class MyClass {

    var someValue: Int = 1
    
    func add() {
        someValue += 1
    }

}

 

하지만 참조 타입의 class가 아닌

값타입의 성격을 띄고 있는

구조체나 열거형에서는

메서드를 사용하여 자신의 프로퍼티의 값을 변경할때

메서드 앞에 mutating 키워드를 붙여서

해당 메서드가 인스턴스 내부의 값을 

변경한다는것을 명시해주어야한다.

struct MyStruct {

    var someValue: Int = 1
    
    mutating func add() {
        someValue += 1
    }

}

 

Type Method

 

두번째로 볼 메서드는 타입 메서드이다.

타입 자체에서 호출이 가능하며

메서드 앞에 static 키워드를 붙혀서 사용하고

class에서는 특별히 class 키워드를 붙혀 사용할 수도 있다.

 

class에서

static 키워드로 정의를 한다면 

상속 후 메서드 재정의가 불가능하고

class 키워드로 정의를 한다면

상속 후 메서드 정의가 가능하다.

class SomeClass {
    
    static func someStaticFunc() { // 상속후에 override 못함
        ...
    }
    
    class func soneClassFunc() { // 상속후에 override 가능
        ...
    }
    
}

struct SomeStruct {
    
    static func someStaticFunc() {
        ...
    }
    
}

 

 

메서드 내에서 self 사용

모든 인스턴스는

인스턴스 자기 자신을 가리키는 프로퍼티인

self 프로퍼티를 

암시적으로 가지고 있다.

 

일반적으로 인스턴스를 더 명확히 지칭하고 싶을때 사용한다.

 

하단 코드에서

someFunc 메소드 내부를 보자면

메서드의 매게변수 값을

someValue에 할당하는데에 있어

문제 되는게 없다.

class MyClass {

    var someValue: Int = 1
    
    func someFunc(value: Int) {
        someValue = value
    }

}

 

하지만 아래와 같이 메서드의 매개변수명과

프로퍼티명이 같다고 했을때 

컴파일러는 someValue를 

클래스의 프로퍼티가 아닌

메서드의 매게변수로 먼저 인식하게 

되버리는 현상이 생긴다.

 

메소드 내에서 컴파일러가 인식하는 순서를 잠깐 보자면 아래와 같다.

 

1. 메서드 내부에 선언된 지역변수를 찾다가

2. 찾는데 실패하면 메서드의 매개변수,

3. 그다음은 인스턴스의 프로퍼티를 찾으면서

컴파일러가 어느 위치의 someValue인지 유추를 하게한다.

 

인스턴스 자기 자신을 가리키는 프로퍼티인 self를 사용하여

컴파일러가 원치 않는 프로퍼티를 유추하지 못하게 주의해줘야한다.

class MyClass {

    var someValue: Int = 1
    
    func someFunc(someValue: Int) {
        self.someValue = someValue
    }

}

 

 

 

 

'Swift_Grammar' 카테고리의 다른 글

[Swift_Library] ProgressHUD  (0) 2021.01.14
[Swift_Grammar] Initialization  (0) 2021.01.12
[Swift_Grammar] Property  (0) 2020.12.31
[Swift_Grammar] 구조체와 클래스  (0) 2020.12.30
[Swift_Grammar] Optional  (0) 2020.12.28