intro) 메소드란?

*메서드 (Methods)*는 특정 타입과 연관된 함수입니다. Swift에서는 클래스, 구조체 또는 열거형을 정의하는 여부를 선택할 수 있으며, 사용자가 만든 타입에 대한 메소드를 유연하게 정의 할 수 있습니다.

1. 인스턴스 메소드

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

1-1. 인스턴스 메소드란?

i) Instance Method in Class

class Sopt {
    var name: String = "누구누구"
    
    init(name: String) { // self는 무엇일까요?
        self.name = name
    }
    
    func sayHello() {
        print("안녕 솝린이!!")
    }
    
    func sayHelloSoptMember(name: String) -> String {
        print("안녕 \\(name)? 솝트는 처음이지?")
        return name
    }
    
    func changeName() {
        name = "희재"
    }
}

let hidi: Sopt = .init(name: "희디")
hidi.sayHello()
hidi.sayHelloSoptMember(name: hidi.name)
hidi.changeName()

ii) Instance Method in Struct

struct Sopt {
    var name: String = "누구누구"
    
    init(name: String) {
        self.name = name
    }
    
    func sayHello() {
        print("안녕 솝린이!!")
    }
    
    func sayHelloSoptMember(name: String) -> String {
        print("안녕 \\(name)? 솝트는 처음이지?")
        return name
    }
    
    func changeName() { // error -> 왜 나는지 아래서 확인해보자구용!
        name = "희재"
    }
}

let hidi: Sopt = .init(name: "희디")
hidi.sayHello()
hidi.sayHelloSoptMember(name: hidi.name)
hidi.changeName()

iii) Instance Method in Enum

// enum은 저장 프로퍼티가 없어서 연산 프로퍼티에 접근하는 방향으로 정리했당!
enum Sopt {
    case plan
    case design
    case web
    case ios
    case android
    case server
    
    var part: String {
        switch self {
        case .plan:
            return "기린이"
        case .design:
            return "디린이"
        case .web:
            return "웹린이"
        case .ios:
            return "아요미"
        case .android:
            return "안요미"
        case .server:
            return "섭요미"
        }
    }
    
    func sayHello() {
        print("안녕 \\(part)야 솝트는 첨이지?")
    }
}

let hidi = Sopt.ios
hidi.sayHello()

1-2. self 키워드

타입의 모든 인스턴스에서는 "self"라는 암시적 프로퍼티를 가진다. 이는 인스턴스 자신과 정확하게 동일합니다.

self프로퍼티를 사용하여 자체 인스턴스 메소드 내에서 현재 인스턴스를 참조할 수 있습니다.