[Swift] Method and Subscript 사용법 & 예제 [1/2]

728x90

Method and Subscript 사용법 & 예제 [1/2]


인스턴스(Instance) 메서드란?

인스턴스 메서드는 특정 타입의 인스턴스에 속한 함수를 뜻 합니다.
문법은 함수와 동일하고 차이점은 인스턴스를 통해 호출 한다는 것과 구현하는 위치 입니다.

함수는 특정형식에 연관 되지 않은 동작, 메소드는 특정 형식과 연관된 동작

func name(parameters) -> ReturnType {
    Code
}
instance.method(parameters)

사용 예제

클래스로 구현한 인스턴스

class Sample {
    var data = 0
    static var sharedData = 123

    func doSomething() {
        print(data)
        Sample.sharedData //Static 값에 접근하기 위해서는 형식이름으로 접근 해야 한다.(그냥 이름만 쓰면 X)
    }

    func call() {
        doSomething() //self 생략하고 이름만으로 인스턴스 내 메소드 접근 가능
    }
}

let a = Sample()
//인스턴스 이름으로 접근
//메소드는 인스턴스 이름으로 접근해야 함
a.data
a.doSomething()
a.call()

클래스 인스턴스 값을 바꾸는 인스턴스 메소드

class Size {
    var width = 0.0
    var height = 0.0

    func enlarge() {
        width += 1.0
        height += 1.0
    }
}

let s = Size()
s.enlarge()

구조체 인스턴스 값을 바꾸는 인스턴스 메소드

struct Size {
//Class에서는 인스턴스 메소드가 인스턴스 속성을 바꿔도 상관 없었는데
//Struct에서는 바꾸려면 mutating Keyword 붙여야함
//인스턴스 호출도 var로 바꾸기(값 형식)

    var width = 0.0
    var height = 0.0

    mutating func enlarge() {
        width += 1.0
        height += 1.0
    }
}

var s = Size()
s.enlarge()

타입(Type) 메서드란?

속성이 인스턴스 속성과 타입 속성으로 나뉘는 것처럼,
메소드도 인스턴스 메소드 와 타입 메소드로 나뉩니다.
타입 메소드는 형식에 관련된 메소드로,
인스턴스와 마찬가지로 [ 클래스 구조체 열거형 ] 모두 구현 가능

static func name(parameters) -> ReturnType {
    statements
}

class func name(parameters) -> ReturnType {
    statements
}

Type.method(parameters)

사용 예제

class Circle {
    static let pi = 3.14
    var radious = 0.0

    func getArea() -> Double {
        return radious * radious * Circle.pi //타입 속성은 타입으로 접근(static)
    }

    //Type method
//    static func printPi() {
//        print(pi) //Type 속성에 바로 접근가능
//    }
    class func printPi() {
        print(pi) //Type 속성에 바로 접근가능
    }
}

Circle.printPi()

class StrokeCircle: Circle {
    //static keyword 서브 클래스에서 오버라이딩 불가능
    //class func은 오버라이딩 가능 ( 인스턴스 메소드도 동일한 규칙 적용 가능 )
    override static func printPi() {
        print(pi)
    }
}

출처 : 어서와! Swift는 처음이지?(Programmers)
728x90

댓글

Designed by JB FACTORY