클래스

2021. 2. 10. 12:40Swift/기초 문법

⭐ 클래스 ? 

  • 클래스는 참조(reference) 타입입니다.

  • 타입이름은 대문자 카멜케이스를 사용하여 정의합니다.

  • Swift의 클래스는 다중 상속이 되지 않습니다.

  • 클래스와 구조체는 매우 비슷하지만 차이점이 있다. → 구조체 : 값 타입 / 클래스 : 참조 타입

 

1. 클래스 문법

  • 정의 : "class" 키워드 사용

class 이름 {
		/* 구현부 */
}

 

  • 프로퍼티 및 메서드

class Sample {
	var mutuableProperty: Int = 100 // 가변 프로퍼티
	let immutableProperty: Int = 100 // 불변 프로퍼티
	// ----이상 인스턴스 프로퍼티----

	static var typeProperty: Int = 100 // 타입안에서만 사용 가능한 타입 프로퍼티

	// 인스턴스 메서드
	func instanceMethod() {
		print("instance method")
	}
	
	// 타입 메서드
	// 상속시 재정의 불가 타입 메서드 - static
	static func typeMethod() {
		print("type method - static")
	}

	// 상속시 재정의 가능 타입 메서드 - class
	class func classMethod() {
		print("type method - class")
	}

}

 

  • 클래스 사용

// 인스턴스 생성 - 참조정보 수정 가능
var mutableReference: Sample = Sample()

mutableReference.mutableProperty = 200

// 불변 프로퍼티는 인스턴스 생성 후 수정할 수 없습니다
// 컴파일 오류 발생
//mutableReference.immutableProperty = 200


// 인스턴스 생성 - 참조정보 수정 불가
let immutableReference: Sample = Sample()

// 클래스의 인스턴스는 참조 타입이므로 let으로 선언되었더라도 인스턴스 프로퍼티의 값 변경이 가능합니다
immutableReference.mutableProperty = 200

// 다만 참조정보를 변경할 수는 없습니다
// 컴파일 오류 발생
//immutableReference = mutableReference

// 참조 타입이라도 불변 인스턴스는 
// 인스턴스 생성 후에 수정할 수 없습니다
// 컴파일 오류 발생
//immutableReference.immutableProperty = 200


// 타입 프로퍼티 및 메서드
Sample.typeProperty = 300
Sample.typeMethod() // type method

// 인스턴스에서는 타입 프로퍼티나 타입 메서드를
// 사용할 수 없습니다
// 컴파일 오류 발생
//mutableReference.typeProperty = 400
//mutableReference.typeMethod()

 

2. 학생 클래스 만들어 보기

class Student {
	var name: String = "unknown" // 가변 프로퍼티
	var 'class': String = "Swift" // class가 키워드라서 변수로 사용하기 위해 ''로 묶어줌
	
	class func selfIntroduce() {
			print("학생 타입입니다")
	}
	
	// 인스턴스 메서드
	// self는 인스턴스 자신을 지칭하며, 몇몇 경우를 제외하고 사용은 선택사항입니다.
	func selfIntroduce() {
			print("저는 \(self.class)반 \(name)입니다")
	}
}

// 타입 메서드 사용
Student.selfIntroduce() // 학생타입입니다

// 인스턴스 생성
var yagom: Student = Student()
yagom.name = "yagom"
yagom.class = "스위프트"
yagom.selfIntroduce() // 저는 스위프트반 yagom입니다

// 인스턴스 생성
let jina: Student = Student()
jina.name = "jina" // 구조체와 다르게 error 안남
jina.selfIntroduce() // 저는 Swift반 jina입니다

 

이 글은 Boostcourse에서 배운 내용을 정리하여 작성하였습니다.

'Swift > 기초 문법' 카테고리의 다른 글

클래스 vs 구조체/열거형(상속타입 vs 값 타입)  (0) 2021.02.10
열거형  (0) 2021.02.10
구조체  (0) 2021.02.10
Quiz 1 - 정리  (0) 2021.02.09
옵셔널 추출  (0) 2021.02.09