일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- toy project
- SOPT
- 백엔드
- 리뷰
- 백준
- 자바
- 영화기록
- sopt 35기
- java
- 코딩공부
- sopt ios
- 새벽녘 소소한 기록
- 인프런
- 일기
- IOS
- 자바공부
- 도서리뷰
- 영화일기
- 영화리뷰
- inflearn
- 플러터
- 토이프로젝트
- 자바 스터디
- 영화
- 스프링 입문
- Flutter
- 키노
- 영화후기
- Flutter Toy Project
- backend
- Today
- Total
새벽의 기록
[SOPT] 고량주 2주차 이론 과제 본문
1. Delegate, Closure에 대해서 복습하세요.
- 클로저의 캡처는 무엇일까요?
- 클로저는 어느 메모리 영역에서 작동할까요?
- escaping 클로저와 non-escaping 클로저의 차이점은 무엇인가요?
- 델리게이트에서 weak, 클로저 내부에서 weak self를 왜 사용했을까요?
- 캡쳐 리스트는 무엇인가요?
2. 싱글톤 패턴에 대해서 알아보고, 어떨 때 사용하는 것이 좋은지 알아봅시다.
3. 열거형에 대해서 알아보고, 원시값과 연관값의 차이도 알아봅시다.
4. stored, type, computed property에 대해서 알아봅시다.
- 메모리 상에서 어떤 차이가 있는지도 알려주세요.
열거형에 대해서 알아보고, 원시값과 연관값의 차이도 알아봅시다.
열거형(enum)
관련된 값들의 집합을 정의하는 자료형
→ 공통된 주제에 대해서 이미 정해놓은 값만 선택해서 받고 싶을 때 사용하는 자료형
→ 오타같은 실수의 가능성도 줄어들고 코드의 가독성도 좋아짐
enum Direction {
case north
case south
case east
case west
}
enum Direction {
case north, south, east, west
}
원시값(Raw value)
열거형의 각 케이스가 가질 수 있는 고정된 값
→ 주로 정수, 실수, 문자, 문자열 등이 사용되며 이 값들은 상수처럼 사용할 수 있다.
정수형
enum Direction: Int {
case north // 0
case south // 1
case east // 2
case west // 3
}
Int 타입을 enum 선언 시 이름 옆에 명시해주면
가장 먼저 선언된 case 부터 0부터 1씩 증가된 값이 들어간다
enum Direction: Int {
case north = 0 // 0
case south = 10 // 10
case east // 11
case west = 20 // 20
case northEast // 21
}
직접 RawValue를 지정해줄 수도 있지만, RawValue를 지정해주지 않은 case는
바로 이전 case의 RawValue에서 +1 한 값으로 자동 세팅된다
실수형
enum Direction: Double {
case north = 1.0 // 1.0
case south = 2.0 // 2.0
case east = 3.0 // 3.0
case west = 4.0 // 4.0
case northEast // 5 -> Error
}
만약 Double 혹은 Float 타입을 원시 값으로 설정했으면 모든 case에 대해 RawValue를 지정해줘야 한다
→ RawValue 값이 지정되지 않은 case는 이전 값에서 +1 한 정수값이 자동으로 지정되기 때문에 실수형의 원시값 enum에서는 Error가 발생하는 것
enum Direction: Double {
case north = 1.0 // 1.0
case south = 2.0 // 2.0
case east = 3.0 // 3.0
case west = 4 // 4.0
case northEast // 5.0
}
따라서, 실수형을 원시값으로 사용할 경우 RawValue를 생략하고 싶다면
바로 이전 case의 RawValue를 정수 값으로 세팅해주어야한다
문자형
enum Direction: Character {
case north = "a" // a
case south = "b" // b
case east = "c" // c
case west = "d" // d
case northEast = "e" // e
}
문자형을 원시값으로 사용할때도 마찬가지로 모든 case에 대한 RawValue를 직접 선언해주어야 한다
enum Direction: Character {
case north = "a" // a
case south // b -> Error
case east = "c" // c
case west = "d" // d
case northEast = "e" // e
}
만약 하나라도 입력해주지 않으면 아까 실수형에서와 같은 맥락으로 에러가 발생한다
→ 지정되지 않은 RawValue는 이전 case에서 +1 한 값을 갖는데, 이전 case의 RawValue가 정수형이 아니라서 +1을 할 수 없으니 Error
문자열형
enum Direction: String {
case north // north
case south // south
case east // east
case west // west
case northEast // northEast
}
문자형이 원시값인 enum은 RawValue를 지정하지 않으면 case 이름으로 RawValue가 세팅된다
원시값 사용예시
enum Weekday: String {
case monday = "Mon"
case tuesday = "Tue"
case wednesday = "Wed"
case thursday = "Thu"
case friday = "Fri"
}
print(Weekday.monday.rawValue) // "Mon"
연관값(Associated Value)
열거형의 각 case에 동적으로 다른 값들을 추가로 지정할 수 있게 하는 값
원시값과 달리, 각 case마다 다른 타입을 가질 수 있다
// 이름이 없고 타입만 있는
enum EnumName {
case caseName(Type)
case caseName(Type, Type, ...)
}
// 이름도 있고 타입도 있는
enum EnumName {
case caseName(name1: Type)
case caseName(name2: Type, name3: Type, ...)
}
연관값은 이렇게 case 옆에 튜플(지정되지 않은 데이터의 나열) 형태로 원하는 Type을 명시해서 사용
enum AppleProduct: String {
case iPad = "5, 128GB"
case iPhone = "6, 64GB"
case macbook = "Pro, 256GB"
}
이렇게 case별로 RawValue를 정해주는 원시값을 사용할 수도 있지만,
모든 iPad5가 128GB이고, iPhone6가 64GB는 아님
→ 원시값은 모든 case가 동일한 형식(위에선 String)으로 RawValue를 가져야 하고, case 별 값은 미리 지정된 한 가지 값만 가질 수 있다는 단점이 있음
→ 그래서 이를 보완해서 사용할 수 있는 것이 연관값
enum AppleProduct {
case iPad(model: String)
case iPhone(model: String, storage: Int)
case macbook(model: String, storage: Int, size: Int)
}
연관값 사용예시
enum MediaType {
case book(title: String, author: String)
case movie(title: String, director: String)
}
let favoriteBook = MediaType.book(title: "The Man Who Laughs", author: "Victor-Marie Hugo")
let favoriteMovie = MediaType.movie(title: "파묘", director: "장재현")
원시값 vs 연관값
원시값 (Raw Value)연관값 (Associated Value)
열거형의 각 케이스에 미리 정의된 고정된 값. | 각 케이스가 필요할 때마다 저장하는 동적인 값. |
모든 케이스는 같은 데이터 타입의 원시값을 가져야 함. | 각 케이스가 서로 다른 타입의 값을 가질 수 있음. |
열거형 정의 시에 값을 지정하거나 자동으로 할당됨. | 케이스가 생성될 때 연관값을 저장함. |
각 케이스는 값이 고정되어 있으며, 변경할 수 없음. | 연관값은 동적으로 다르게 설정할 수 있음. |
값을 사용할 때 rawValue로 접근 가능. | 연관값은 switch를 사용해 추출하거나 직접 접근. |
'SOPT' 카테고리의 다른 글
[SOPT] 고량주 1주차 이론 과제 (0) | 2024.11.07 |
---|---|
[SOPT] 35기 iOS 파트 합격 후기 (4) | 2024.09.26 |