내일배움캠프 21일차

임클·2025년 3월 31일

내일배움캠프

목록 보기
22/44
post-thumbnail

일정


TIL: Swift의 기본 데이터 타입, 컬렉션 타입, 값 타입과 참조 타입, 구조체와 클래스, 열거형의 원시값과 연관값

오늘 Swift 프로그래밍 언어의 기본적인 요소들에 대해 학습했습니다. 아래는 주요 내용입니다.

Swift의 기본 데이터 타입

Swift에는 데이터를 표현하기 위한 몇 가지 기본 데이터 타입이 있습니다:

  • Int: 정수를 나타냅니다. 예: 1, -42, 100.
  • Double: 부동 소수점 숫자를 나타냅니다. 예: 3.14, 0.001, -2.718.
  • Bool: 참(true) 또는 거짓(false)의 불리언 값을 나타냅니다.
  • String: 문자열을 나타냅니다. 예: "Hello, Swift!", "안녕하세요".
  • Character: 단일 문자를 나타냅니다. 예: 'A', '가'.

이 데이터 타입들은 Swift에서 가장 기본적인 구성 요소로, 다양한 값을 표현하고 계산하는 데 사용됩니다.

Swift의 컬렉션(Collection) 타입

Swift는 여러 데이터를 모아서 관리할 수 있는 컬렉션 타입을 제공합니다:

  • Array: 순서가 있는 데이터의 집합입니다. 동일한 타입의 요소를 순서대로 저장합니다. 예: [1, 2, 3], ["사과", "바나나"].
  • Dictionary: 키-값 쌍으로 이루어진 데이터의 집합입니다. 각 키는 고유하며, 값을 매핑합니다. 예: ["name": "홍길동", "age": "30"].
  • Set: 중복되지 않는 유일한 요소들의 집합입니다. 순서가 없으며, 동일한 타입의 요소를 저장합니다. 예: [1, 2, 3].

이 컬렉션 타입들은 데이터를 효율적으로 저장하고 조작할 수 있게 해줍니다.

값 타입(Value Type)과 참조 타입(Reference Type)의 차이점

Swift에서 데이터가 메모리에 저장되고 전달되는 방식에 따라 값 타입과 참조 타입으로 나뉩니다:

  • 값 타입(Value Type):

    • 데이터를 직접 저장합니다.
    • 변수나 상수에 값을 할당하거나 전달할 때, 값이 복사됩니다. 즉, 새로운 복사본이 생성됩니다.
    • 예: 기본 데이터 타입(Int, Double), 구조체(Struct), 열거형(Enum).
    • 특징: 독립적인 데이터로, 한 변수의 변경이 다른 변수에 영향을 주지 않습니다.
  • 참조 타입(Reference Type):

    • 데이터가 저장된 메모리의 주소를 저장합니다.
    • 변수나 상수에 값을 할당하거나 전달할 때, 주소가 복사됩니다. 즉, 동일한 데이터를 여러 변수가 참조할 수 있습니다.
    • 예: 클래스(Class).
    • 특징: 동일한 데이터를 참조하므로, 한 변수의 변경이 다른 변수에도 영향을 줍니다.

쉽게 말해, 값 타입은 "복사본"을 만들고, 참조 타입은 "공유된 참조"를 만듭니다.

구조체(Struct)와 클래스(Class)의 사용 시기 구분

구조체와 클래스는 데이터를 캡슐화하고 메서드를 정의할 수 있는 타입이지만, 사용 목적에 따라 구분됩니다:

  • 구조체(Struct):

    • 값 타입입니다.
    • 상속을 지원하지 않습니다.
    • 간단한 데이터 모델이나 불변성을 유지해야 할 때 적합합니다.
    • 스레드 안전성이 필요한 경우 유리합니다.
    • 예: 좌표(Point), 색상(Color), 사용자 정보(User).
  • 클래스(Class):

    • 참조 타입입니다.
    • 상속을 지원합니다.
    • 객체 간의 관계를 표현하거나, 공유된 상태를 관리해야 할 때 적합합니다.
    • 복잡한 로직이나 생명주기 관리가 필요한 경우 사용합니다.
    • 예: 뷰 컨트롤러(UIViewController), 네트워크 관리자(NetworkManager).

따라서, 간단하고 독립적인 데이터를 다룰 때는 구조체를, 상속이나 객체 간 공유가 필요할 때는 클래스를 선택하는 것이 좋습니다.

열거형(Enum)의 원시값(Raw Value)과 연관값(Associated Value)

열거형은 관련된 값들의 집합을 정의하며, 원시값과 연관값이라는 두 가지 기능을 제공합니다:

  • 원시값(Raw Value):

    • 열거형의 각 케이스에 고정된 기본값을 할당합니다.
    • 주로 Int, String 같은 타입을 사용합니다.
    • 예:
      enum Day: Int {
          case monday = 1, tuesday = 2, wednesday = 3
      }
      let today = Day(rawValue: 2) // tuesday
    • 용도: 열거형 케이스를 기본값으로 초기화하거나 값을 가져올 때 사용.
  • 연관값(Associated Value):

    • 열거형의 각 케이스에 추가적인 데이터를 동적으로 연결합니다.
    • 다양한 타입의 데이터를 포함할 수 있습니다.
    • 예:
      enum Error {
          case network(code: Int, message: String)
          case fileNotFound(path: String)
      }
      let error = Error.network(code: 404, message: "Not Found")
    • 용도: 케이스에 더 많은 정보를 붙여 유연한 데이터 표현 가능.

원시값은 "고정된 기본값"을, 연관값은 "케이스별 추가 데이터"를 제공한다고 이해하면 됩니다.


0개의 댓글