[Swift 문법] 1. 상수와 변수

JJOOEE__·2024년 4월 23일
2

Swift 문법

목록 보기
1/13
post-thumbnail
2024.06.13 수정

🍎 1. 상수와 변수

  • 사실 변수와 상수의 차이점은 이름에서 그대로 나타난다.
  • 변수는 변할 수 있는 값이고 상수는 변할 수 없는 값이다.
  • 변수는 var 키워드를 통해 선언되고, 상수는 let 키워드를 통해 선언된다.

🍏 1. 상수(let)

  • 변하지 않는 일정값

  • 값에 이름을 부여 하는 것
    ex) 디바이스의 전체 용량 표시 사용 가능

    let 상수명 : 데이터타입 = 값

상수에 한번 값을 부여 할 수 있으며, 2번이상 대입하게 되면 오류가 발생함, 여러번 값을 대입하는 경우 변수 사용해야함

🍏 2. 변수(var)

  • 스위프트의 변수란 프로그램에서 데이터를 저장하는 공간을 의미
    • ex) 현재 사용가능한 용량을 표시할 때 사용 가능
  • 상수와 달리 변수 생성 후 다시 값을 대입하는 것이 가능함
    (var 안의 값(value)는 초기 설정값을 언제든지 수정하고 초기화할 수 있다.

◻️ 1) 스위프트 변수 문법

var name: Type = value 

변수는 이름, 형, 메모리 주소, 값, 영역 등으로 특성을 구분

  • 이름(nmae)은 말 그대로 변수를 구분하기 위해 사용되는 '이름'이다.
    • name은 변수명으로써 개발자가 원하는 이름을 임의로 설정할 수 있다.
  • 형(Type)은 타입이라고도 하는데, 데이터의 자료형을 의한다.
  • 값(value)은 변수에 들어가는 데이터를 의미한다.
  • 영역은 변수가 사용 가능한 범위를 의미한다.

◻️ 2) 스위프트 변수 이름 규칙

① 스위프트에서 미리 사용하고 있는 예약어 또는 키워드는 사용이 불가함

  • 사용하기 위해선 Backtic 기호인 ``를 사용
 enum Sample {
    case `class`
    case `var`
    case `let`
}

② 숫자로 시작되는 이름은 불가하지만 숫자가 포함된 이름은 가능하다

  • 예시 ) jjooe1 (O) / 1jjooe(X)

③ 변수의 이름에는 공백이 포함될 수 없다.

④ lowerCamelCase 규칙을 따름

  • 첫 단어를 제외한 모든 단어의 첫글자는 모두 대문자로 써줌
    • memberNumber, userStatusCode 등

◻️ 3) 스위프트 변수 선언과 할당

var x: Int
  • 변수는 var이라는 키워드를 통해 선언
var x: Int = 3
  • 변수의 값 할당은 대입 연사자인 = 을 통해 할당

🍏 3. 타입 추론(Type Inference) vs 타입 어노테이션(Type Annotation)

◻️ 1) Swift의 변수(상수) 선언

let name
var age

상수면 let 변수면 var 키워드를 사용하고,
옆에 변수명, 상수명을 붙혀주는 식으로 사용함

BUT! 저렇게만 쓰면 Type annotation missing in pattern 오류가 뜸
C나 Objective-C나 뭐 기타 좀 오래된 언어들의 선언 방식과 마찬가지로 Swift도 변수(상수)를 선언할 땐 컴파일러가 알 수 있게 Type을 명시해줘야함

이 자료형을 명시하는 방법 2가지가

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

    ◻️ 2) 타입 추론 (Type Inference)

let name = "jjoohee"
  • 타입 추론은 위 와 같이 선언과 동시에 초기화 해주는 것을 말함
  • 추론이란 말 그대로 컴파일러가 초기화된 값("jjoohee")을 보고 타입을 추론하는 것

여기서 "jjoohee" 는 String값이기 때문에 컴파일러가 알아서 String겠구나 하고 추론하여 String타입으로 지정하는 것!

let name = "jjoohee"

type(of: name)   // String.Type

🌈 장점

ⓛ 직접 타입을 명시(Type Annotation) 해주지 않아도 됨
② Swift 언어 특성 중 하나인 "설계에 의한 안정성" 항목이 해당 됨

🌈 단점(문제점)

ⓛ 원하는 타입으로 추론되지 않는 경우

  • Double / float
let num = 17.0		// float라고 하고 싶음
type(of: num)		// Double.Type
  • Character / String
let name = "A"		// Character라고 하고 싶음
type(of: name)		// String.Type

👆 위의 상황처럼 초기값을 보고 유추할 경우 자료형을 더 큰 범위의 자료형으로 지정해 버리기 때문에 100% 내가원하는 자료형으로 지정이 안될 수 있음.

Float -> Double, Character -> String

② 초기값이 없는 경우 추론을 사용할 수 없음
③ 가독성이 떨어짐

◻️ 3) 타입 명시(Type Annotation)

let/var 변수명: 자료형
let name : String
  • 타입 명시는위와 같이 직접 자료형을 지정 해 주는 것
  • : 뒤에 자료형을 명시하는 방법임
  • : 뒤에 한칸 띄우는 것은 가독성을 위해 띄우는 것
  • 초기값 당연히 없어도 됨!
    • 타입을 알려줬기 때문에 타입을 유추할 필요가 없음
      = 초기값을 부여할 필요가 없음!
    • Annotation = 주석 / 자료형 주석을 달아줬기 때문

🌈 장점

ⓛ 타입 추론으로 원하는 자료형을 얻지 못 할경우 사용할 수 있음
② 초기 값이 없을 경우 사용할 수 있음
③ 타입 추론은 컴파일러가 타입을 추론하는 과정에서 타입 명시보다 시간이 조금 더 걸림

🌈 단점

  • 추가적인 타입 정보를 작성해야 하므로 코드가 길어질 수 있음
profile
개발이 어려운 나를 위한... 개발노트

1개의 댓글

comment-user-thumbnail
2024년 4월 24일

주희님 벨로그로 옮기셨네요! ㅎㅎ 오늘 공부도 화이팅이에요💃🏻

답글 달기