이 포스트는 야곰님의 Swift 프로그래밍 2판을 보고 스스로 공부한 내용을 정리한 포스트 입니다.


요즘 Corona Virus로 인해 수많은 사람들이 두려워하고 아프기도 한 상황입니다.

참 많이 어려운 상황에도 불구하고 의료진들과 질병관리본부, 정부 등 수많은 분들이 엄청난 노력으로 Corona Virus 확산을 막고 치료하려 애쓰고 계십니다.

그 수많은 분들에게 감사의 인사와 모든 분들이 안전하게 이 상황을 헤쳐나갈 수 있도록 기도합니다.


스위프트의 기본 데이터 타입은 모두 구조체

// 스위프트의 String 타입 정의

public struct String {
    // An empty 'String'.
    public init()
}
  • 스위프트의 다른 기본 타입(Bool, Int, Array, Dictionary, Set 등등)도 String 타입과 마찬가지로 모두 구조체로 구현되어 있다.

    • 이는 기본 데이터 타입은 모두 값 타입이라는 뜻이다.
  • 전달인자를 통해 데이터를 전달하면 모두 값이 복사되어 전달될 뿐, 함수 내부에서 아무리 전달된 값을 변경해도 기존의 변수나 상수에는 전혀 영향을 미치지 못한다.

    • 이런 점을 더욱 확실히 하기 위해 스위프트의 전달인자는 모두 상수로 취급되어 전달되는 것일지도 모른다.

구조체와 클래스 선택해서 사용하기

  • 구조체와 클래스는 새로운 데이터 타입을 정의하고 기능을 추가한다는 점이 같다.

  • 하지만 구조체 인스턴스는 항상 값 타입이고, 클래스 인스턴스는 참조 타입이다.

  • 생긴 것은 비슷하지만 용도는 다르다는 의미이다.

  • 프로젝트의 성격에 따라, 데이터의 활용도에 따라, 특정 타입을 구현할 때 구조체와 클래스 둘 중 하나를 선택해서 사용해야 한다.


애플 가이드라인에 명시된 구조체 선택 조건

  • 애플은 가이드라인에서 다음 조건 중 하나 이상에 해당한다면 구조체를 사용하는 것을 권장한다.

    • 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 때

    • 캡슐화한 값을 참조하는 것보다 복사하는 것이 합당할 때

    • 구조체에 저장된 프로퍼티가 값 타입이며 참조하는 것보다 복사하는 것이 합당할 때

    • 다른 타입으로부터 상속받거나 자신을 상속할 필요가 없을 때


구조체로 사용하기에 적합한 예시

  • 구조체로 사용하기에 가장 적합한 예로는 좌표계가 있다

  • x, y 좌표 등을 표현하고 싶을 때 Int 타입으로 x, y 프로퍼티를 생성할 수 있으며, 물건의 크기를 표현하고자 할 때는 부동소수 표현인 Double, Float 타입을 사용하여 width, height, depth 등으로 묶어 표현 해줄 수 있다.