티스토리 뷰
안녕하세요! Swallow입니다!
이번 포스팅은
⭐️ 인스턴스 메서드(Instance Methods) ⭐️
⭐️ 타입 메서드(Type Methods) ⭐️
관한 글입니다!
항상 어떠한 조언, 충고 환영입니다!
시작하기에 앞서 이 글은
앨런 Swift 문법 마스터 스쿨 강의와 야곰님의 스위프트 프로그래밍 책을
공부하고 참고하여 작성하였습니다!
그럼 시작하겠습니다!
이번 글부터
메서드에 대해서 다룰 예정입니다!
메서드(Methods)란?
클래스 / 구조체 내부에 존재하는
함수를 메서드라고 부릅니다!
오늘 배울 메서드는
⭐️ 인스턴스 메서드(Instance Methods) ⭐️
⭐️ 타입 메서드(Type Methods) ⭐️
입니다!
첫 번째
인스턴스 메서드(Instance Methods)란?
일반적으로 저희가 클래스 , 구조체 , 열거형에서
자주 사용하던 함수입니다!
인스턴스와 관련된 메서드이고
메서드 접근시, 인스턴스의 이름으로 접근을 해야 합니다!
다 알고 계시겠지만, 예시를 보여드릴게요!

저희가 여태까지 자주 사용하고,
알고 있던 형태죠?
이러한 형태의 메서드가
인스턴스 메서드(Instance Methods)입니다!
메서드에 접근을 할 때도
인스턴스의 이름으로 접근을 하면 됩니다!
person.changeName(newName: String) <--- 이렇게요!
그런데, 위의 예시는 클래스의 인스턴스 메서드입니다!
구조체의 인스턴스 메서드와
다른 점이 존재합니다!
위와 똑같은 예시로 구조체의 인스턴스 메서드도 알아볼게요!

허걱...! 😱
에러가 뜨네요...?
immutable : 변경할 수 없는, 불변의
라는 의미를 가지고 있습니다!
값 타입(구조체, 열거형)에서는
원칙적으로 인스턴스 메서드 내부에서
속성을 수정할 수 없다는 의미입니다..!!
그런데!!!!!!
값 타입에서도 인스턴스 메서드를 통해서
속성 수정이 가능한 방법이 존재합니다!!! 🥹
그것은 바로!
⭐️ mutating ⭐️

인스턴스 메서드 앞에
mutating키워드를 붙여주면,
값 타입에서도 속성 수정이 가능해집니다!
mutating키워드는
"나는 속성을 수정하고 있어~"
라는 걸 알려주는 키워드입니다!
클래스에서는 기본적으로 속성의 수정이 가능하니까,
당연하게도 클래스에서는 mutating키워드를 사용하지 못합니다!
인스턴스 메서드(Instance Methods) 정리
1. 메서드 접근 시, 인스턴스 이름을 통해서 접근합니다! 🔥
2. 값 타입에서는 원칙적으로 인스턴스 메서드 내부에서 속성 수정이 불가능합니다! 🔥
3. 값 타입에서 인스턴스 메서드로 속성 수정을 하고 싶다면
mutating키워드를 붙여주면 됩니다! 🔥
두 번째
타입 메서드(Type Methods)란?
인스턴스에 속한 멤버가 아니고,
타입 자체에 속한 멤버이기에
내/외부에서 접근을 할 때
타입 이름을 통해서 접근을 해야 합니다!
타입 메서드의 예시를 바로 보여드릴게요!

타입 속성과 정말 똑같습니다!
메서드 앞에 static키워드와 class키워드를 붙인 메서드를
타입 메서드(Type Methods)라고 합니다!
static과 class의 차이는
재정의(override)에 따라 나뉩니다!
static은 재정의 불가능
class는 재정의 가능
기억해 두시면 좋아요!
접근 방법은
당연히 타입 속성과 똑같이
타입 자체를 통해서 접근을 합니다!

Type.method() 방식으로 접근을 하여
호출을 하시면 됩니다!
그리고, 한 가지 더 말씀을 드리자면
전에 작성했던 타입 속성(Type Properties)을 보시면
타입 속성은 타입 속성끼리만 접근이 가능하고,
인스턴스 속성은 인스턴스 속성끼리만 접근이 가능하다!
라고 말씀을 드렸습니다!
그런데!
메서드에서 보자면
반은 맞고 반은 틀립니다!
예시를 보여드릴게요!
타입 메서드와 인스턴스 메서드를 하나씩 구현을 했고,
저장 속성과 타입 속성을 출력하는 예시입니다!

타입 메서드의 경우
타입 속성으로 선언된 age는 출력이 가능하지만,
인스턴스 속성인 name은 출력을 하지 못합니다!
인스턴스 메서드의 경우
인스턴스 속성인 name도 출력이 가능하고,
타입 속성으로 선언된 age도 출력이 가능합니다!
한번 생각을 해보면
name은 저장 속성이기 때문에
타입 자체에 속한 타입 메서드에서 접근이 불가능한 것입니다!
그런데 인스턴스 메서드에서는
타입 속성에 접근이 가능한 이유는
인스턴스 메서드도 타입 메서드와 같은 데이터 영역에 저장이 됩니다!
그리고, 타입 속성도 타입 자체에 속한 속성이기 때문에
결국 인스턴스 메서드와 같은 데이터 영역에 저장이 되어서
접근이 가능한 것입니다!
그리고, 타입 메서드에서 타입 속성을 사용하는 경우
위의 예시처럼 Swallow.age라고도 접근이 가능하지만,
같은 타입이기 때문에, 타입 이름 자체를 생략하고 사용이 가능합니다!
즉, Swallow.age도 가능하지만 타입 이름을 생략하고 age로도 접근이 가능합니다!
타입 메서드(Type Methods) 정리
1. 타입 자체에 속한 메서드이기 때문에 내/외부에서 접근 시 타입 이름으로 접근을 해야 합니다! 🔥
2. 타입 메서드 선언 방법은 static키워드와 class키워드를 func앞에 붙여주면 됩니다! 🔥
3. 타입 메서드에서는 타입 멤버(속성, 메서드)만 접근이 가능하고,
인스턴스 멤버(속성, 메서드)는 접근이 불가능합니다! 🔥
4. 타입 메서드에서 타입 멤버에 접근 시, 같은 타입 멤버 이기 때문에
타입 이름 자체를 생략하고 접근할 수 있습니다! 🔥
오늘 준비한 글은 여기까지 입니다!
다음 작성할 글은
⭐️ 서브스크립트(Subscript) ⭐️
관한 글입니다!
감사합니다!
피드백 언제나 환영합니다!
'Swift' 카테고리의 다른 글
| 메서드(Methods) 정복하기 - 2장 (0) | 2022.07.06 |
|---|---|
| 속성(프로퍼티) 정복하기 - 4장 (0) | 2022.07.03 |
| 속성(프로퍼티) 정복하기 - 3장 (0) | 2022.07.02 |
| 속성(프로퍼티) 정복하기 - 2장 (0) | 2022.07.01 |
| 속성(프로퍼티) 정복하기 - 1장 (0) | 2022.06.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
TAG
- 저장 타입 프로퍼티
- Instance Methods
- 옵셔널 추출
- 서브스크립트
- Optional pattern
- 옵셔널
- swift struct
- Type Methods
- 옵셔널 패턴
- 저장 타입 속성
- Swift Methods
- 프로퍼티 옵저버
- 스위프트
- optional
- enum
- 클래스 구조체 차이
- 연관값
- Swift Instance
- 열거형 case 패턴
- SWiFT
- 원시값
- optional unwrapped
- optional unwrapping
- Property Observers
- 속성 감시자
- 옵셔널 바인딩
- 열거형
- swift class
- 스위프트 메서드
- Swift enum