iOS 앱 개발자 독학 D+3 [Swift_심화 데이터 타입]

Dev-dinx·2021년 1월 6일
0

심화 데이터 타입

1. 타입 별칭 (typealias)

  • 스위프트의 데이터 타입이든, 임의로 만든 데이터 타입이든 이미 존재하는 데이터 타입에 임의로 별칭을 부여. 기존에 사용하던 데이터 타입의 이름과 프로그래머가 만든 별칭 모두 사용 가능
typealias myInt = Int
var age : myInt = 99

typealias myDouble = Double
var height : myDouble = 187.9

2. 튜플형 (Tuple)

  • 튜플은 타입의 이름이 따로 지정되어 있지 않은, 프로그래머 마음대로 만드는 타입이다.

    '지정된 데이터의 묶음' 이라고 표현 할 수 있다.

    튜플은 타입 이름이 따로 없으므로 일정 타입의 나열만으로 튜플 타입을 생성할 수 있다
var person: (String, Int, Double) = ("dinx", 75, 187.9)
	print("이름 = \(person.0), 몸무게 = \(person.1), 신장 = \(person.2)")
    	==> "이름 = dinx, 몸무게 = 75, 신장 = 187.9"

person.0 = "철수"
person.1 = 71
person.2 = 175.2
	print("이름은 \(person.0), 몸무게는 \(person.1)kg, 신장은 \(person.2)cm 입니다")
    	==> "이름은 철수, 몸무게는 71kg, 신장은 175.2cm 입니다"
        	//person을 변수로 선언했으므로 변경 가능
  • 튜플의 요소마다 이름을 붙힐 수도 있다.
var person2: (name:String, weight:Int, height:Double) = ("영민",65,165.2)
	print("이름:\(person2.name), 몸무게:\(person2.weight), 신장:\(person2.height)")
    ==> "이름:영민, 몸무게:65, 신장:165.2"
  • 튜플에 별칭을 지정할 수도 있다.
typealias personTuple = (name: String, weight:Int, height:Double)

let chulsu : personTuple = ("철수" , 75 , 170.2)
let mangu : personTuple = ("맹구" , 80 , 190.4)
	print("이름:\(chulsu.name), 몸무게:\(chulsu.weight), 신장:\(chuls.height)")
    	==> "이름:철수, 몸무게:75, 신장:170.2"
        	//personTuple 이라는 튜플을 하나의 별칭 타입으로 지정하여 사용한 것. 

3. 컬렉션형

  • 튜플 외에도 많은 수의 데이터를 묶어서 저장하고 관리할 수 있는 컬렉션 타입이 있다.

    배열(Array), 딕셔너리(Dictionary), 세트(Set) 등이 있다.

3.1 배열(Array)

  • 배열은 같은 타입의 데이터를 '일렬로 나열' 한 후 순서대로 저장하는 형태의 컬렉션 타입이다.
// 배열 선언하기

var name:[String] = ["철수","맹구","훈
이","짱구"]

var name:Array<String> = ["철수", "맹구", "훈이","짱구"]
	print(name[2])
   		==> 맹구
        	// 배열에서 2번째 순서의 값을 출력함

name.append("유리") // 배열에 마지막 순서에 값을 추가.append 메서드
name.append(contenOf: ["나미리","채송화"] // 배열에 값 추가.append(contentOf:)
name.insert("수지", at: 2) // 2번째 순서에 값(수지)를 추가.insert(값,at:순서) 

3.2 딕셔너리(Dictionary)

  • 딕셔너리는 요소들이 순서 없이 키와 값의 쌍으로 구성되는 컬렉션 타입이다.
    딕셔너리에 저장되는 값은 항상 키와 쌍을 이루게 되는데, 딕셔너리 안에는 키가 하나이거나 여러개 일 수 있다. 단, 하나의 딕셔너리 안의 키는 같은 이름을 중복해서 사용할 수 없다.
typealias StringIntDictionary = [String:Int] // typealias 를 이용하여 단순하게 표현

var numberForName: Dictionary<String, Int> = Dictionary<String,Int>() // 키는 String, 값은 Int 인 Dictionary를 생성합니다.

var numberForName0: [String:Int] = [String:Int]() // 위와 같은 표현임

var numberForName1: StringIntDictionary = StringIntDictionary() // 위와 같은 표현임

var numberForName2: [String:Int] = ["민수":100, "영희":200, "철수":300, "짱구":250]
	print(numberForName2["민수"] as Any)

3.3 세트(Set)

  • 세트는 같은타입의 데이터를 순서 없이 하나의 묶음으로 저장하는 형태의 컬렉션 타입이다. 세트 내의 값은 모두 유일한 값이며, 즉 중복된 값이 존재하지 않는다. 다음의 경우 세트를 이용한다.
  1. 순서가 중요하지 않을 때
  2. 각 요소가 유일한 값이어야 하는 경우
let jungleChampion : Set<String> = ["Xinchao","Werick","Olaf","Garen"]
let topChampion : Set<String> = ["Singed","Olaf","Garen","Camile"]

let interSection : Set<String> = jungleChampion.intersection(topChampion)
	print(interSection)
	==> ["Olaf", "Garen"]
// 교집합

let symmetricDiffSet: Set<String> = jungleChampion.symmetricDifference(topChampion)
	print(symmetricDiffSet)
	==> ["Werick", "Xinchao", "Singed", "Camile"]
// 여집합의 합

let unionSet: Set<String> = jungleChampion.union(topChampion)
	print(unionSet)
	==> ["Werick", "Xinchao", "Singed", "Camile", "Olaf", "Garen"]
// 합집합

let subtractSet: Set<String> = jungleChampion.subtracting(topChampion)
	print(subtractSet)
    ==> ["Werick", "Xinchao"]
// 차집합


// 포함관계 연산 

var 미드챔피언 : Set<String> = ["아지르","판테온","피즈","브랜드","제라스"]
var 서폿챔피언 : Set<String> = ["바드","알리스타","브랜드","제라스","판테온"]

var 챔피언 : Set<String> = 미드챔피언.union(서폿챔피언) // 미드챔피언과 서폿챔피언을 챔피언에 포함시킨다.

print(챔피언)
	==> ["알리스타", "피즈", "브랜드", "제라스", "판테온", "바드", "아지르"]

4. 열거형(enum)

  • 열거형은 연관된 항목들을 묶어서 표현할 수 있는 타입이다.
    Swift에서의 열거형은 강력한 기능을 가지고 있기 때문에 잘 알아야 한다.
    열거형은 배열이나 딕셔너리 같은 타입과 다르게 사용자가 정의한 항목 값 외에는 추가/수정이 불가능하다. 그렇기 때문에 딱 정해진 값만 열거형 값에 속할 수 있다.

    다음과 같은 경우 열거형을 사용한다.
    1. 제한된 선택지를 주고 싶을 때
    2. 정해진 값 외에는 입력받고 싶지 않을 때
    3. 예상된 입력 값이 한정되어 있을 때
enum 원딜 {
    case 케이틀린
    case 바루스
    case 트리스타나
    case 베인
    case 진
}

enum 원딜2 {
    case 트위치 , 코그모 , 자야 , 카이사
}

var 일티어원딜: 원딜 = 원딜.진
var 이티어원딜: 원딜2 = .자야

// 열거형의 원시 값 지정과 사용 (.rawValue)

enum 정글러 : String {
    case 초식정글 = "아무무"
    case 육식정글 = "우디르"
    case 성장형정글 = "쉬바나"
    case 갱킹형정글 = "리신"
    case 예능정글 = "티모"
}

let 정글러종류: 정글러 = 정글러.육식정글

	print("제가 잘하는 정글은 \(정글러종류) 입니다.") // rawValue인 "우디르"가 아니라 육식정글로 출력
	print("저의 모스트 정글챔피언은 \(정글러종류.rawValue) 입니다.") // 지정해준 rawValue인 "우디르"로 출력

마무리

오늘은 어제 기본 데이터 타입보다 살짝 어려운 심화 데이터 타입을 배웠습니다. 확실히 어제보다 살짝 난이도가 있는 것 같은 느낌이 들었습니다. 최대한 이해하기 쉽게 예제에 나와있는 변수나 값들을 제가 좋아하는 게임인 리그오브레전드를 대입하여 바꾸어 보았습니다.

공부는 현재 야곰님의 Swift프로그래밍3판을 통해 진행중입니다. :)
iOS 앱 개발자가 되는 그 날까지 화이팅!!

profile
비전공자 iOS 개발자 준비중입니다 :)

0개의 댓글