인스턴스 메서드

쏘스야·2023년 4월 13일
0

ios 개발자의 첫걸음

목록 보기
49/61
/*
 메서드
 1. 인스턴스 메서드
 2. 타입 메서드
 3. 서브스크립트
 4. 접근 제어 / 싱글톤 패턴
 */

// 1. 인스턴스 메서드

class Dog {
    var name: String
    var weight: Double
    
    init(name: String, weight: Double) {
        self.name = name
        self.weight = weight
    }
    
    func sit() {
        print("\(name)가 앉았습니다.")
    }
    func layDown() {
        print("\(name)가 누웠습니다.")
    }
    func play() {
        print("놀고있습니다.")
    }
    func changeName(newName name: String) {
        self.name = name
    }
    
}

let bori = Dog(name: "보리", weight: 20.0)

//bori.sit()
//bori.layDown()
//bori.play()

//bori.name = "말썽쟁이 보리"
//bori.name
//bori.sit()
//bori.layDown()
//bori.play()

let choco = Dog(name: "초코", weight: 20.5)

//choco.sit()
//choco.layDown()
//choco.play()
//
//choco.name = "말썽쟁이 초코"
//choco.name
//choco.sit()
//choco.layDown()
//choco.play()




class Dog1 {
    static var species = "Dog"
    
    var name: String
    var weight: Double
    
    init(name: String, weight: Double) {
        self.name = name
        self.weight = weight
    }
    
    func sit() {
        print("\(name)가 앉았습니다.")
    }
   
    func trainning() {
        print("월월 저는 \(Dog1.species)입니다.")
        sit()
        sit()
        self.sit()  // self 키워드는 명확하게 지칭하는 역할일 뿐
    }
    
    func changeName(newName name: String) {
        self.name = name
    }
    
}

let bori1 = Dog1(name: "보리", weight: 20.0)
bori1.trainning()

bori1.changeName(newName: "말썽쟁이보리")
bori1.sit()



/**
 구조체
 - 값 타입(구조체, 열거형) 에서 기본적으로 인스턴스 메서드 내에서 속성을 수정할 수 없음
 - 수정하려면, mutating(변형되는) 키워드를 붙이면 속성 수정이 가능해진다( 클래스와 구조체의 차이 )
 */
struct Dog2 {
    static var species = "Dog"
    
    var name: String
    var weight: Double
    
    init(name: String, weight: Double) {
        self.name = name
        self.weight = weight
    }
    
    func sit() {
        print("\(name)가 앉았습니다.")
    }
    
    func sit(a: String) {
        print("\(a) 인사")
    }
   
    // 구조체나 열거형에서 인스턴스 메서드는 속성을 바꿀 수 없지만, mutating 을 사용하면 가능.
    // 클래스와 구조체의 차이
    mutating func changeName(newName name: String) {
        self.name = name
    }
    
}


var dog777 = Dog2(name: "순둥이", weight: 10)
dog777.name = "흰순둥이"
dog777.changeName(newName: "검둥이")


/**
 오버로딩
 */

var d777 = Dog2(name: "뽀삐", weight: 10)
d777.sit()
d777.sit(a: "안녕")
profile
개발자

0개의 댓글