Swift/문법

앱개발 용어 정리(2) - 자료형, 변수와 상수

yurim-dev 2024. 2. 7. 14:43

1. 자료형 (Data type) 

자료형은 프로그램에서 표현하고 저장하는 데이터 유형이다.

Swift는 데이터 타입에 엄격한 언어이므로, 서로 다른 데이터 타입 간의 자료 교환이 까다롭다.

Swift에서 선언된 변수와 상수는 컴파일 단계에서 데이터 타입이 미리 정의되어 있어야 하고,

일단 변수의 데이터 타입이 정의되면 다른 타입으로 변경할 수 없다.

컴파일러는 타입에 맞지 않는 데이터가 변수에 대입되는 것을 사전에 차단하여 안정성을 높일 수 있다.

 

 

1-1. 숫자형 (numeric types)

  • Int : 정수 타입. 64비트 정수형 (signed integers)
  • UInt : 양의 정수 타입(0 포함). 64비트 양의 정수형 (unsigned integers)
  • Float : 실수 타입. 32비트 부동 소수형
  • Double : 실수 타입. 64비트 부동 소수형
큰숫자는 "_" 를 써서 읽기 쉽게 숫자를 표현할수 있음
var money = 2_000_000
var price = 1000200

 

 

1-2. 문자열 (String Types)

  • Character : 유니코드 문자 한 개. 작은따옴표 사용. / e.g., 'A'
  • String : character의 연속체. 큰따옴표 사용. / e.g., "Hello, Swift!"

 

* 참고 - String Interpolation

데이터를 문자열로 표현할 수 있다.  \(변수) 로 표현.

var height = 180
var text = "his height is \(height) "
// his height is 180

 

1-3. 불형 (Boolean type)

  • Bool : 불리언 값을 나타냄 (True or False)

 

 

1-4. 컬렉션 타입 (Collection Type)

  • 배열 (array) : 같은 자료형으로 된 원소의 집합. 순서 있음.
더보기

참고: 빈 어레이(empty array) 선언하는 방법 두가지

1. Type annotation

  var 변수명: [원소의 data type] = []   => var a: [Int] = [] 

2. Type annotation 없이

 변수명 = [원소의 data type]()   =>  b = [Int]() 

 

  • 사전 (Dictionary) : Key-Value 쌍. 순서 없음.
더보기

비어있는 딕셔너리 초기화 방법 2가지

1. Type annotation

  var 변수명: [data type : data dype] = [:]   =>   var emptyDic: [String : Any] = [:] 

2. Type annotation 없이

 변수명 = [data type : data dype]()  =>  emptyDic = [String : Any]() 

 

  • 집합 (Set) : 중복이 없고 순서를 가지지 않는 객체의 집합 (*Type annotation 필수)
더보기

1. Type annotation

일반 :  var 변수명: Set<data type> = [2, 3, 5, 7]   

초기화 :   var 변수명: Set<data type> = []  

 

2. Type annotation 없이 (단, Set임을 명시하고 괄호로 묶어줘야함)

일반 :  var 변수명 = Set<data type>([2, 3, 5, 7])   

초기화 :  변수명 = Set<data type>()  

 

1-5. Compound Types - 튜플

  • 튜플(Tuple) : 다른 자료형으로 된 여러 값들의 집합. 세부 데이터 접근시, 포지션 또는 이름으로 접근 가능.
var phone = (os: "iOS", model: "iPhone13", version: 13)
phone.0 // -> "iOS"
phone.2 // -> 13

 

1-6. Optional Types

  • Optional : 있거나 없을 수 있는 값
  • ex)  Int("35") // Optional(35)  Int("hello") // nil 

 

1-7. 함수형 타입 (Function Type)

  • Function : 결과값이 나오는 실행 가능한 코드.

 

1-8. Advanced Types

  • Enum(열거형) : 연관된 값들의 집합. 특정 타입들을 표시할 때 사용하기 좋음
더보기

<Enum 예제>

1) 요일

// 요일
enum WeekDay {
    case mon
    case tue
    case wed
    case thu
    case fri
}
var today: WeekDay = .mon

 

2) 연관값(associated value)를 가지고 있는 형태도 표현 가능

// 미디어타입과 파일 확장자
enum MediaType {
	case audio(String)
    case video(String)
}
var mp3: MediaType = .audio("mp3")
var h264: MediaType = .video("h264")

 

3) value를 할당해서 표시해야할 때도 있음.

- Int 타입의 경우, 위의 case를 0부터 시작

- String 의 경우, case 이름을 따르거나, 새로 지정할 수 있음.

// Int 이용하는 경우
enum MasterLevel: Int {
	case beginner
	case intermediate
	case professional
}

var beginner: MasterLevel = .beginner // -> beginner
beginner.rawValue // -> 0
let pro = MasterLevel(rawValue: 2) // -> professional
let otherLevel = MasterLevel(rawValue: 5) // -> nil
// String 이용하는 경우
enum Direction: String {
    case up
    case down = "ddd" // 실제로 사용하는 raw value와 구현되는 case 이름이 다른 경우에는 rawvalue 변경
}

var dir: Direction = .down // -> down
dir.rawValue // "ddd"

var u: Direction = .up // -> .up
u.rawValue // -> "up"  <- rawValue가 없으면 case 이름을 rawValue로 씀

let up = Direction(rawValue: "up") // -> up
let down = Direction(rawValue: "ddd") // -> down
let otherDirection = Direction(rawValue: "left") // -> nil

 

  • Struct : 속성 및 메소드가 있는 사용자 정의 데이터 유형
  • Class : 상속 및 고급 기능이 있는 참조 유형
  • Protocol : 채택할 유형에 대한 방법 및 속성의 청사진

 

1-9. Closures

  • Closure : 변수로 사용될 수 있는 함수. 변수에 할당하고, 함수에 인수로 전달하고, 함수에서 반환할 수 있는 자체 코드 블록.

 

1-10. Custom Types

  • Custom Classes, Structures, and Enums : 속성 및 동작을 캡슐화하는 사용자 정의 유형

 


2. 변수와 상수

2-1. 변수 (Variable)

- 데이터를 저장하고 이후에 변경할 수 있는 저장 공간.

- 'var' 키워드를 사용하여 선언한다.

var welcome = "Hello Swift!"

 

 

2-2. 상수 (Constant)

- 한 번 값이 저장되면 변경할 수 없는 저장 공간.

- 'let' 키워드를 사용하여 선언한다.

let leeo = "My name is Leeo"
값이 바뀔수 있는 변수보다, 상수를 이용하는 것이 더 안전해서, 상수 사용을 권장한다.

 

 

*참고 - Type Annotation

  • swift 는 변수 설정시 타입을 같이 명시 할수 있음.  ex) var a: String = "happy"
  • swift 는 변수 설정시 타입 없이 명시 할수 있음   ex) var b = "happy" 
    • 이때는 시스템에 의해서 타입 추론 (type inference 를 함)