메소드
class, struct, enum 등에서 사용되는 함수를 메소드(Method)라고 함.
- 인스턴스 메소드
- 타입 메소드
인스턴스 메소드(Instance Method)
인스턴스를 통해서 호출되는 메소드.
class Person {
var name: String = "Default Name"
var age: Int = 15
func introduce() -> String {
return "안녕하세요. 제 이름은 \(name)이고, 나이는 \(age)살 입니다."
}
func printIndtroduce() {
print(introduce())
}
}
let person = Person() // person 상수(person 이라는 인스턴스)에 Person() 클래스를 할당.
print(person.introduce()) // person 인스턴스의 메소드를 호출 -> 인스턴스 메소드
person.printIndtroduce() // person 인스턴스의 printIntroduce 메소드를 호출
인스턴스 메소드에서 프로퍼티 변경하기
인스턴스의 타입(Reference Type, Value Type)에 따라서 프로퍼티를 변경하는 방법이 나누어짐.
Reference Type
class로 만들어진 인스턴스는 Reference Type 이므로,
인스턴스 메소드에서 프로퍼티 값을 직접 변경할 수 있음.
class Person {
var name: String = "Default Name"
var age: Int = 15
func introduce() -> String {
return "안녕하세요. 제 이름은 \(name)이고, 나이는 \(age)살 입니다."
}
func timeToNextYear() {
age += 1 // age 프로퍼티 값에 1더한 값을 할당합니다.
}
}
let person = Person()
print(person.age) // 출력 값 : 15
person.timeToNextYear() // age += 1 해서 16으로 변경
print(person.age) // 출력 값 : 16
let person2 = Person()
print(person2.age) // 출력 값 : 15 -> 클래스의 원본값은 변경되지 않는 점을 확인할 수 있음.
Value Type
struct, enum은 value type 이므로,
인스턴스 메소드에서 프로퍼티를 직접 변경할 수 없으며, 수정하려면 mutating 키워드를 사용해야 함.
// struct 메소드에서 프로퍼티 값 변경 하기
struct Person {
var name: String = "Default Name"
var age: Int = 15
func introduce() -> String {
return "안녕하세요. 제 이름은 \(name)이고, 나이는 \(age)살 입니다."
}
mutating func timeToNextYear() { // mutating 키워드를 붙여야 합니다.
age += 1 // 붙이지 않으면 컴파일 오류 발생
}
}
var person = Person()
print(person.age) // 15
person.timeToNextYear() // 16으로 변경
print(person.age) // 16
// enum 메소드에서 값 변경하기
// enum은 프로퍼티가 아닌 self(자기자신)의 현재 값을 변경 할 수 있습니다.
enum VideoPlayerState {
case off
case playing
case complete
mutating func moveNext() { // mutating 키워드를 붙여서 값을 수정할 수 있게 합니다.
switch self { // mutating 키워드가 없는데 값을 변경하면 컴파일 오류 발생!
case .off:
self = .playing
case .playing:
self = .complete
case .complete:
self = .off
}
}
}
var playerState = VideoPlayerState.off
print(playerState) // 출력 값 : off
playerState.moveNext()
print(playerState) // 출력 값 : playing
playerState.moveNext()
print(playerState) // 출력 값 : completed
타입 메소드(Type Method)
- 타입 프로퍼티와 마찬가지로 인스턴스를 만들지 않고 호출할 수 있는 함수.
- static 키워드 사용
- class, struct, enum 등에서 사용 가능.
- 함수 내부에 있는 타입 프로퍼티에만 접근할 수 있음.
- 인스턴스를 만들지 않고 사용하기 때문에 다른 프로퍼티에는 접근할 수 없음.
// struct, class 에서 타입 메소드 사용 방법
struct Person {
static var structName = "Person"
var name: String = "Default Name"
var age: Int = 15
func introduce() -> String {
return "안녕하세요. 제 이름은 \(name)이고, 나이는 \(age)살 입니다."
}
static func introduceType() -> String {
// name = "A" // 오류 발생! 저장 프로퍼티에는 접근할 수 없어요!
return "안녕하세요. 저는 \(structName) 타입입니다."
}
}
print(Person.introduceType()) // 출력 값 : 안녕하세요. 저는 Person 타입입니다.
// enum 에서 타입 메소드 사용 방법
enum Season {
static var enumName = "Season"
case spring
static func introduceType() -> String {
return "저는 \(enumName) 타입입니다."
}
}
print(Season.introduceType())'문법' 카테고리의 다른 글
| [iOS] 2025.04.04 문법(옵셔널 언래핑) (0) | 2025.04.04 |
|---|---|
| [iOS]2025.04.04 문법(옵셔널) (0) | 2025.04.04 |
| [iOS] 2025.03.18 문법(프로퍼티) (0) | 2025.03.18 |
| [iOS] 2025.03.18 문법(struct) (0) | 2025.03.18 |
| [iOS] 2025.03.18 문법(class, init) (0) | 2025.03.18 |