스위프트 Swift 기초 공부 #6 struct, class 구조체 클래스

사공 오·2022년 5월 26일
0

Swift 기초 공부

목록 보기
6/6
post-thumbnail

Struct 구조체

  • 구조체는 값(value) 타입이다.
  • 타입 이름은 대문자 카멜케이스를 사용하여 정의한다.
  • 스위프트 대부분 타입은 구조체로 이루어져 있다.

구조체 정의

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

구조체 프로퍼티 및 메서드

struct Sample {
    // 가변 프로퍼티(값 변경 가능)
    var mutableProperty: Int = 100
    
    // 불변 프로퍼티(값 변경 불가능)
    let immutableProperty: Int = 100
    
    // 타입 프로퍼티(static 키워드 사용 : (sample이라는) 타입 자체가 사용하는 프로퍼티)
    static var typeProperty: Int = 100
    
    
    // 인스턴스 메서드(인스턴스가 사용하는 메서드)
    func instanceMethod() {
        print("instance method")
    }
    
    // 타입 메서드(static 키워드 사용 : 타입 자체가 사용하는 메서드)
    static func typeMethod() {
        print("type method")
    }
}

프로퍼티의 종류
가변 프로퍼티 - var / 값 변경 가능
불변 프로퍼티 - let / 값 변경 불가능
타입 프로퍼티 - static 키워드 사용 / 타입 자체가 사용하는 프로퍼티

메서드의 종류
인스턴스 메서드 - 그냥 func / 인스턴스가 사용하는 메서드
타입 메서드 - static func / 타입 자체가 사용하는 메서드

구조체 사용

// 가변 인스턴스 생성
var mutable: Sample = Sample()

mutable.mutableProperty = 200

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

가변 인스턴스

  • 가변 프로퍼티 변경가능
  • 불변 프로퍼티는 인스턴스 생성 후 수정 불가
// 불변 인스턴스
let immutable: Sample = Sample()

// 불변 인스턴스는 아무리 가변 프로퍼티라도 인스턴스 생성 후에 수정할 수 없습니다 ! !
//immutable.mutableProperty = 200 // 컴파일 오류 발생
//immutable.immutableProperty = 200

불변 인스턴스

  • 불변 프로퍼티 포함 가변 프로퍼티라도 인스턴스 생성 후 수정 불가 ! !
// static 붙였던 타입 자체의 프로퍼티 및 메서드로는 사용 가능 ! !
Sample.typeProperty = 300
Sample.typeMethod() // type method

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

구조체와 인스턴스

  • static 붙였던 타입 자체의 프로퍼티 및 메서드는 해당 구조체 자체에서 사용 가능
  • 인스턴스에서는 타입 프로퍼티나 타입 메서드(static 사용한 것들 )를 사용할 수 없다

예제 - 학생 구조체

struct Student {
    // 가변 프로퍼티
    var name: String = "unknown"

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

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

// 불변 인스턴스 생성
let jina: Student = Student()

// 불변 인스턴스이므로 프로퍼티 값 변경 불가
// 컴파일 오류 발생
//jina.name = "jina"
jina.selfIntroduce() // 저는 Swift반 unknown입니다



Class 클래스

  • 클래스는 참조(reference) 타입이다. (struct는 값타입인 반면에
  • 타입이름은 대문자 카멜케이스를 사용하여 정의한다.
  • Swift의 클래스는 다중 상속이 되지 않는다.

클래스 정의

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

프로퍼티 및 메서드

class Sample {
    var mutableProperty: Int = 100 //가변 프로퍼티
    let immutableProperty: Int = 100 //불변 프로퍼티
    
    static var typeProperty: Int = 100 //타입 프로퍼티
    
    //인스턴스 메서드
    func instanceMethod() {
        print("instance method")
    }
    // ---- 이까지 struct와 비슷함 !
    
    //타입 메서드
    //재정의 불가 타입 메서드 - static
    static func typeMethod() {
        print("type method - static")
    }
    
    //재정의 가능 타입 메서드 - class
    class func classMethod() {
        print("type method - class")
    }
}

프로퍼티의 종류
가변 프로퍼티 - var / 값 변경 가능
불변 프로퍼티 - let / 값 변경 불가능
타입 프로퍼티 - static 키워드 사용 / 타입 자체가 사용하는 프로퍼티

메서드의 종류
인스턴스 메서드 - 그냥 func / 인스턴스가 사용하는 메서드
재정의 불가 타입 메서드 - static func
재정의 가능 타입 메서드 - class func


클래스 사용

var mutableReference: Sample = Sample()

mutableReference.mutableProperty = 200
//mutableReference.immutableProperty = 200 - 오류발생 / 불변 프로퍼티는 변경 불가

let immutbleReference: Sample = Sample()

immutbleReference.mutableProperty = 200 // struct와 다륵게 클래스는 불변 인스턴스의 가변프로퍼티는 변경 가능 ! !
//immutableReference.immutableProperty = 200 - 오류발생 / 불변 프로퍼티는 변경 불가

//immutbleReference = mutableReference

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

//인스턴스에서는 타입 프로퍼티와 메서드 사용 불가
// mutableReference.typeProperty = 300
// mutableReference.typeMethod()

가변 인스턴스

  • 가변 프로퍼티 변경가능
  • 불변 프로퍼티는 인스턴스 생성 후 수정 불가

불변 인스턴스

  • struct와 다륵게 클래스는 불변 인스턴스의 가변프로퍼티는 변경 가능 ! !
  • 불변 프로퍼티는 변경 불가

구조체와 인스턴스

  • static 붙였던 타입 자체의 프로퍼티 및 메서드는 해당 구조체 자체에서 사용 가능
  • 인스턴스에서는 타입 프로퍼티나 타입 메서드(static 사용한 것들 )를 사용할 수 없다

예제 - 학생 클래스

class Student {
    // 가변 프로퍼티
    var name: String = "unknown"

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

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

// 인스턴스 생성
let jina: Student = Student()
jina.name = "jina" //구조체와 다르게 불변 인스턴스에서도 가변 프로퍼티 변경가능 !
jina.selfIntroduce() // 저는 Swift반 jina입니다

0개의 댓글