본문 바로가기

Dev/iOS & SWIFT

[Swift] 클래스 (Class) | 클래스와 구조체의 차이 | 클래스의 메서드 정의 | static 과 class 메서드의 차이

728x90

본 포스트를 읽기 전에 구조체 포스트를 먼저 읽으시면 클래스에 대해서 더욱 이해하기 쉬울 것임

https://thinking-developer.tistory.com/96#recentEntries

 

[Swift] 구조체 (Structure) | 타입 프로퍼티 (Type Property) | 타입 메서드 (Type Method)

구조체 (Structure) 데이터 타입을 정의함 👉 대문자 CamelCase를 사용 프로퍼티와 메서드로 구성 프로퍼티: 구조체 내에 정의되어 있는 변수 메서드: 구조체 내에 정의되어 있는 함수 다른 언어의 클

thinking-developer.tistory.com

 

클래스란?

  • 클래스는 참조 타입의 사용자 정의 타입임
  • 타입 이름은 대문자 카멜케이스를 사용하여 정의
  • 다른 언어들과 달리 Swift의 클래스는 다중 상속이 불가능함

 

클래스의 메서드 정의

  • 클래스의 인스턴스 메서드 정의 방법은 일반적인 구조체 인스턴스 메서드와 동일함
  • 단, 타입 메서드는 두 가지 종류가 있음 - 상속 후 재정의 여부에 따라 다름
  • 재정의가 불가능한 타입 - static func 함수명 { . . . }
  • 재정의가 가능한 타입 - class func 함수명 { . . . }

 

클래스와 구조체의 차이

  • 구조체는 값 타입의 사용자 정의 타입
  • 클래스는 참조 타입의 사용자 정의 타입
  • 클래스는 구조체와 다르게 var 혹은 let으로 생성한 인스턴스 모두, 내부의 프로퍼티 값 변경 가능
  • 하지만 처음부터 불변 프로퍼티로 정의된 것은 추후에 변경할 수 없는 것은 동일함

 

클래스의 정의 예시

class Sample {
	// 가변 프로퍼티
    var mutableProperty: Int = 100
    
    // 불변 프로퍼티
    let immutableProperty: Int = 200
    
    // 타입 프로퍼티
    statci var typeProperty: Int = 300
    
    // 인스턴스 메서드
    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 = 500

// 불변 인스턴스 생성
let mutableReference: Sample = Sample()

// 불변 인스턴스의 가변 프로퍼티 조작 (불변 프로퍼티는 불가능)
immutableReference.mutableProperty = 800

// 타입 프로퍼티 및 메서드
Sample.typeProperty = 1000
Sample.typeMehtod()

 

본 내용은 부스트코스의 'iOS 프로그래밍을 위한 스위프트 기초' 강의를 토대로 작성되었습니다

728x90