[Swift] Datatype

jayb·2021년 3월 9일
0

Swift Basic

목록 보기
4/8
post-thumbnail

데이터 타입 고급

1. 데이터 타입 안심

  • 데이터 타입 안심이란 데이터의 타입에서 오는 실수들을 줄일 수 있다는 말로서 Swift가 컴파일 시 타입을 확인하며 문제가 있을 경우 컴파일 오류로 알려준다.
  • 타입 확인: 컴파일시 타입을 확인하는 과정을 타입 확인이라고 한다.
  • 타입 추론: 특정 타입을 명시하지 않아도 컴파일러가 할당된 값을 기준으로 변수나 상수의 타입을 결정한다.

2. 타입 별칭(Type Alias)

  • 존재하는 데이터 타입에 임의의 다른 이름(별칭)을 부여할 수 있으며 이를 타입 별칭이라고 한다.

  • 기본으로 제공하는 데이터 타입(Int...), 사용자가 생성한 타입 모두 별칭 생성이 가능하다.

    typealias Number = Int
    typealias Count = Int
    
    let myMoney: Number = 1000000000
    let bank: Count = 1000000000
    
    // alias로 다른 이름을 가졌지만 모두 Int를 지칭하므로 myMoney == bank 는 true가 된다.

3. 튜플

  • 프로그래머가 데이터들을 지정하여 모은 묶음

  • 다른 타입의 데이터들을 묶을 수 있다.

  • 인덱스로 접근하면 추후 코드를 읽을 때 의미가 모호할 수 있으므로 이름을 붙여줄 수 있다.

    var coffee: (name: String, price: Int, size: String) = ("Americano", 4100, "Tall")
    
    print("\(coffee.name) \(coffee.size)\(coffee.price)원 입니다.")
  • 타입 별칭을 활용해 튜플을 더 쉽게 사용 가능하다.

    typealias coffee = (name: String, price: Int, size: String)
    
    let americano = ("Americano", 4100, "Tall")
    let latee = ("Latte", 4600, "Tall")
    
    print("\(americano.name) \(americano.size)\(americano.price)원 입니다.")
    print("\(latte.name) \(latte.size)\(latte.price)원 입니다.")

4. 컬렉션형

  • ​ 배열(Array)

    • 데이터를 일렬로 나열한 후, 순서대로 저장. 즉, 순서가 존재하는 데이터 타입이다.

    • let으로 선언하면 상수화되어 변경할 수 없는 값이 되고, var로 선언하면 변경 가능하다.

    • Swift의 Array는 C언어의 배열처럼 버퍼(Buffer)이다. 단, C언어처럼 한 번 선언하면 크기가 고정되는 버퍼가 아니라 필요에 따라(요소의 삽입과 삭제시 공간이 더 필요할 때) 자동으로 버퍼의 크기를 조절한다.

      버퍼(Buffer): 임시 기억 공간이라는 포괄적인 개념으로 여러 곳에 존재할 수 있다. CPU, 하드디스크, CD-ROM이나 프린터에도 존재 가능하다. 또한 일반 프로그램 내에서도 가능하다.

      C에서 특정한 T타입의 배열은 메모리 상에서 연속적인 공간입니다. 이 때문에 정적 배열이든 동적 배열이든 배열을 액세스하는 것은 필연적으로 포인터와 관련됩니다. 반면 Swift의 배열에서 원소들은 반드시 이런 식으로 배치되지는 않습니다. C의 배열이 단지 원소값이 나란히 배치된 메모리 영역임에 비해 Swift의 배열은 struct로 구성되는 보다 복잡한 내부 구조를 가지고 있습니다. 출처 - https://soooprmx.com/archives/11045

  • 딕셔너리(Dictionary)

    • key, value의 쌍으로 구성된 자료구조

    • Swift의 dictionary는 순서가 존재하지 않는다.

    • key는 식별자로 중복될 수 없다.

    • type alias를 통해 더 단순하게 표현 가능하다.

      typealias StringIntDictionary = [String: Int]
      var coffeeNameAndNumber: [String: Int]
      var coffeeNameAndNumber: Dictionary<String, Int>
      var coffeeNameAndNumber: StringIntDictionary
      // 모두 같은 선언
  • 세트(Set)

    • 중복이 존재하지 않으며 순서가 존재하지 않는 데이터의 묶음

    • 순서가 중요하지 않거나 각 요소가 유일한 값이어야 하는 경우 사용

    • 세트의 요소는 해시 가능한 값이 들어와야 한다.

      • Swift 표준 라이브러리의 Hashable 프로토콜을 따른다는 것을 의미한다.
    • 배열과 달리 축약형 표현([Int])가 없어 Set로 표현해줘야 한다.

    • 궁금증: Array를 Set로 변환하면 자동으로 중복이 제거되며 Set가 되는 형변환이 될까?

      • 해답: 가능하다. Python처럼 Array를 Set으로 변환하고 다시 Array로 변환할 수 있다.

      • Swift에서 Set을 활용해 Array의 중복 제거하기

        duplicatedArray = [1,1,2,3]
        let convertedSet = Set(duplicatedArray)
        let convertedArray = Array(convertedSet)

reference: Swift 프로그래밍 by 야곰

profile
iOS Developer

0개의 댓글