Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 문자열 보간법
- xcode
- userDefaults
- 독학
- Background
- 프로퍼티 관찰자
- 패캠챌린지
- TableView
- 함수
- Threading
- 기본문법
- swift
- 패스트캠퍼스
- SeSAC
- ios
- enum
- RawValue
- 30개프로젝트로배우는iOS앱개발withSwift초격자패키지Online
- Realm
- 직장인인강
- 직장인자기계발
- switch
- cancelAsyncWrite
- 열거형
- 옵셔널 체이닝
- Git
- 인스펙터
- Optional Chaining
- 패스트캠퍼스후기
- beginAsyncWrite
Archives
- Today
- Total
아삭아삭 iOS 개발
[Swift 독학] 패스트캠퍼스 챌린지 18일차_클래스 본문
swift에는 클래스와 구조체 타입이 공존하고 있음
■ 클래스
- 전통적인 OPP관점에서의 클래스
- 단일 상속
- 참조 타입(reference type)
- Apple framework 대부분의 큰 뼈대는 모두 클래스로 구성되어 있음
- 타입을 정의하는 것이기 때문에 타입이름은 파스칼 표기법을 사용하여 정의(즉, 대문자로 시작)
바디 내부의 프로퍼티와 메서드는 소문자를 사용하여 정의 - 타입내에 들어가 있는 변수는 프로퍼티, 함수는 메서드라고 이해할 수 있음
- 구조체 바디내 포함 가능한 선언 종류
→ 가변 프로퍼티, 불변 프로퍼티, 타입 프로퍼티, 인스턴스 메서드, 타입 메서드, 초기화 구문, 초기화 해제 구문, 서브 스크립트, 타입 별칭, 다른 클래스 구조체, 행위자, 열거형 선언 등
(단, 프로토콜 선언은 포함 불가)
class 클래스 이름 {
프로퍼티와 메서드
}
■ 클래스 특징
- 클래스 인스턴스의 프로퍼티는 점(.)구문을 사용하여 접근 가능
- 변수나 상수에 할당될 때, 함수 호출에 의해 인수로 전달될 때 등의 경우 클래스의 인스턴스는 메모리 위치가 전달(=참조)됨
- 클래스 타입은 상위클래스(superclass)를 통해 하나의 부모 클래스만 상속 가능
- 클래스 타입은 프로토콜을 여러개 채택 가능
- 인스턴스를 생성하여야 클래스 사용 가능
: 인스턴스 생성 = 클래스와 구조체를 사용하기 위해 메모리에 생성함을 뜻함 - 인스턴스를 생성하고 초기화하고자 할 때 기본적인 생성자를 사용
(단, 생성자를 별도로 정의하지 않아도 아래 초기화 구분을 사용하면 생성자가 기본적으로 생성)
→ 즉, 생성자를 통해 값 초기화 가능 - 타엡 메서드에 2종류 존재
1) 상속 후, 재정의 불가 타입 메서드 - static func
2) 상속 후, 재정의 가능 타입 메서드 - class func - let 과 var를 사용한 인스턴스 모두 점(.)구문을 통해 내부 가변 프로퍼티의 값 변경 가능
(단, 불변 프로퍼티는 여전히 변경 불가)
■ Cat 클래스 만들기
class Cat {
var name: String = "Bamboo Lounge" // 가변 프로퍼티
let age: Int = 3 // 불변 프로퍼티
static var jumpHeight: Int = 150 // 타입 프로퍼티
func introduce() {
print("name \(name) age \(age) jumpHeightc \(Cat.jumpHeight)")
} // 인스턴스 메서드
static func typeMethod() {
print("재정의가 불가한 타입 메서드입니다.")
} // 타입 메서드 - 재정의 불가
class func classMethod() {
print("재정의가 가능한 타입 메서드입니다.")
} // 타입 메서드 - 재정의 가능
init() {
}
}
var mutableReference: Cat = Cat() // 인스턴스 생성, 참조정보를 수정할 수 있음
mutableReference.name = "Amsterdam"
mutableReference.name // "Amsterdam"
// mutableReference.age = 100 단, 불변 프로퍼티는 인스턴스 생성 후 수정 불가
mutableReference.introduce() // "name Amsterdam age 3 jumpHeightc 150\n"
let immutableReference: Cat = Cat() // 인스턴스 생성, 참조정보를 수정할 수 없음
immutableReference.name = "Naple"
immutableReference.name // "Naple" 가변 프로퍼티 값변경은 가능
// immutableReference.age = 500 불변 프로퍼티는 인스턴스 생성 후 수정 불가
immutableReference.introduce() // "name Naple age 3 jumpHeightc 150\n"
Cat.jumpHeight = 9999 // 타입프로퍼티 값변경 가능
Cat.jumpHeight
Cat.typeMethod()
// mutableReference.jumpHeight = 888 인스턴스에서 타입 프로퍼티 사용 불가
// mutableReference.typeMethod() 인스턴스에서 타입 메서드 사용 불가
본 게시물은 개인 공부 기록용이므로 내용에 오류가 있을 수 있습니다.
■ fast campus강의 외 참조자료
[1] https://blog.yagom.net/552/
[2] https://bbiguduk.gitbook.io/swift/language-reference/declarations#class-declaration
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'Swift' 카테고리의 다른 글
[Swift 독학] 패스트캠퍼스 챌린지 20일차_구조체와 클래스 비교 (0) | 2022.02.12 |
---|---|
[Swift 독학] 패스트캠퍼스 챌린지 19일차_초기화 (0) | 2022.02.11 |
[Swift 독학] 패스트캠퍼스 챌린지 17일차_구조체 (0) | 2022.02.09 |
[Swift 독학] 패스트캠퍼스 챌린지 16일차_옵셔널 추출 (0) | 2022.02.08 |
[Swift 독학] 패스트캠퍼스 챌린지 15일차_옵셔널 (0) | 2022.02.07 |