본문 바로가기
Swift

스위프트 101 - Objects and Classes

by HaningYa 2020. 3. 26.
728x90

Class

'class' 뒤에 class 이름을 붙여 class를 만든다.

class 의 프로퍼티 선언은 상수나 변수선언과 동일하다. 하지만 프로퍼티들은 해당 classd의 context에 속해진다.

함수도 같은 방법으로 사용하면 된다.

 

Class instance 만들기

클래스 인스턴스를 만드려면 이름 뒤에 괄호를 붙여주면 된다. 또한 class의 프로퍼티에 접근하기 위해선 쩜(.)을 사용하면 된다.

var shape = Shape()
shape.numberOfSides = 7
var shapeDescription = shape.simpleDescription()

위 코드는 initializer를 빼먹고 있다. initializer는 class 의 instance 가 만들어질 때 초기 설정을 해주는 역할이다.

class NamedShape {
    var numberOfSides: Int = 0
    var name: String

    init(name: String) {
        self.name = name
    }

    func simpleDescription() -> String {
        return "A shape with \(numberOfSides) sides."
    }
}

여기서 나온 self는 코드에서도 알수 있듯이 initializer 의 프로퍼티인 name 과 class의 name을 구분하기 위해 쓰여졌다. 

클래스 인스턴스를 만들때 initializer의 arguments들은 function call 처럼 전달된다.

모든 클래스의 프로퍼티들은 값이 선언되거나 initializer 둘 중 한가지 방식으로 할당되어야 한다.

 

override func

슈퍼클래스(부모클래스)의 메소드는 subclass 에서 override라고 표기된다. override는 override된 함수가 아닐경우 에러가 나니 아무데나 붙이지 말자.

 

Getter & Setter

간단한 프로퍼티는 getter 와 setter를 가질 수 있다.

  var perimeter: Double {
        get {
            return 3.0 * sideLength
        }
        set {
            sideLength = newValue / 3.0
        }
    }

var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
print(triangle.perimeter)
// Prints "9.3"
triangle.perimeter = 9.9
print(triangle.sideLength)
// Prints "3.3000000000000003

 

Swift101 은 여기서 끝내고 이제 한 주제씩 공부해보려 한다.

  • collection Types
  • Control Flow
  • Functions Closures
  • Enumeration
  • Structures and Classes
  • Properites
  • Methods
  • Subscripts
  • Inheritace
  • Initialization
  • Deinitialization
  • Optional Chaining
  • Error Handling
  • Nested Types
  • Extensions
  • Protocols
  • Generics
  • Automatic Reference Counting
  • Memory Safty
  • Access Control
  • Advanced Operators

 

 

 

[참고] :  Apple Inc. ‘The Swift Programming Language (Swift 5.0).’ Apple Books. https://books.apple.com/kr/book/the-swift-programming-language-swift-5-2/id881256329

728x90

댓글