모바일 프로그래밍/iOS기초

[iOS - Swift기초] 스위프트의 변수(Variable)와 자료형(Type) (정리중)

Dannian 2020. 12. 28. 22:14
반응형

이전 포스트에서 Swift가 뭔지 일단은 정리를 했습니다.

보통 언어를 (처음 또는 새로운 언어를)공부하게 되면 기본적으로 변수, 상수, 자료형(타입, 데이터 타입)을 가장 먼저 배우게 됩니다. 이번엔 변수와 자료형에 대해서 정리해보겠습니다.

(해당 포스트는 지속적으로 정리중이기 때문에 내용이 수정 될 수 있습니다!)

 

1. 변수(Variable)

사전적 의미 그대로 변수는 변경이 가능한 값을 의미합니다. 

만약 이 글을 보고 계신 분 중에서 Java를 배우신 분이라면 다음과 같이 사용하셨을겁니다.

public class JavaExample {
	public static void main(String[] args) {
		int number1; // int형 변수인 number1선언
		int number2 = 10; // int형 변수 number2를 선언하고, 10으로 초기화(저장)
	}
}

(아 이거 탭으로 하니까 예쁘게 안나오네요 어떻게 하는지 방법 아시는분 알려주시면 감사하겠습니다 ㅠㅠㅠ)

Swift에서는 다음과 같이 사용 할 수 있습니다.

//이 예제는 플레이 그라운드 기준입니다.
var number1 = 10
var number2 : Int
number2 = 20
var str = "Swift Language"

print("number1 is : \(number1)\nnumber2 is : \(number2)\nstr is : \(str)")
/*
결과 : 
number1 is : 10
number2 is : 20
str is : Swift Language
*/

(만약 여기서 number2 = 20부분이 없다면 어떻게 될까요? 해당 포스트에 정리합니다. 옵셔널 아직 정리가 덜 되었기 때문에, 정리가 되는대로 공개로 바꾸고 링크 걸겠습니다.)

먼저 변수의 이름은 number1, number2, str입니다. 이 변수 이름은 다른 것과 구별하기 위해 유일(Unique)해야 합니다. 이런 고유 이름을 식별자(Identifier)라고 합니다. 따라서 변수명은 중복되지 않도록 해야합니다.

각 변수에 값을 넣는 것은 등호(=)를 이용합니다. 등호의 뒤에 넣고자 하는 데이터를 붙이면 변수의 값(value)이 됩니다. 위의 예제에서 값은 각각 10과 20, "Swift Language"입니다.

 

2. 자료형(Type)

2-1. 자료형 기본

바로 위의 예제에서 각 변수의 자료형은 무엇인지 알아보겠습니다.

print("""
    data type check :: 
    number1 is : \(type(of: number1))
    number2 is : \(type(of: number2))
    str is : \(type(of: str))
    """)
/*
결과 : 
data type check :: 
number1 is : Int
number2 is : Int
str is : String
*/

결과에 표시된 Int와 String이 자료형입니다.

number2는 직접 Int라고 자료형을 명시했지만, number1과 str의 경우 자료형을 명시하지 않았음에도 의도하던 자료형이 출력되었는데, Swift는 자료형이 명시되어있지 않은 경우, 변수에 할당된 값에 의해서 자료형이 결정이 됩니다. 이것을 타입 추론(Type Inference)라고 합니다.

다음과 같은 코드는 어떻게 될까요?

var str = "Swift Language"
print("str is : \(str)")
str = 200
print("str value: \(str)")

이 경우, 다음과 같은 에러가 반환됩니다.

/*
error: cannot assign value of type 'Int' to type 'String'
str = 200
      ^~
*/

처음 str 변수에 "Swift Language"라는 값이 할당 될 때 이미 str변수의 자료형은 String이 된 것이고, 이후 str 변수에 200이라는 Int값을 넣으려 했기 때문에 위의 에러가 발생하는 것입니다.

즉, 한 번 선언된 자료형은 변경 할 수 없습니다. 다만 예외가 있는데,

var str : Any = "Swift Language"
print("str is : \(str) :: \(type(of: str))")
str = 200
print("str change value : \(str) :: \(type(of: str))")
/*
결과 :
str is : Swift Language :: String
str change value : 200 :: Int
*/

위와 같이 Any라는 type을 지정하면 중간에 다른 타입의 값을 넣어서 사용 할 수 있습니다.

이 부분은 나중에 형 변환(type casting)을 정리 할 때 링크를 걸어두겠습니다.

 

기본적으로 Swift에서 제공되는 데이터 타입은 Int, UInt, Float, Double, Bool, Character, String, Optional등이 있습니다.

(Optional의 경우 따로 정리해서 링크를 걸어두겠습니다.)

아래 표는 일반적으로 사용하는 데이터 타입의 정리입니다.

정수 Int 정수 8비트 정수 : Int8, 16비트 정수 : Int16,
32비트 정수 : Int32, 64비트 정수 : Int64
각 비트별로 표현 가능한 정수 자릿수의 크기가 다르며,
.min, .max를 통해 표현 가능 정수 범위 확인 가능.
UInt 음수가 아닌 정수
부동소수 Float 부동소수 32비트 부동소수 소수점 6자리 까지
Double 64비트 부동소수 소수점 15자리 까지
문자 Character 하나의 문자
ex) "C"
큰 따옴표로 둘러서 표현 유니코드 문자를 사용하기 때문에 특수기호도 사용 할 수 있다.
문자열 String 문자가 순서대로 들어있는 글자
ex) "Character"
+연산자, == 비교 등이 가능.
이진 Bool true 또는 false 참고 : false, true대신 0, 1을 넣어서 사용할 수 없다. 1bit(0 or 1)
옵셔널 Optional 값이 있을 수도 있고 없을 수도 있는 변수 ex) var Str : String? = nil
ex2) var nums : [Int]? = nil
-

 

2-2. 그 외의 자료형

(자료 추가 및 상세 정리 중. 일부 위에 정리)

  • literal(숫자 원래의 값) : 코드에서 고정된 값으로 표현되는 데이터 그 자체
    • Numeric Literal(숫자 리터럴)
    • Floating-point Literal(부동 소수점 리터럴)
    • String Literal(문자열 리터럴)
    • Character Literal(문자 리터럴)
    • Boolean Literal(불리언 리터럴)
  • Typealias : 기존 타입의 이름을 참조하여 원하는 이름으로 사용하고 싶을 때 사용
  • Array<Element> : 
  • Dictionary<Key, Value> : 
  • Optional<Wrapped> : 
  • Any : 
  • Tuple : 

 

2-3. 타입 캐스팅

 

 

 

 

위의 내용들을 토대로 한 번 정리하겠습니다.

var 변수명 : 자료형 = 값 // 변수 선언, 자료형 명시, 값 할당(초기화)

var 변수명 = 값 // 변수 선언, 값 할당(초기화), 값에 따라서 자료형 할당됨

var 변수명 : 자료형 // 변수 선언, 자료형 명시
변수명 = 값 // 변수에 값을 할당(초기화)

var 변수명 //변수 선언
변수명 = 값 //선언되었던 변수에 값 할당(초기화), 이 때 자료형 할당.
//아래 두 케이스의 경우, 초기화 시켜주지 않은 상태로 이용할 경우 error반환

이런 식으로 사용 할 수 있는 것이 변수(variable)입니다.

자료형(type)은 변수(variable)를 사용할 때 값(value)를 저장할 크기를 미리 정하기 위해서 사용합니다.

자주 사용하는 자료형(type)에는 Int, UInt, Float, Double, Character, String, Bool, Optional등이 있습니다.

 

 

 

Dannian의 블로그입니다.

 

 

본 포스팅은 학습 또는 정리를 목적으로 쓰인 글입니다.

내용중 틀린 것이 있다면 댓글로 알려주시면 감사하겠습니다!

반응형