[Swift] 데이터 타입

Jongdroid·2022년 10월 4일
3

Swift

목록 보기
1/2
post-thumbnail

1. 컴퓨터의 생각

프로그래밍 언어컴퓨터 기본지식과 관련된 배경 지식 없이 학습을 시작하면 쉽게 벌써부터 포기하고 싶은 생각이 든다.
그 이유가 뭘까?🤔 고민해봤다. 그리고 그 이유를 간략하게 축약해봤다.

  • 컴퓨터의 사고와 인간의 사고는 다르다.
  • 컴퓨터는 센스가 없다. (이정도만 하면 알아서 해줄 것 같은데... 하면 파업 스킬을 시전해버린다.)
  • 컴퓨터는 우리 말 (소스코드)를 이해못한다. 0과 1밖에 모르는 바보(?)다.

여기서 가장 핵심은 컴퓨터는 딱 시킨것만 한다. 는 것이다.


더 자세한 이해를 돕고자 준비한 영상이 있다.

아버지가 아들에게 컴퓨터가 일하는 방식을 가르쳐주는 내용인데, 이 영상을 보면서 몇 번을 웃은지 모르겠다.😂
자세한 내용은 생략하고, 이쯤에서 영상을 소개하는게 좋겠다.
(자식이 생기면 꼭 아이와 해봐야겠다!!)


2. 데이터의 생성과 할당

  • 데이터 타입을 통해 우리가 이해할 수 있는 형태의 데이터를 저장한다.
(예제)
let userName: String = "jongdroid"
(데이터 생성만)
var userName2: String
(데이터 할당)
userName2 = "swift"

해당 코드를 간략히 짚어보자 !
let = 1 / userName = 2 / String = 3 / "jongdroid" = 4로 표현하겠다.

  • (1) 데이터 형태 지정
    데이터 값을 바꿀 것이라면 var, 바꾸지 않으면 let 키워드를 사용한다.
  • (2) 우리가 부르기로 한 데이터의 이름이다.
    새우깡 하면 새우깡안에 든 과자봉지가 생각나듯이 이 이름하면 유추할 수 있는 내용으로 작명을 하는 것이 좋다.
  • (3) 입력할 데이터의 타입 지정
    문자열을 담기 위해 String을 사용했으며 어떤 데이터 타입이 있는지는 곧 다뤄보자!

2-1 정수형 데이터 타입

  • 정수(소수점 이하 자리가 없는 수)를 저장하기 위해 사용한다.
  • Int 키워드를 사용
  • 정수의 종류
    • 부호 있는 정수(signed) : 양수, 음수, 0 값을 저장
    • 부호 없는 정수(unsigned) : 정수, 양수, 0만을 저장
      (Int8.16.32.64 | UInt8,16,32,64가 존재한다. *사진은 8비트 기준이다.)

이런 결과가 나오는 이유

signed 정수의 경우 양수뿐만 아니라 음수까지도 그 범위를 허용한다.
하지만 unsigned 정수의 경우 음수까지 사용하려고 했던 경우를 줄이고 양수를 확장시켜준다.

  • 즉 불필요한 공간을 사용하지 않겠다는 것이다.

나는 이런 생각을 해봤다.

양수 1만 사용할건데, 64비트의 정수형 데이터 타입을 사용하면 공간을 낭비하지 않을까?
Int8 로 선언하는게 메모리를 절약하지 않을까?

애플의 권장 사항

  • 애플은 사용자 컴퓨터 사양에 따라 자동으로 가장 최적화된 비트를 찾아준다.
  • 작은 크기를 일부러 찾아쓰기 보다는 Int만으로 사용하는 것을 기본 가이드로 제시하고 있다.

2-2 실수형 데이터 타입(부동소수점)

  • 소수점이 있는 값을 저장하는 타입
  • Float, Double 두 가지 키워드가 존재한다.
    • Double : 최대 64비트의 부동소수점 수 저장
    • Float : 최대 32비트의 부동소수점 수 저장(적어도 6자리까지 표현)
  • var someFloat: Float = 3 // 3.0으로 인식한다.
let someFloat: Float = 3.0
var someDouble: Double = 3.14

// someDouble = someFloat // 컴파일 에러 발생

삐익. 오류 발생

  • Swift is Type Safe Language
    즉 데이터 타입이 선언되고 값이 할당된 이후 절대로 다른 타입의 값을 넣을 수 없다.

2-3 불리언 데이터 타입

  • 참/거짓을 처리하는 목적의 데이터 타입
  • Bool 키워드를 사용하며 true or false를 저장할 수 있다.
  • 0과 1 할당 불가!!!

2-4 문자 데이터 타입

  • 문자, 숫자, 문장 부호, 기호와 같은 하나의 문자를 저장한다.
  • Character 키워드를 사용한다.
  • 큰 따옴표를 사용한다. (자바와 다른점)
let myChar: Character = "🙂"

2-5 문자열 데이터 타입

  • 단어나 문장을 구성하는 일련의 문자들
  • 큰 따옴표를 사용한다.
  • String 키워드를 사용한다.
  • 저장 메커니즘뿐만 아니라, 문자열 검색/매칭/연결/수정 등의 편집 기능을 가지고 있다.
  • 문자열 보간 개념을 이용해 변수, 상수, 표현식, 함수 호출을 조합하여 구성할 수도 있다.
let foodName: String = "볶음밥"

문자열 보간법이란?

  • 문자열에 여러 변수를 포함하여 표현하고 싶을 때 \() 와 같은 키워드를 사용합니다.
let userAge: Int = 20
print("00님의 나이는 \(userAge) 입니다")

3. 변수와 상수

3-1 변수

  • 애플리케이션이 사용하는 데이터를 저장하기 위해 예약된 컴퓨터 메모리 내의 위치
  • 변수는 프로그래머에 의해 이름이 주어지고 값이 할당 된다.(상수도 동일)
  • 변수에 할당된 값을 변경할 수 있다.
  • var(variable)키워드를 사용한다.
var userAge: Int = 28
userAge = 35

3-2 상수

  • 상수도 변수처럼 데이터 값을 저장하기 위해 메모리 내의 위치에 이름을 명명한다
  • 한번 할당되면 그 값을 바꾸지 못한다.
  • let 키워드를 사용한다.
  • 앱 코드내의 여러 곳에서 어떤 상수를 사용하고 있고 그 값을 전체적으로 변경해야 하는 경우, 상수 선언부에서 한번 만 수정하면 모두 적용된다.
let userName: String = "Jongdroid"
// userName = "Swift" // 에러 발생

3-3 변수와 상수 볶음

  • 변수와 상수를 함께 혼용해서 사용할때 혼란이 올 수 있다. (나만 그런가? 🥲)
let sum: Int
var num1: Int = 500
var num2: Int = 500
sum = num1 + num2
print(sum) // 1000

num1 = 1000
num2 = 1000
sum = num1 + num2
print(sum) // 에러 발생

왜 에러가 발생할까?

  • 4번째 라인에서 sum은 이미 num1 + num2로 연산되어 값을 할당받았다.
    이후에 새로운 연산을 통해 let으로 정한 sum의 값은 당연히 바꿀 수 없다.
    sum을 var로 고친다면 에러를 잡을 수 있을 것이다!

4. 타입 선언과 타입 추론

Swift 타입의 성격

  • Swift는 데이터 타입이 안전한 프로그래밍 언어에 속한다.
    • 변수의 데이터 타입이 한번 정해지면 그 변수는 다른 타입의 데이터를 저장할 수 없다.
  • 상수나 변수의 타입을 지정하는 방법은 타입선언/타입추론이 있다.

4-1 타입 선언

  • 변수나 상수 이름 뒤에 타입을 명시한다.
  • 나와 같은 초보 프로그래머 일수록 적극 권장하는 방식이다.
let myPhoneName: String = "Iphone-11pro"

4-2 타입 추론

  • 선언부에서 타입 선언을 하지 않으면 Swift 컴파일러는 타입 추론을 사용하여 변수 또는 상수의 타입을 지정한다.
  • 컴파일러가 타입 추론을 사용하면 변수 또는 상수가 초기화되는 시점에 할당된 값의 타입이 무엇인지를 판단하여 지정한다.

주의할 것

  • 타입 선언 없이 상수를 선언하게 될 경우 반드시 선언 시점에 값을 할당해야 한다.
  • 타입 선언을 사용했다면 나중에 할당해도 상관없다.
var myName // 에러
let myName2 // 에러
let myName3: String
myName3 = "hoonjong"
profile
만드는 사람이 수고하면 쓰는 사람이 편하고 만드는 사람이 편하면 쓰는 사람이 수고롭다.

0개의 댓글