아삭아삭 iOS 개발

[Swift 독학] 패스트캠퍼스 챌린지 18일차_클래스 본문

Swift

[Swift 독학] 패스트캠퍼스 챌린지 18일차_클래스

바닐라머스크 2022. 2. 10. 15:10

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() 인스턴스에서 타입 메서드 사용 불가

 

class 파트 문법강의를 수강하며 실습해보는 중

 

 

본 게시물은 개인 공부 기록용이므로 내용에 오류가 있을 수 있습니다.

 fast campus강의  참조자료

[1] https://blog.yagom.net/552/

[2] https://bbiguduk.gitbook.io/swift/language-reference/declarations#class-declaration

 

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.