[TIL] 09.19

Junyoung_Hong·2023년 9월 19일
0

TIL_9월

목록 보기
14/19
post-thumbnail

1. do-catch, try

지난 글에서 encoding과 decoding을 진행할 때, do-catch, try를 사용했었다. do-catch문과 try는 오류 처리를 할 때 주로 사용하는 구문이다.

1-1. 키워드 설명

  • do-catch 구문은 특정 부분의 코드를 감싸고, 그 부분에서 발생할 수 있는 오류를 처리하는 데 사용된다.
  • do 블록 내에 오류가 발생할 수 있는 코드를 작성하고, catch 블록에서 실제로 오류를 처리한다.
  • try 키워드는 오류가 발생할 수 있는 메서드 또는 표현식 앞에 사용된다. try 키워드는 해당 코드 블록에서 오류가 발생할 수 있음을 나타낸다.
    • try: 일반적인 try 키워드는 오류가 발생하면 해당 오류를 던지고, do-catch 구문에서 처리하도록 한다.
    • try?: try? 키워드는 오류가 발생하면 nil을 반환하고, 오류 처리를 생략한다.
    • try!: try! 키워드는 오류가 발생하면 런타임 오류를 발생시키고, 프로그램을 중단시킨다.
do {
	try 오류 발생 가능 코드
} catch 오류 패턴 {
	처리 코드
}

1-2. 사용 예시

let person = Person(name: "John", age: 30)
let jsonEncoder = JSONEncoder()

do {
    let jsonData = try jsonEncoder.encode(person)
    if let jsonString = String(data: jsonData, encoding: .utf8) {
        print("JSON 문자열: \(jsonString)")
    }
} catch {
    print("인코딩 에러: \(error)")
}
  • do 블록 내에는 JSON 인코딩 작업을 포함하고 있다. jsonEncoder.encode(person)는 JSONEncoder 객체를 사용하여 person 객체를 JSON 데이터로 인코딩하는 코드이다. 이 코드는 오류가 발생할 수 있는 부분이다.
  • try 키워드를 사용하여 jsonEncoder.encode(person)를 호출하고, 이 코드에서 발생할 수 있는 오류를 처리할 수 있도록 한다.
  • 만약 jsonEncoder.encode(person)에서 오류가 발생하면, catch 블록이 실행되고, 해당 오류가 error 매개변수로 전달된다.
  • catch 블록은 오류를 처리하고 "인코딩 에러: ..."와 같은 오류 메시지를 출력한다. 이렇게 하면 프로그램이 오류에 안전하게 대응할 수 있다.

2. enum(열거형)

우연히도 아직 프로젝트에서 열거형을 사용해본적이 없어서 아직 어색한 친구다. 이번 기회에 기본적인 내용을 정리해보자 한다.

2-1. 기본적인 의미

열거형은 서로 연관된 값들을 그룹화하고 명명된 상수로 나타내는 데 사용되는 강력한 데이터 유형이다. 즉, 이미 정해놓은 입력 값만 선택해서 받고 싶을 때 사용하면 효과적이다.

2-2. 원시값이 없는 열거형 선언

열거형은 enum 키워드를 사용해서 선언하면 된다.

enum CompassPoint {
    case north
    case south
    case east
    case west
}

2-3. 케이스

열거형 내에서 각각의 값은 케이스라고 불린다. 위의 코드에서 north, south, east, west 모두 케이스이다. 선언을 할 때, 하나의 케이스 안에 나열해서 써도 된다.

enum CompassPoint {
    case north, south, east, west
}

사용할 때는 하나의 자료형이 되는 것이서 타입처럼 사용하면 된다.

let direction: CompassPoint = .south

2-4. 원시값이 있는 열거형

case에 원시값을 지정해줄 수 있는데, 이를 Raw Value라고 한다. Raw Value가 될 수 있는 자료형은 Number Type, Character Type, String Type, 총 3가지이다. 원시값을 가지고 싶다면, enum 선언할 때 Type을 꼭 명시해주어야 한다.

Number Type

enum CompassPoint: Int {
    case north = 1
    case south
    case east = 4
    case west
}

Int 타입을 선언해주면 1씩 증가한 값들이 들어간다. south는 2, west는 5가 된다.

enum CompassPoint: Double {
    case north = 1.0
    case south
    case east = 4
    case west
}

그런데 Double이나 Float 타입으로 선언하고 값을 지정해주면 에러가 뜬다. 현재 north는 정수값이 아닌 실수값이기 때문에 정수인 1을 더하지 못하는 것이다. west는 정상적으로 5.0으로 출력이 될 것이다.

Character Type

enum CompassPoint: Character {
    case north = "n"
    case south = "s"
    case east = "e"
    case west = "w"
}

Character을 타입으로 선언하면 모든 Raw Value를 선언해주어야 한다.

String Type

enum CompassPoint: String {
    case north = "n"
    case south
    case east
    case west = "w"
}

Raw Value를 지정하지 않으면, case 이름과 동일한 Raw Value가 자동으로 만들어진다.

profile
iOS 개발자를 향해 성장 중

0개의 댓글

관련 채용 정보