데이터 타입 : 고급

박형석·2021년 12월 13일
0

Swift

목록 보기
12/20
post-thumbnail
post-custom-banner

Type-safe Language

스위프트의 안정성이 가장 뚜렷하게 나타나는 부분, "타입에 민감하고 엄격" 그래서 다른 타입끼리는 타입캐스팅 혹은 새로운 인스턴스 생성을 해야 값을 교환할 수 있다. 이렇게 스위프트는 Type-safe 언어다. 타입과 다른 값을 할당하려고 하면 컴파일에서 타입 체크를 한 뒤 컴파일 오류를 던진다.

타입 추론

스위프트에서는 변수나 상수를 선언할 때 특정 타입을 명시하지 않아도 컴파일러가 할당된 값을 기준으로 변수나 상수의 타입을 결정

타입 별칭

이미 존재하는 데이터 타입에 임의로 다른 이름(별칭)을 부여할 수 있다. typealias

튜플

타입의 이름이 따로 지정되어 있지 않은, 프로그래머 마음대로 만드는 타입이다. 지정된 데이터의 묶음이라고 표현할 수 있다. 그저 타입의 나열만으로 튜플 타입을 생성해 줄 수 있다. 갯수도 자유롭다. 이름도 붙여줄 수 있다. 별칭까지하면 금상첨화

typealias PersonTuple = (name: String, age: Int, height: Double)
let person: PersonTubple = ("Paul", 14, 124.1)
// person.name으로 접근 가능

컬렉션형

많은 수의 데이터를 묶어서 저장하고 관리하는 컬렉션 타입을 제공한다. 배열, 딕셔너리, 세트

배열

  • 같은 타입의 데이터, 일렬로 나열, 순서대로 저장
  • 배열의 일부만 가져오기 위해 범위 연산자 사용 가능, 또 수정을 위해서도 사용가능
    • name[1...3]
    • name[1...3] = ["A", "B", "C"]
  • 배열을 비롯한 컬렉션 타입을 활용할 때 서브스크립트 기능을 많이 사용

딕셔너리

  • 순서 없이, 키와 값의 쌍으로 구성
  • 특정 키에 해당하는 값을 제거하려면, removeValue(forkey:)나 키에 해당하는 딕셔너리에 nil을 할당

세트

  • 같은 데이터 타입, 순서 없이, 유일한 값
  • 보통 순서가 중요하지 않거나 각 요소가 유일한 값이어야 하는 경우.
  • 해시 가능한 값이 들어와야 한다. (기본 데이터 타입은 모두 해시 가능한 값)
  • Set과 같이 써준다. 대괄호로 값을 묶어서 표현. 축약형 없음
  • 보통 집합 관계를 표현하고자 할 때 유용,
// 집합 연산.isDisjoint(with: 포유류) // 서로 배타적인지.idSubset(of: 동물) // 새가 동물의 부분 집합인지
동물.isSuperset(of: 포유류) // 동물은 포유류의 전체 집합인지
동물.isSuperset(of:) // 동물은 새의 전체 집합인지
        
intersection // 교집합
symmetricDifference // 여집합
union // 합집합
substracting // 차집합

컬렉션형의 특별한 함수
randomElement() 컬렉션의 임의의 요소 추출
shuffle() 임의로 뒤섞기
shuffled() 그걸 반환

열거형

  • 연관된 항목들을 묶어서 표현할 수 있는 타입
  • 프로그래머가 정의해준 항목 값 외에는 추가 / 수정 불가능
  • 항목 이 그 자체로 값이 될 수 있음
  • 원시 값으로 실제 값을 가질 수도 있음
    • 일부 항목만 가능, 정수 타입을 받으면 0 ~ case.count-1만큼 자동으로 값이 들어감
    • 반대로 원시 값 정보를 알면 열거형 변수나 상수를 생성해줄 수도 있다
  • 연관 값을 가질 수도 있음
  • 항목 순회 : 열거형에 포함된 모든 케이스를 알아야 할 때 CaseIterable 프로토콜 채택
    • 열거형 타입.allCases 로 모든 케이스가 담긴 컬렉션을 받음
    • 다른 조건이 걸리면 직접 allCases를 구현해서 사용. (예로 플랫폼별로 나눌 때, 연관값을 가지고 있을 때)
  • 순환 열거형 : 열거형 항목의 연관 값이 열거형 자신의 값이고자 할 때 indirect 키워드 사용
enum Expression {
 case number(Int)
 indirect case addition(Expression, Expression)
}

indirect enum Expression {
 case number(Int)
 case addition(Expression, Expression)
}
  • 순환 함수를 구현해서 이진 탐색 트리, 순환 알고리즘을 구현할 때 사용할 수 있다.
  • 비교 가능한 열거형 : Comparable 프로토콜을 준수하는 연관값만 갖거나, 연관 값이 없는 열거형은 각 케이스를 비교할 수 있다.
profile
IOS Developer
post-custom-banner

0개의 댓글