이전에 Playground 실행을 진행해봤다.
자 그럼 이제 상수와 변수에 대해서 한번 알아보도록 하자.
상수와 변수
- 상수 : 변하지 않는 값. ( 일정한 값 )
- 상수 선언 : let
- 변수 : 변하는 값. ( 유동적인 값 )
- 변수 선언 : var
이라고 이해하면 편하다. 즉, 상수와 변수는 각각의 특정 공간에 값을 넣은 이후 해당 값을 변경할 수 있으면 변수, 변경할 수 없도록 막아두고 싶으면 상수로 선언을 하면 된다.
상수로 만들고 싶으면 let 을 활용하고, 변수로 만들고 싶으면 var 를 선언하면 된다.
그럼 이제 플레이그라운드를 활용해서 만들어 보도록 하자.
let 과 var 를 선언하였다. number2라는 이름의 Integer 즉, Int ( 숫자형 ) 를 선언하였고, number3라는 200 Int ( 숫자형 )을 선언하였다.
대부분의 개발자들은 알겠지만, 개발을 모르는 시작하는 분들을 위해서 상세한 설명을 간단히 해보자.
해당 내용을 모르는 분들이 있을 수도 있기 때문에 그림을 대충 만들어봤다. 우선적으로 let 은 위에서 배운 것과 같이 상수로 선언한 내용은 이해를 하고 있을 것이다.
그럼 number2 는 무엇이냐. 일종의 박스라고 생각하면 된다. number2라는 박스에 숫자 100을 넣었다. 라고 생각하면 편할 듯 싶다.
자 그럼 윗부분의 내용을 다 한번 이해를 해보자.
let number2 : Int = 100
- number2 라는 저장공간 ( 박스 ) 를 만든다.
- 이 박스는 let을 선언했음으로 상수이다. ( 박스에 들어간 값은 변경이 안됨으로 다른 값이 들어올 수 없다. )
- number2 라는 박스는 숫자형태만이 들어갈 수 있다.
- number2 라는 박스에 숫자 100을 넣었다.
이렇게 이해를 하면 상당히 쉬울 것으로 판단된다.
그럼 var number3 : Int = 200 은 위의 내용에서 박스에 다른 값이 들어갈 수 있다. 라고 생각하면 될 것이다.
자 그럼 let으로 선언한 박스에 다른 값을 넣어보도록 하자.
이렇게 에러가 발생한다. 에러의 내용을 확인해보면 Cannot assign to value : 'number2' is a 'let' constant
즉, 내용을 확인해보면 값을 넣을 수 없음. number2는 let으로 선언되어있음. 이런 내용이다. let은 한번 선언하면 값을 변경할 수 없음으로 발생하는 에러로 추후에 코딩할 때에 많이 사용할수 있음으로 참고삼아 알면 좋을 것 같다.
자 그럼 이번에는 var 즉, 변수로 선언한 number3에 값을 대입해보자.
해당 부분은 에러가 발생하지 않는다. 왜? 위에서 언급했다 싶이 var는 변수로 인하여 박스에 값을 넣었다 뺐다를 진행 할 수 있기 때문이다.
기본 데이터 타입에 대해서 언급 하기 전에 해당 변수와 상수를 어떻게 활용하는지 대략적인 예시를 먼저 얘기 해보자.
간단한 예시
- SSD 기본 용량 : 225 GB / 현재 사용량 130 GB
- 이때에 기본용량은 불변으로 인하여 let으로 선언을 하고, 현재 사용량은 가변으로 인하여 var로 선언한다.
- 롤러코스터 제한 키 : 130cm / 키를 측정하는 어린이들의 키 xxx cm
- 롤러코스터 제한 키는 불변으로 인하여 let으로 선언을 하고, 키를 측정하는 어린이들의 키는 계속해서 바뀜으로 var로 선언.
간단한 예시까지 들어봤다.
내가 지금 글을 작성하는 이 순간에도... 이렇게까지 상세하게 해야하나... 싶지만... 요즘 학생들은 c언어를 안하고 바로 파이썬, 자바, 스위프트 등등... 바로 다른 언어를 통해서 프로그래밍을 하는 학생들이 많다고 하기에... 작성을 해봤다.
뭐 한번 언급한 내용은 이후에는 상세하게 언급하지 않을 부분으로 기존에 아는 사람들은 넘겨도 충분히 가능할 것 같다.
변수, 상수의 개념을 알아봤으니 이제 Swift의 기본 데이터 타입에 대해서 알아보자.
다른 프로그램 언어들과 매우 유사하다. 이쯤되면 기존에 다른 언어 개발자인 사람들은 그냥 이 포스팅을 넘겨도 될 정도라고 판단이 된다..
하지만 주변 사람들에게 스위프트의 언어를 알려줄 겸 블로그도 할 겸.. 해서 포스팅을 진행함으로.. 천천히 상세하게 진행을 해보자.
기본 데이터 타입
- Int : 64bit 정수형. ( Int8 / Int16 / Int32 / Int64 )
- UInt : 부호가 없는 64bit 정수형
- Float : 32bit 부동 소수점
- Double : 64bit 부동 소수점
- Bool : true, false 값 ( 참 / 거짓 )
- Character : 문자
- String : 문자열
- Any : 모든 타입을 지칭하는 키워드
우선 기본 데이터 타입에 대해서 설명을 해봤다.
그럼 하나하나 확인을 진행해보도록 하자.
Int의 경우에는 8비트, 16비트, 32비트, 64비트 이렇게 나누어진다.
비트의 개념까지 설명을 하려면.. 이 포스팅이 상당히 길어지기 때문에 비트의 개념은 생략하도록 하겠다..
Int8로 선언을 했을 경우에는 Integer literal '1000' overflows when.. 에러가 발생한다.
즉, 이말은 숫자가 넘어갔다는 의미이다.
Int8의 경우에는 부호를 포함인 2의 8승까지의 숫자까지만 가능하다.
글로만 설명을 하면 이해가 안될 수도 있기 때문에 그럼 이제 표로 만들어서 진행을 한번 해보도록 하자.
데이터 타입 | 범위 |
Int8 | - 128 ~ 127 |
Int16 | - 32,768 ~ 32,767 |
Int32 | - 2,147,483,648 ~ 2,147,483,647 |
Int64 | - 9,223,372,036,854,775,808 ~ 9,233,372,036,854,775,807 |
기본적인 Int의 범위는 이렇게 확인이 된다. 즉, Int의 경우에는 - 범위까지 포함을 하기 때문에 2의 8승 즉, 256의 숫자를 표현 가능하며,
이에 따라 - 인 음수 범위도 표현을 하기때문에 -128 ~ 127 까지의 총 256가지의 숫자를 표현할 수 있는 내용이다.
그럼 이제 현재 에러가 나는 부분을 Int16으로 변경을 해보자.
숫자가 1000 이 넘었는데도 Int16은 에러가 발생하지 않고, 정상적으로 표기가 되는 부분이다.
이처럼 Int16 또는 Int8을 활용할 경우에는 숫자의 범위에도 제한을 둘 수 있는 부분이다.
하지만 보통 프로그램 개발하면서는 이렇게 상세하게 사용하지 않기 때문에.. 그냥 Int만 사용한다고 생각하면 된다.
그럼 이제 UInt에 대해서 알아보자.
이부분은 Int와 동일하지만 UInt는 쉽게 말해 Unsigned Int이다.
UInt는 - 인 음수 표현을 진행하지 않는다.
그럼 UInt에 - 음수 표현을 진행하면 어떤 에러가 나는지 확인해보도록 하자.
이렇게 에러가 표기가 된다. 에러의 내용은 Negative Integer '-1200' overflows... 이다.
즉, 음수 -1200이 오버플로우 되었다는 내용으로, UInt에는 - 인 음수 표현이 사용이 불가능 하다.
그럼 위에서 만들었다 싶이 UInt도 표로 확인을 해보도록 하자.
데이터 타입 | 범위 |
UInt8 | 0 ~ 255 |
UInt16 | 0 ~ 65,535 |
UInt32 | 0 ~ 4,294,967,295 |
UInt64 | 0 ~ 18,446,744,073,709,551,615 |
UInt는 양수만을 표기함으로 인하여 숫자의 범위를 더 넓게 쓸 수도 있다는 부분을 참고하면 될것 같다.
보통 프로그래밍 개발하면서 쓸일이 거의 없지만, 은행권 같은 경우에는 사용함으로 참고삼아 알면 도움이 될 것 같다.
그럼 이제 빠르게 Float, Double에 대해서 확인을 해보자.
Float 는 32bit의 부동 소수점을 사용할 수 있고, Double은 64bit의 부동소수점을 확인할 수 있다.
그럼 이제 소스를 통해서 확인을 진행해보도록 하자.
이렇게 소숫점 자리로 숫자를 표현할 수 있다.
Int는 소수점을 사용할 수 없음으로 인하여 에러가 발생함으로 정교한 소숫점 단위의 숫자를 사용하려면, Float나 Double을 사용해야한다.
참고로 소수점이 아닌 숫자도 Float나 Double에 사용할 수 있다.
기본적으로 1을 입력할 경우에 1.0으로 인식을 하기 때문이다.
이렇게 1.0으로 인식을 하기때문에 일반 양수나 음수를 사용해도 무리가 없다는 부분을 알고 있으면 된다.
위의 소스에서 print는 결과 물을 아래의 console창에 표기를 하라는 내용이다. 이부분에 대해서는 추후에 또 포스팅을 진행할 예정이다.
Float와 Double도 위의 Int나 UInt처럼 bit를 쪼개서 사용할 수 있다. Float32, Double16 이런식으로 사용이 가능함으로, 메모리 확보가 염려된다면 작업을 이렇게 해도 되지만.. 요즘의 경우에는 메모리가 넘쳐나기 때문에.. 굳이 이렇게 작업을 하지 않는다.
하지만 알아두면 나쁠게 없기 때문에.. 참고삼아 내용을 아는 것도 상당히 좋을 것 같다.
그럼 이제 Bool으로 넘어가자
Bool은 참과 거짓을 표기하는 변수이다. true / false 로 값을 변환하며, 조건문에 많이 쓰이는 데이터 타입이다.
이렇게 참과 거짓을 넣어놓고 사용할 수 있다.
조건문을 추후에 다룰 때에 보다 더 자세히 작성할 내용으로 우선 이정도만 알아도 충분할 것 같다.
Character와 String은 문자와 문자열을 담는 데이터 타입이다.
즉, Character는 문자 1개만 담을 수 있고, 문자열을 담을 경우에는 String을 사용하면 된다.
위의 String은 에러가 표기되지 않았지만 Character는 에러가 표기가 되었다.
위에서 언급했다 싶이 Character의 경우에는 "A" 하나만 사용하거나, 이모티콘 하나만을 사용하거나 참/거짓으로 조건을 판단하지 않고, "A", "B", "C" 등의 각각의 경우에 따라 사용할때에 사용해도 된다.
요즘은 어차피 메모리가 많기 때문에 굳이 Chracter 1개만을 사용하지 않지만, 예전에는 다 사용을 많이 했다는 부분을 참고하면 될 것 같다.
그럼 이제 Any에 대해서 알아보자.
Any는 어떠한 타입도 다 넣을 수 있는 데이터 타입이라고 알고 있으면 된다.
그럼 기존에 설정한 데이터 타입을 다 Any로 바꿔보자.
Any로 설정할 경우에 이처럼 모든 데이터 값을 다 사용할 수 있다.
추가적으로 변수의 데이터 타입을 미리 설정을 안해도
아래의 number / number8 / number9 와 같이 자동으로 데이터 타입을 설정을 해준다.
친절한 Swift에서 자동으로 설정을 해주지만, 이후에 다른 데이터 타입의 값이 들어와야 하는 경우에는 값을 바꿔줘야하는 경우에 발생한다.
이처럼 number는 기존에 데이터 타입을 설정하지 않고 "String" 이라는 값을 넣어줬지만, 이후에 양수인 1을 넣을 경우에
기존에 데이터 타입이 String이기 때문에 1은 넣을 수 없다는 에러가 발생한다.
그럼 반대로 Any로 설정한 number 7에 숫자 1을 넣어보자.
이렇게 number7은 가능하다. 왜? Any로 모든 데이터 타입을 받아들 일 수 있도록 만들어 놨기 때문이다.
자 그럼 여기서 드는 생각이 있다. 그럼 모든 변수를 Any로 설정하면 되는거 아니냐. 하는 의문이 드는데..
모든 데이터 타입을 Any로 설정하는 경우에는 메모리를 상당히 잡아먹고, 나중에 디버깅( 오류 찾기 )을 할 때에도 찾기 힘들고 번거롭기 때문에 사용을 잘 하지 않는다.
특히 지정된 타입을 모를 경우에는 나중에 복잡한 프로그램을 만들었을 때에 상당히 고생을 할 수 도 있다.
참고삼아 진행하면 될것 같다.
자 그럼 오늘은 상수와 변수 / 데이터 타입에 대해서 알아봤다.
위에서 언급을 한 내용대로 기존에 개발자의 경우에는 이미 다 아는 내용일 수도 있지만 Swift를 처음 접하는 사람도 있을 수도 있고,
이미 까먹었던 사람들이 있을 수도 있기 때문에 자세하게 언급해봤다.
처음 하는 사람들은 매우 다양하게 이것저것 해서 테스트를 진행해보는 것을 추천드린다.
항상 말하지만 따라하는것 보다 새롭게 이것저것 창조해가면서 하는게 공부에 상당한 도움이 되기 때문에...
'APPLE > Swift 문법' 카테고리의 다른 글
[ 기초 문법 ] 옵셔널 (0) | 2022.08.08 |
---|---|
[기초 문법] 반복문 (0) | 2022.08.05 |
[기초 문법] If문과 Switch 구문 (0) | 2022.08.05 |
[기초 문법] 함수 ( func ) (0) | 2022.08.04 |
[기초 문법] 컬렉션 타입 (0) | 2022.08.04 |