/*
메서드
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: "안녕")