Hi yoahn 개발블로그

[Swift] #10 Method (인스턴스 메소드, 타입 메소드) 본문

프로그래밍 언어/swift

[Swift] #10 Method (인스턴스 메소드, 타입 메소드)

hi._.0seon 2021. 2. 1. 21:14
반응형

1. Method

1 ) 인스턴스 메소드

- 특정 클래스, 구조체, 열거형의 인스턴스에 속하는 함수

- 인스턴스 프로퍼티의 접근 및 수정 방법을 제공 or 인스턴스 목적과 관련된 기능 제공

- 인스턴스 메소드는 자신이 속한 타입의 특정 인스턴스에서만 호출 가능

★ 인스턴스가 없으면 호출할 수 없다.

let counter = Counter()// count = 0 (기본값)

counter.increment()//count = 1

counter.increment(by: 5)//count = 6

counter.reset()//count = 0

2 ) 인스턴스 메소드 내부에서 값  타입 변수 (구조체, 열거형) 수정

★ 기본적으로 값 타입의 프로퍼티들은 해당 인스턴스 메소드 내에서 수정 불가

- 수정이 필요한 경우 해당 메소드에서 수정이 가능하도록 변경 가능

 -> 메소드에서 프로퍼티가 변경되면 변경된 내용이 구조체에 반영됨

struct Point {

    var x = 0.0, y = 0.0

    mutating func moveBy(x deltaX: Double, y deltaY: Double) {

        x += deltaX

        y += deltaY
        
        // or self = Point(x: x + deltaX, y: y + deltaY)
    }

}

var somePoint = Point(x: 1.0, y: 1.0)

somePoint.moveBy(x: 2.0, y: 3.0)

열거형을 변경하는 방법은 암시적 self 파라미터로 동일한 열거형의 다른 케이스로 설정 가능

enum TriStateSwitch {

    case off, low, high

    mutating func next() {

        switch self {

        case .off:

            self = .low

        case .low:

            self = .high

        case .high:

            self = .off

        }

    }

}

var ovenLight = TriStateSwitch.low

ovenLight.next() // ovenLight == .high

ovenLight.next() // ovenLight == .off

 

2. 타입 메소드

타입 자체에서 호출되는 메소드

static func typeMethod(){
	
}

 

  • Swift 에서는 모든 클래스, 구조체, 열거형에 대해 타입 메소드 정의 가능
  • 타입 메소드는 명시적으로 지원하는 타입으로 범위가 지정됨
  • 타입 프로퍼티처럼 타입.타입메소드 형식으로 호출
class SomeClass {

    static func otherTypeMethod(){

        //code
    }

    class func someTypeMethod() {

        // code
    }
}

SomeClass.someTypeMethod()

SomeClass.otherTypeMethod()

class Child:SomeClass{
    override static func someTypeMethod(){
        // code
    }
}

타입 메소드의 본문 내에서 암시적인 self 프로퍼티는 해당 타입의 인스턴스가 아니라 타입 자체를 참조

 

1. 보다 일반적으로, 타입 메소드의 본문 내에서 사용되는 규정되지않는 메소드 및 프로퍼티 이름은 다른 타입-수준(type-level)메소드 및 프로퍼티를 참조합니다.

2. 타입 메소드는 타입 이름앞에 접두어를 붙일 필요 없이 다른 메소드의 이름으로 다른 타입 메소드를 호출 할 수 있습니다.

3. 비슷하게, 구조체와 열거형의 타입메소드는 타입 이름 접두사 없이 프로퍼티 이름을 사용하여 타입 프로퍼티에 접근할 수 있습니다.

1 > 이 부분은 이해가 안된다...

 

2 > 이것도 이해가 안된다

도대체 다른 메소드의 이름으로 다른 타입 메소드 호출한다는게 가능한 것인가...

써본적도 본적도 없는것 같아서 물음표 가득???????

 

-> 아마 그냥 다른 타입메소드를 타입이름으로 호출한다는게 아닌가...

 

3 > 열거형은 타입이름 접두사 없이

enum Day { case mon }

var day = .mon

이런식으로 사용 가능한데 같은 방식으로 쓰는건가

 

 

 

 

 

mutating

zeddios.tistory.com/258

 

Swift ) Method

프로토콜...글 쓰다가..  급하게 Method(메소드) 글을 쓰게 됐네요 :)..... 중간에 mutating내용이 나오는데, 그 내용이 Method챕터에 잘 설명이 되어있거든요 :) 역시나 의 내용을 알아볼거에요 :) 시작할

zeddios.tistory.com

 

minsone.github.io/mac/ios/swift-properties-summary

 

[Swift]Properties 정리

속성(Properties) 속성은 특정 클래스, 구조체나 열거형을 값과 연결함. 저정 속성은 인스턴스의 부분으로서 상수와 변수를 저장하며, 어디서나 계산 속성은 값을 저장하는 것 보다 결정함. 계산속

minsone.github.io

 

반응형
Comments