Swift 입문2 – 변수, 상수, 문자열

2014-09-30
4 Views
2 Comments

변수

변수 정의는

var 변수명 : 타입 = 값

으로 선언합니다.

문자열을 사용해서 만들어 봅시다. 참고로 문자열은 String입니다.

1) 아래와 같이 Playground에서 입력해 봅시다.

[swift]

import UIKit

var str : String = "안녕하세요"

println(str)

[/swift]

결과를 확인해 보세요.

2) 변수 값을 변경해 봅시다.

[swift]

import UIKit

var str : String = "안녕하세요"

str = "ㅋㅋㅋㅋㅋ"

println(str)

[/swift]

3) 이제 처음 선언한 var str 변수를 삭제하고 실행해 봅시다.

[swift]

import UIKit

var str = "ㅋㅋㅋㅋㅋ"

println(str)

[/swift]

무엇이 다른지 아시겠습니까? 바로 타입(형)이 선언하지 않았는데도 아무런 오류가 없이 실행된다는 것입니다. 컴파일러가 변수 타입을 유추하고 선언해서 처리해주기 때문입니다.  큰 따움표 안의 문자를 여러 개로 입력되어 있기 때문에 컴파일러는 문자열로 유추하고 String형을 배치하고 있습니다. 결과적으로 타입을 선언하지 않아도 오류가 나지 않게 되는 것입니다.

중요한 것은 컴파일 할 때, 타입추측을 한다는 것에 주목해야 합니다.  컴파일할 때, 형추측을 하기 때문에 오류가 있으면 컴파일에서 확인 메시지가 나오고 때문에 아래와 같이 문자열 변수에 숫자를 입력하면 오류가 발생합니다.

[swift]

import UIKit

var str = "안녕하세요"

str = 1

println(str)

[/swift]

문자열 변수에 숫자를 입력했기 때문에 오류가 발생합니다.

여기서 Objective-C언어보다 비교적 코딩양이 줄어들 것이고 품질은 차이가 없습니다. 코딩양이 줄어들기 때문에 소스코드 가독성은 좋아집니다.

문자열의 결합

[swift]

import UIKit

var str = "안녕하세요"

str = str + " 김명준입니다"

println(str)

[/swift]

문자열은 +로 합칠 수 있고, Objective-C처럼NSMutableString을 사용하거나 stringWithFormat:을 사용하는 번거로움은 없어졌습니다.

또한 +=을 사용하여 결합하는 것도 가능합니다.

[swift]

import UIKit

var str = "안녕하세요"

str += " 김명준입니다"

println(str)

[swift]

 
<h2>상수</h2>
값을 변경하지 않는 것을 변수라고 생각한다면 이것이 버그의 원인이 됩니다. 값을 변경하지 않는 경우에는 상수라는 것을 사용한다는 기억해야 합니다.

상수 정의는

let 상수명 : 타입 = 값

입니다.

앞에서 실행했던 Hello World를 실행하는 소스의 변수형 var를 let으로 변경하고 실행하면 오류가 발생합니다. 이는 상수를 변경하려고 했기 때문에 발생하는 오류로 str += "김명준입니다"라는 행을 삭제하면 오류가 발생하지는 않을 것입니다.

var와 let구분을 하느냐에 따라 Mutable여부를 제어할수 있습니다. 이 말은 문자열 부분으로 Objective-C언어를 사용하던 개발자라면 NSArray와 NSMutableArray등 Mutable여부를 구분하고 있다고 생각되지만,  var와 let  제어를 할 수 있게 된 것이기 때문입니다.

&nbsp;
<h2>언제 변수와 상수를 정의할까?</h2>
변경할 필요가 없다면 let으로 선언하는 것이 좋습니다. 무의식적으로 변경되는 것을 예방할 수 있습니다. 또한 실행속도가 var를 사용할 때보다 빠릅니다.

&nbsp;
<h2>Swift의 String형</h2>
[swift]

var str1 = "안녕하세요"

var str2 = str1

str2 += ", 김명준!"

println(str2)

println(str1)

[/swift]

변수 str1과 변수 str2의 결과는 다릅니다.

Objective-C언어를 사용하던 개발자는 String형을 사용할 때 주의해야 합니다. NSString형태를 그대로 코딩해버리기 때문입니다.

Facebook Comments

You may be interested

Xcode 기능 확장(Extension) 제거하기
Xcode
shares3 views
Xcode
shares3 views

Xcode 기능 확장(Extension) 제거하기

MJ Kim - 3월 18, 2017

Mac에서 Xcode Source Editor Extension등의 기능확장을 사용하다보면 디버깅시 시스템 환경 설정의 확장이 앱에 등록되는 경우가 있다. 계속해서 목록이 남아 있기…

iOS App Store Review(앱 심사약관) 번역
Swift 3.0
shares111 views
Swift 3.0
shares111 views

iOS App Store Review(앱 심사약관) 번역

MJ Kim - 3월 15, 2017

App Store Review를 번역했다. 사실 이번에 좀 애매한 리젝을 당해서 그걸 이해하고자 정리해본다. 원문링크: https://developer.apple.com/app-store/review/guidelines/ 1. 이약관은? 1.1 앱 개발자로서 프로그램의…

Raspberry Pi 타이머 On/Off 전원제어모듈 RPi1114-Raspberry Pi
IoT by Raspberry Pi
shares7 views
IoT by Raspberry Pi
shares7 views

Raspberry Pi 타이머 On/Off 전원제어모듈 RPi1114-Raspberry Pi

MJ Kim - 3월 04, 2017

RPi1114-Raspberry Pi전원제어 모듈이 있다. 이 제품은 40Pin GPIO핀헤더에 연결하여 사용하는 모듈로 Cortax-M0마이크로컨트롤러 LPC1114를 내장하고 Raspberry Pi의 시작과 정지 순서등을 프로그래밍할…

2 Responses