04. 기본(The Basic) - 상수와 변수(Constants & Variables)의 선언과 출력

이경은·2023년 12월 24일
0

요약

  1. 변수(Variables)와 상수(Constants)
    • 프로그램에 값을 저장하는 '저장소'의 종류.
    • '변수'는 프로그램 내에서 값이 변할 수 있는 저장소
    • '상수'는 값이 변하지 않는 저장소

  2. 타입 명시(Type Annotations)
    • Swift는 Type-Safe한 언어이므로, 저장할 값의 타입을 명확히 명시해주어야한다.
    • 문맥 상 값의 타입이 분명할 경우, Swift는 타입추론(Type Inference)할 수 있으므로 타입을 명시하지 않을 수 있다.

  3. 상수와 변수의 이름(Naming Constants and Variables)
    • 상수와 변수의 이름은 대부분의 문자를 사용할 수 있지만, 첫 글자로 숫자를 사용할 수 없습니다.
    • 같은 이름의 상수 또는 변수를 중복하여 선언할 수 없습니다.

  4. 상수와 변수 출력(Printing Contstants and Variables)
    • 상수 또는 변수에 저장된 값을 print라는 함수로 출력할 수 있습니다.
    • 함수print()의 괄호 안에 변수 또는 상수명을 넣어 출력합니다.

변수(Variables) and 상수(Constants)

변수 : 프로그램에서 데이터를 저장하는 '저장소'
값을 저장할 때, 반드시 선언(assign)해야 한다.
변수에 저장된 값은 추후 다른 값으로 변할 수 있습니다.

상수 : 변수 중 값이 변할 수 없는 '저장소'
값을 변경할 필요가 없을 때, 코드를 더 안전하고 명확하게 만들기 위해 사용합니다.

let 변수이름: 변수타입 =//변하지 않을 값을 저장하는 let
var 변수이름: 변수타입 =//변할 수 있는 값을 저장하는 var

let maximumNumberOfLoginAttempts = 10	// maximumNumberOfLoginAttempts라는 새로운 상수를 선언(declaring)하고 10이라는 값을 할당(assign)한다.
var currentLoginAttempt = 0		// currentLoginAttempt라는 새로운 변수를 선언하고 0이라는 값으로 초기화한다.

최대 로그인 시도 횟수maximumNumberOfAttempt는 변경되어서는 안되므로 상수(constant, let)으로 선언합니다.

현재 로그인 시도 횟수currentLoginAttempt는 로그인을 시도한만큼 숫자가 1씩 증가해야하므로 변수(variable, var)로 선언합니다.

var environment = "development"
let maximumNumberOfLoginAttempts: Int
// 상수 maximumNumberOfLoginAttempts은 타입만 '선언'되었고, 아직 값은 '초기화'되지 않았습니다.

if environment == "development" {
	maximumNumberOfLoginAttempts = 100
} else {
	maximumNumberOfLoginAttempts = 10
}
// 이제 상수 maximumNumberOfLoginAttempts에 값이 초기화되었고, 읽을 수 있게 되었습니다.

상수 또는 변수로 선언할 때, 위의 예제 처럼 선언의 부분으로 값을 할당(초기화)할 수도 있습니다. 또는 처음 값을 읽기 전에 값의 존재가 보장되면(=선언되어 있다면) 프로그램의 마지막에 초기화 값을 할당할 수 있습니다.

위 예제는 로그인 최대시도 횟수(maximumNumberOfLoginAttempts)는 상수이고, 이 값은 if 함수에 따라 달라집니다. environment == "development"가 참일 때, maximumNumberOfLoginAttempts는 100의 값을 가지고, 거짓일 때, 10의 값을 가집니다.

if 함수의 모든 조건에 maximumNumberOfLoginAttempts이 특정한 값을 가질 수 있으므로, 선언과 함께 값이 할당되어있지 않을 수 있습니다.

아래는 여러개의 상수 또는 변수를 선언할 때, 콤마로 구분하여 한 줄로 선언하는 예시입니다.

var x = 0.0, y = 0.0, z = 0.0

타입 명시(Type Annotations)

Swift에서는 상수 또는 변수를 선언(declaring)할 때, 저장할 값의 종류를 명확하게 하기 위해 타입 명시를 제공할 '수' 있다. 타입 명시는 상수 또는 변수 이름 뒤에 콜론과 공백 한 칸 뒤에 사용할 타입의 이름을 적어 사용합니다.

타입을 명시하는 경우

var welcomeMessage: String = "안녕하세요."
// 변수 welcomeMessage의 타입은 String이며, "안녕하세요."라는 값으로 선언되었다.

위처럼 ':'은 '...의 타입은...'이라는 의미를 가지고 있으며, 많은 경우 타입추론(Type Inference)에 의해 아래처럼 타입을 명시하지 않고 변수를 선언할 수 있습니다.

타입을 명시하지 않는 경우

welcomeMessage = "안녕하세요."

같은 타입의 여러 개의 변수를 콤마로 구분하여 한 번에 선언할 수 있습니다. 이 때, 변수의 타입은 마지막 변수 뒤 콜론과 함께 한 번만 작성할 수 있습니다.

var red, green, blue: Double

실제로 타입명시(Type Annotation)이 필요한 경우는 드뭅니다. 상수 또는 변수를 선업할 때 초기값을 지정하면 Swift는 타입 세이프티와 타입 추론(Type Safety and Type Inference)에서 나와있는 것처럼 해당 상수 또는 변수에 사용될 타입을 거의 항상 유추할 수 있습니다. 위의 welcomeMessage예제에서 초기값을 지정하지 않았으므로 welcomeMessage변수의 타입은 초기값에서 유추되지 않고 타입을 명시하였습니다.

상수와 변수의 이름(Naming Constants and Variables)

상수와 변수 이름은 유니코드(Unicode)문자를 포함해 대부분의 문자를 포함할 수 있습니다.

let n = 3.14159
let 你好 = "你好世界"
let 🐶🐮 = "dogcow"

상수와 변수 이름은 공백, 수학적 기호, 화살표, 내부에서 사용하는 유니코드 스칼라 값, 또는 선과 박스를 그리는 문자를 포함할 수 없습니다. 또한 숫자는 이름의 첫번째 글자로 사용될 수 없습니다.

특정 타입으로 상수 또는 변수를 선언하면 동일한 이름으로 다시 선언하거나 다른 타입의 값을 저장하도록 변경하여 선언할 수 없습니다. 상수를 변수로 바꾸거나 변수를 상수로 바꿀 수도 없습니다.

Swift 키워드와 동일한 이름의 상수 또는 변수를 제공해야 한다면 이름을 백틱(`)으로 묶어줘야 합니다. 그러나 키워드를 이름으로 사용하는 것은 좋지 않은 방법입니다.

동일한 타입의 다른 값으로 이미 선언된 변수의 값을 변경하는 것은 가능합니다. 아래에서 friendlyWelcome값은 Hello!에서 Bonjour!로 변경됩니다.

var friendlyWelcome = "Hello!"
friendlyWelcome = "Bonjour!"
// friendlyWelcome의 값은 "Bonjour!"로 변경되었습니다.

변수와 달리 상수의 값은 지정된 이후에는 변경할 수 없습니다. 값을 변경하려고 하면 코드가 컴파일 될 때 오류가 발생합니다.

let languageName = "Swift"
languageName = "Swift++"
// 상수의 값을 변경할 경우 컴파일에러가 발생합니다.

상수와 변수 출력(Printing Constants and Variables)

print(_:separator:terminator:) 함수로 상수 또는 변수의 현재 값을 출력할 수 있습니다.

print(friendlyWelcome)
// 출력값 : "Bonjour!"

print(_:separator:terminator:) 함수는 하나 또는 그 이상의 값을 적절하게 출력하는 전역함수입니다. 예를 들어 Xcode에서 print(_:separator:terminator:) 함수는 Xcode 콘솔(Console)창에 결과를 출력합니다. separatorterminator 파라미터는 가본 값을 가지고 있으므로 함수를 호출할 때 생략할 수 있습니다. 기본적으로 이 함수는 줄바꿈을 출력하고 종료됩니다. 줄바꿈없이 값을 출력하려면 print(someValue, terminator: "")와 같이 terminator에 빈 문자열을 넘겨주면 됩니다. 파라미터 기본값에 대한 자세한 내용은 파라미터 기본값(Default Parameter Values)을 참고바랍니다.

Swift는 긴 문자열에 상수 또는 변수의 이름을 포함하여 Swift가 상수 또는 변수의 현재 값으로 대체하기 위해 문자열삽입(String Interpolation)을 사용합니다. 이름을 역슬래시(/) + 소괄호로 감싸고 원하는 위치에 삽입합니다.

print("The current value of friendlyWelcome is \(friendlyName)")
// 출력값 : "The current value of friendlyWelcome is Bonjour!")

문자열삽입(String Interpolation)에서 사용할 수 있는 모든 옵션은 문자열 삽입(String Interpolation)에 자세히 설명되어 있습니다.

0개의 댓글