[Swift/스위프트] 변수와 데이터 타입

DDang·2023년 3월 21일
0

[Swift/스위프트]

목록 보기
2/3
post-thumbnail

변수(Variable)와 상수(Constant)

변수와 상수는 공통적인 요인으로 정의하자면 여러분의 상태 데이터를 저장하는 공간입니다.
여기서 변수와 상수의 차이점으로 구분지어 정의해보겠습니다.

변수는 사전적 의미로 어떤 관계나 범위 안에서 여러 가지 값으로 변할 수 있는 수.
상수는 사전적 의미로 변수의 반대말로 변할 수 없는 수.

그럼 프로그래밍에서의 변수와 상수로 다시 한번 정의해보겠습니다.

변수는 변할 수 있는 값을 가지는 공간.
상수는 변할 수 없는 값을 가지는 공간.

변수와 상수를 선언하는 방법은 아래 순서와 같습니다.
1. 변수는 var 키워드 그리고 상수는 let 키워드로 구분짓습니다.
2. 변수명을 작명하여 이어서 작성합니다.
3. 데이터 타입을 정의하여 변수의 데이터 유형을 지정해줍니다.
4. 데이터 타입에 맞는 초기값을 지정해줍니다.
.
.
.
글로 작성하니 저도 한눈에 와닿지 않는 설명이네요.. 설명글 순서대로 Swift 코드를 작성하여 변수를 선언해보겠습니다.

// 변수 선언 코드 예시
var [변수명]: [데이터 타입]
// 상수 선언 코드 예시
let [상수명]: [데이터 타입]

// 변수 선언 코드
var variableNumber: Int = 0
// 상수 선언 코드
let constantString: String = "상수로 설정한 문자열입니다."

코드상에서 보면 변수와 상수의 차이점을 느낄 수가 없습니다. 그래서 직접 변수와 상수에 각각 값을 다시 부여하여 보겠습니다.

variableNumber = 1
constantString = "과연 문자열이 변경이 될까요?"
// 코드를 Debug해보면 "Cannot assign to value: 'constantString' is a 'let' constant" 에러 메시지 발생

개발자가 상수에 값을 재부여하는 코드를 작성하면 에러 메시지를 표시하며 수정을 요구하게 됩니다.

기본 데이터 타입

위의 코드에서 예시에서 보이는 [데이터 타입] 자리에 Int, String 키워드가 들어간 것을 보실 수 있습니다. 이는 Swift에 정의되어 있는 기본 데이터 타입으로 구조체라는 짧게 정의하자면 구조화된 데이터와 기능으로 구현되어 있습니다. 모든 변수와 상수들은 이 데이터 타입을 바탕으로 System Memory에 할당하여 저장됩니다. 기본 데이터 타입들은 하단 표로 상세히 설명드리겠습니다.

데이터 타입정의샘플 값
Int(Integer)64bit 정수형-9223372036854775808 ~ 9223372036854775807
UInt(Unsigned Integer)부호가 없는 64bit 정수형 (양의 정수)0 ~ 9223372036854775807
Float32bit 부동 소수점1.12345678
Double64bit 부동 소수점1.12345678901234567
Bool(Boolean)참 또는 거짓true / false
Character문자유니코드 문자를 포함한 1자의 문자열
String문자열길이가 정해져 있지 않은 문자열
Any모든 데이터 타입을 포괄하는 키워드-

각각의 데이터 타입은 표현할 수 있는 데이터의 범위 또는 유형이 정해져 있습니다. 다만, 기입되어 있는 샘플 값의 범위까지 모두 외워야 하는 것은 아니고 그저 한계가 정해져 있다는 개념만 이해하면 됩니다.

데이터 타입 하나씩 변수로 선언하는 방식을 코드로 나열해 작성해보겠습니다.

var number: Int = 1
var unsignedNumber: UInt = 100000

var floatNumber: Float = 1.12345678
var doubleNumber: Double = 1.12345678901234567

var isCode: Bool = true

var char: Character = "A"
var string: String = "Apple"

타입 어노테이션(Type Annotation)과 타입 추론(Type Inference)

Swift는 개발 편의성을 위해 변수에 데이터 타입을 명시하지 않아도 시스템이 초기값의 데이터 타입을 추론하여 자동으로 지정해주는 기능을 제공해줍니다. 이 기능을 타입 추론(Type Inference)라 명칭합니다. 단, 초기값을 꼭 지정해야 타입 추론이 정상적으로 사용된다. 그렇지 않다면 당연하게도 추론이 이루어지지 않기에 오류, 에러 메시지가 발생합니다.

var nickname = "DDang"
print(type(of: nickname))	// 출력: String

해당 코드는 데이터 타입을 명시하지 않고 초기값으로 문자열 값을 지정하였고, nickname 변수의 데이터 타입을 출력해보는 코드입니다. String이라는 결과값으로 알 수 있듯, nickname 변수에는 데이터 타입을 명시하지 않았음에도 초기값으로 인한 타입 추론이 이루어져 String 데이터 타입이 자동으로 지정되었다고 파악할 수 있습니다.

다만, 이 편리한 Swift 기능에도 약간의 불편한 점이 있습니다. 코드로 먼저 확인해보고 설명을 이어가겠습니다.

var floatNumber = 1.12345678
var char = "A"

print(type(of: floatNumber))	// 출력: Double
print(type(of: char))			// 출력: String

해당 코드의 결과값에 볼 수 있다시피 개발자가 변수에 Float형으로 의도하고 선언했음에도 타입 추론을 통해서 지정되는 데이터 타입은 Double형이 됩니다. 또한 마찬가지로 변수에 Character형을 의도하고 선언했지만 타입 추론을 거치면 데이터 타입은 String으로 지정되게 됩니다.
이와 같이 초기값이 특정 데이터 유형들 사이에서 정확하게 추론하기 어렵다면 시스템은 가변적이고 더 범위가 넓은 데이터 타입으로 지정하게 됩니다.
► 개발자의 의도와 맞지 않게 데이터 타입이 지정된다면 System Memory를 필요 이상으로 할당하여 낭비하게 된다는 의미가 될 수 있습니다.
► 만약, 이러한 문제점을 일으키고 싶지 않다면 데이터 타입을 꼭 제대로 명시하여 변수를 선언하도록 해야할 것입니다. [타입 어노테이션(Type Annotation)]

이번 문서에선 Swift의 기본이 되는 변수와 데이터 타입에 대해 집중적으로 다뤘습니다. 정상적으로 선언된 변수들은 연산자, 내부 함수 등으로 가공, 사용되어 사용자들에게 정확한 데이터를 전달됩니다.

데이터는 쉽게 이해할 수 있어야 하며, 의미가 불분명하여 발생하는 혼란을 최소화해야 한다. - 데이터 관리 원칙 중 이해성

profile
Pursuing to Develop life

0개의 댓글