이번달 내로 2020년 회고 쓸건데 이거 언제 다하고 쓰지...

 

프로퍼티와 메서드

  • 프로퍼티
    • 저장 프로퍼티
      • 변수 or 상수
      • 클래스와 구조체에 포함
    • 연산 프로퍼티
      • 연산을 실행한 결괏값
      • 실제로 데이터 값을 갖지 않음
      • 클래스, 구조체, 열거형에 포함
      • getter/setter가 존재
      • 왜 사용하는가?
        • 메서드로 구현시, get/set Method 2개를 구현해야 하는데, 보다 훨씬 간편함
    • 타입 프로퍼티
      • 특정 타입에 사용
      • static 키워드 사용
    • 지연 저장 프로퍼티
      • 처음으로 호출될 때, 초기화를 진행한다 
      • lazy var 키워드 사용
      • lazy let은 사용할 수 없다 -> (let은 생성될 때, 초기화된 후로 변경될 수 없기 때문이 아닐까?)
      • 여러 쓰레드가 동시에 접근 시, 여러번 초기화 가능성이 있다. -> Non-Thread-Safe
//연산 프로퍼티
struct Point{
	var x: Float
    var y: Float
	var oppositePoint: Self{
    	get{
        	return Point(x: -x, y: -y)
        }
        //set은 생략가능 -> 읽기전용 프로퍼티로 선언/사용 가능
        set(opposite){
        	x = -opposite.x
            y = -opposite.y
        }
    }
}

 

프로퍼티 감시자

- 값이 새로 할당될 때마다 호출

- 저장/연산 프로퍼티에 사용 가능

- willset/didset 구현

- 현재 값과 같더라도 실행된다

- 오버라이드가 가능하다

class Account{
	var credit: Int = 0{
    	willSet{
        	print("잔액이 \(credit)에서 \(newValue)로 변경될 것입니다")
        }
        didSet{
        	print("잔액이 \(oldValue)에서 \(credit)으로 변경되었습니다")
        }
    }
}

 

타입 프로퍼티

- 인스턴스가 아닌 각각의 타입 다체에 속하는 프로퍼티

- static let, static var 사용 가능하지만, 연산 프로퍼티는 var로만 선언 가능

- 반드시 초깃값을 설정해야 하며, 지연 연산된다

- 지연 저장 프로퍼티(lazy var)와는 다르게 다중 쓰레드 환경에서도 단 한번만 초기화 된다


메서드

  • 인스턴스 메서드
    • 인스턴스가 존재할 때만 사용 가능
    • 구조체/열거형에서 인스턴스 내부 값(프로퍼티)을 변경하기 위해서는 mutating func로 선언
  • 타입 메서드
    • static func / class func 가 존재한다
      • 둘다 같은 타입 메서드지만, static은 상속 불가, class는 상속 가능 타입 메서드이다
    • 여기서의 Self는 인스턴스가 아닌 타입 자신을 의미한다

 

+ Recent posts