[Swift 야곰] 2단원. 클래스

Jamong·2023년 1월 11일
0

Day7 - 2023.01.11

클래스

스위프트에서 클래스는 참조(reference)타입이고 대문자 카멜케이스를 사용한다.

클래스는 다중 상속이 되지 않는다.

클래스 문법

클래스는 "class" 키워드를 사용한다.

class.swift

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

예로 클래스 구현을 하자면

  • 프로퍼티 : 타입안에 있는 인스턴스 변수
  • 메서드 : 타입안에 있는 함수
sample.swift

// MARK: 클래스 생성

calss Sample {

	// 가변 프로퍼티
    var mutableProperty: 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")
    }
}

// MARK: 클래스 사용

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

mutableReference.mutableProperty = 200			// 200
mutableReference.immutableProperty = 200		// 불변 프로퍼티 값 변경으로 인한 오류 발생

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

// 구조체와 다르게 클래스에서는 불변 인스턴스로 생성하더라도 참조 타입이므로 가변 인스턴스 프로퍼티 값 변경 가능
immutableReference.mutalbeProperty = 200		// 200
immutableReference.immutableProperty = 200		// 불변 프로퍼티 값 변경으로 인한 오류 발생


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

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

학생 클래스 만들기

student.swift

// MARK: 클래스 생성

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

// MARK: 클래스 생성

// 가변 인스턴스 생성
var jamong: Student = Student()
jamong.name = "jamong"
jamong.class = "스위프트"
jamong.selfIntroudce()		// 출력 : 저는 스위프트반 jamong입니다.

// 불변 인스턴스 생성
let yagom: Student = Student()
yagom.name = "yagom"
yagom.selfIntroduce()		// 출력 : 저는 Swift반 yagom입니다.
    
profile
새해 목표 : 1일 1 깃, 블로그, 프로그래머스 2문제

0개의 댓글