1.3 Constants, Variables, and Data Types

Joohyun·2022년 3월 28일
0

Constants, Variables

Constants

  • 프로그램이 동작하는 동안 변경되지 않는 값
let name = "John"
  • 한번 값이 정해지면 값을 변경할 수 없다.
let name = "John"
name = "James" // Error!

Variables

  • 프로그램이 동작하는 동안 변경되는 값
var age = 29
  • 값이 정해져도 새로운 값을 할당할 수 있다.
var age = 29
age = 30

constancts & variables는 서로 값을 할당할 수 있다.

let defaultScore = 100

// 다른 변수들에게 값을 복사해서 넣는다.
var playerOneScore = defaultScore // 100
var playerTwoScore = defaultScore // 100
 
playerOneScore = 200
print(playerOneScore) // 200
print(playerTwoScore) // 100

Constant Or Variable?

  • 카카오맵과 같이 출발지와 도착지 사이의 거리를 계산해주는 앱이 있다고 가정하자.

  • 해당 어플의 값이 변수일지라도, 한번의 실행주기 (single execution) 동안 값이 변하지 않는다면 constant로 표현한다.

Constant

  • 출발지 : 한번 출발지가 정해진 후에, 거리를 계산하는 동안 출발지는 바뀌지 않는다.

  • 목적지 : 목적지는 매번 바뀔 수 있기 때문에 variable이라고 생각되지만, 거리를 계산하는 동안에는 목적지가 변경되지 않으므로 constant로 표현한다.

Variable

  • 현재 위치 : 사용자가 움직일 때 마다 현재 위치는 변경된다.

  • 이동한 거리 : 사용자가 움직일 때 마다 출발지 - 현재 위치 사이의 거리는 변경된다.

  • 남은 거리 : 사용자가 움직일 때 마다 현재 위치 - 목적지 사이의 거리는 변경된다.

  • 변하지 않는 값을 constant로 지정해야 하는 이유
  1. 값을 변경할 수 없으므로 해당 값의 안정성이 보장됨

  2. 컴파일러는 constant를 low-level로 저장함으로써 프로그램이 더 빠르게 실행되도록 최적화

Naming Constants And Variables

1. 반드시 지켜야하는 규칙 (컴파일 에러 발생)

  • 수학 기호가 포함되선 안된다.

  • 공백이 포함되선 안된다.

  • 숫자로 시작할 수 없다.

2. 관용적으로 지켜야하는 규칙

  • 코드를 이해하기 쉽도록 이름을 지정해야 한다.

    • firstName > n
    • restaurantsNearCurrentCity > nearby
  • 여러 단어들이 결합되어 있다면 camel case를 따른다.

    • defaultScore > defaultscore
    • restaurantsNearCurrentCity > restaurantnearcurrentcity

Comments

  • 나중에 코드를 더 쉽게 이해하기 위해, constant 또는 variable에 대한 설명을 주석으로 간략히 설명하는 것이 좋다.
// 수학에서 사용되는 원주율 값 세팅
let π = 3.14
/* 원주율 값은 무한소수이기 때문에,
대략적인 값으로 할당해준다.*/
let π = 3.14

Types

  • Int : 정수 ex) 4

  • Double : 소숫점이 포함되어 있는 수 ex) 13.45

  • Bool : true 또는 false

  • String : 문자열 ex) "Once upon a time..."

Type Definition

  • 정의되어 있는 타입 외에 새로운 타입을 생성할 수 있다.
struct Person {
	// properties
  	let firstName: String
  	let lastName: String
 	
    // methods
  	func sayHello() {
    	print(Hello there! My name is \(firstName) \(lastName).)
  	}
}
// 2개의 인스턴스를 생성
let aPerson = Person(firstName:Jacob, lastName:Edwards)
let anotherPerson = Person(firstName:Candace, lastName:Salinas)
 
aPerson.sayHello() // “Hello there! My name is Jacob Edwards."
anotherPerson.sayHello() // “Hello there! My name is Candace Salinas."

Type Safety

  • Swift는 type-safe 언어이다.

  • type-safe 언어 : 코드 내부 값의 타입이 명백하도록 강제하는 언어

  • 타입이 서로 다르다면, 에러가 발생한다.

var wholeNumber = 30 // Int
var numberWithDecimals = 17.5 // Double
 
wholeNumber = numberWithDecimals // Error!
  • 너무 큰 숫자를 저장할 경우, _를 사용해 보기 쉽게 표기할 수 있다.
var largeUglyNum = 1000000000
var largePrettyNum = 1_000_000_000

Type Inference

  • constant, variable의 타입을 구체적으로 지정해주지 않아도 Swift는 타입 추론을 통해 타입을 정해준다.
let cityName = "서울" // String
let pi = 3.1415827 // Double
  • 맨 처음 타입이 정해지면, constant, variable 모두 타입을 변경할 수 없다.

Type Annotation

  • 타입을 구체적으로 명시하여 값의 타입을 지정해준다.
let cityName: String = "서울"
let pi: Double = 3.1415927

Type Annotation을 사용하는 일반적인 케이스

  1. constant 또는 variable을 생성 할 때, 값을 할당하지 않을 경우
let firstName: String
  1. 추론되는 타입이 아닌 다른 타입으로 constant 또는 variable을 생성할 경우
let middleInitial: Character = "J"
var remainingDistance: Double = 30
  1. 새로운 타입을 정의할 경우
struct Car {
    var make: String
    var model: String
    var year: Int
}

Required Values

  • constant 또는 variable을 정의할 때, 값을 할당하지 않을 경우 타입을 지정해주어야 한다.
var x // Error!
  • 타입을 지정해 주어도 값이 할당되지 않은 constant, variable은 사용할 수 없다.
var x: Int
print(x) // Error!
// 값을 할당해주어야 사용 가능
var x: Int
x = 10
print(x)

Excerpt From
Develop in Swift Fundamentals
Apple Education
https://books.apple.com/kr/book/develop-in-swift-fundamentals/id1581182804?l=en
This material may be protected by copyright.

profile
Developer

0개의 댓글