seong_hye, the developer

Swift) 문법 정리 - 열거형(Enum) 본문

IOS

Swift) 문법 정리 - 열거형(Enum)

seong_hye 2022. 7. 12.

 

swift에서 사용하던 타입 중 가장 대표적인 Int, String, Double의 경우 

스위프트에 내장되어 있는 기본 타입인 Basic Type이라고 한다면

 

개발자가 마음대로 만들어 쓸 수 있는 타입인 Custom Type이 있다.

그 중 하나에 대해 오늘 알아보려 한다.


열거형 (Enumeration)

타입 자체를 한정된 사례 안에서 정의할 수 있는 타입

타입으로 만든 경우, 미리 정의해둔 타입의 케이스에서 벗어날 수 없으므로

코드의 가독성과 안정성이 높아짐

ex) 월, 화, 수, 목, 금, 토, 일 / 가위, 바위, 보

enum Weekday {
	case monday
    case tuesday
    case wednesday
    case thursday
    case friday
    case saturday
    case sunday
}

var day = Weekday.sunday

 

원시값을 가진 열거형

매칭되는 기본값을 정해 열거형을 좀 더 활용할 수 있음

내부에 또다른 매칭값을 저장해놓고 편리하게 사용할 수 있는 개념

아래 코드에서 자동으로 0, 1, 2... 자동으로 저장됨 (정수의 경우 숫자가 하나씩 증가)

enum Weekday: Int { 	==> Int 또는 String 가능
	case monday
    case tuesday 
    case wednesday 
    case thursday
    case friday 
    case saturday
    case sunday
}

var today:Weekday? = Weekday(rawValue:0)	//원시값으로 쉽게 인스턴스 생성 가능
var num: Int = Weekday.monday.rawValue

 

연관값을 가진 열거형

구체적인 추가정보를 저장하기 위해 사용

케이스가 카테고리의 역할로 바뀜

enum Computer { 
	case cpu(core: Int, ghz: Double)
    case ram(Int, String)
    case hardDisk(gb: Int)
}

var chip: Computer = Computer.cpu(core: 6, ghz: 1,4)

원시값과 연관값의 비교

구분 원시값 연관값
사용 목적 열거형 타입의 각 케이스에 정수 또는 문자열을 매칭시켜,
타입을 생성하거나 다룰 때 조금 더 편하게 사용하려는 목적
열거형 타입의 각 케이스의 카테고리에는 해당하지만
보다 구체적인 정보를 저장하여 사용하려고 할때
선언 방법 선언 타입이 제한 - Int, String을 주로 사용 선언 타입에 제[한없이 자유롭게 정의 가능
값의 저장 열거형의 선언 시점 인스턴스 생성 시
값의 변경 선언시에 정의 개념이기에 당연히 불가능 하나의 케이스에 서로 다른 값들을 저장 가능
주의점 하나의 열거형에서 원시값과 연관값을 동시에 사용하는 것은 불가능

열거형과 switch 문 사용법

열거형은 한정된 사례로 만든 타입이고

스위치문은 표현식에 대한 분기처리에 최적화되어 있기 떄문에 활용에 적합

var day = Weekday.monday

switch day {
	case .monday:
    	print("월요일")
    case .tuesday:
    	print("화요일")
    case .wednesday:
    	print("수요일")
    case .thursday:
    	print("목요일")
    case .friday:
    	print("금요일")
    case .saturday:
    	print("토요일")
    case .sunday:
    	print("일요일")
}

 

연관값이 있는 열거형의 경우 switch 사용법

케이스 내부에 구체적인 정보가 들어 있고 그 구체적인 정보를 꺼내서 활용하기 위해

변수에 바인딩해서 사용하는 패턴

ex) let 변수 이름 = 열거형 내부의 연관값

var chip: Computer = Computer.cpu(core: 6, ghz: 1,4)

switch chip { 
	case .cpu(core: let c, ghz: let g):
    	print("cpu - \(c), \(g)")
    case .ram(_):
    	print("Ram")
    case let .hardDisk(gb: g):
    	print("하드 - \(g)기가")
}

참고자료)

https://zrr.kr/qNHN

 

앨런 Swift문법 마스터 스쿨 (온라인 BootCamp - 2개월과정) 강의 - 인프런

Swift문법을 제대로 이해, 활용해보고자 하는 철학을 바탕으로 과정이 설계되었습니다. 코딩에 대해 1도 모르는 비전공자를 시작으로 네카라쿠배에 입사할 수 있는 초고급 수준까지 올리는 것을

www.inflearn.com

 

Comments