오늘의 주제
1. 스위프트에서의 명명법
2. 변수, 상수의 선언
3. 기초 데이터 타입
안녕하세요, 야곰입니다.
지난 포스팅에서는 스위프트가 어떤 언어인지에 대해 잠시 살펴보았습니다.
2017/01/23 - [Swift] - Swift란 어떤 언어인가?
이번에는 스위프트의 아주 기초적인 문법에 대해 알아보겠습니다 :)
이름짓기
- 이름은 유니코드에서 지원하는 어떤 문자(한글, 한자, 영문, 숫자, 이모티콘 등등)라도 사용할 수 있습니다. 다만, 다음과 같은 예외의 경우는 사용할 수 없습니다.
- 스위프트에서 미리 사용하고 있는 예약어 또는 키워드
- 해당 코드 범위 내에서 이미 사용하고 있는 기존의 이름과 동일한 이름
- 연산자로사용될수있는기호(+, -,*,/)
- 숫자로 시작하는 이름
- 공백이 포함된 이름
- 함수, 메서드, 인스턴스 이름은 첫 글자를 소문자로 사용하는 소문자 카멜케이스(Lower Camel Case)를 사용합니다.
- 클래스, 구조체, 익스텐션, 프로토콜, 열거형 이름은 타입의 이름이기 때문에 첫 글자를 대문자로 사용하는 대문자 카멜케이스(Upper Camel Case)를 사용합니다.
- 대소문자를 구별합니다. 예를 들어 Var와 var를 따로 인식합니다.
예약어와 키워드 예약어는 프로그래밍 언어에서 미리 사용하기로 약속되어 있는 단어로, 식별자로 사용할 수 없는 단어를 뜻합니다. 키워드는 프로그래밍 언어 문법의 일부로, 특별한 의미를 갖는 단어를 뜻합니다. 스위프트의 키워드는 대부분 예약어입니다. |
변수와 상수
변수
var name: String = "yagom" var age: Int = 100 var job = "iOS Programmer" // 타입 추론이 사용되었습니다 var height = 181.5 // 타입 추론이 사용되었습니다 age = 99 // 변수는 값을 변경해 줄 수 있습니다. job = "Writer" // 값을 변경할 때에는 기존과 동일한 타입의 값을 할당해 주어야 합니다.
주석(Comment) 코드 중간중간 // 기호 뒤에 녹색으로 붙은 글귀는 주석입니다. 즉, 코드에 해당하는 설명을 덧붙이기 위한 메모라고 생각하면 됩니다. 주석은 프로그램이 실행될 때 코드로서 실행되지는 않습니다. 사람이 코드를 읽기 편하도록 하기위한 보조수단입니다. |
타입 추론 변수나 상수를 생성할 때 데이터 타입을 생략하면 컴파일러가 변수 값의 타입을 추론하여 타입을 지정합니다. 애플은 이런 타입 추론을 스위프트의 강력한 기능이라고 소개했지만, 스위프트에 익숙하지 않은 프로그래머에게는 오히려 독이 될 수 있습니다. 그러다 보니 저는 타입 추론을 많이 사용하지는 않습니다. 자칫 잘못된 타입 추론으로 인해 오류가 생기면 이 오류를 찾는데 상당한 시간이 걸릴 수도 있습니다. 타입을 명확히 지정하지 않아 발생하는 오류를 찾아내는 것보다 처음부터 타입을 명시하는 편이 시간을 더 절약할 수 있습니다. |
[플레이그라운드 실행결과]
스위프트에서 세미콜론 스위프트에서 명령구문 뒤에 세미콜론(;)을 붙이는 것은 선택사항입니다. 기존 프로그래밍 언어의 습관대로 구 문 뒤에 세미콜론을 붙이셔도 상관 없습니다. |
상수
let name: String = "yagom" // 차후 변경하지 않는 값은 상수로 선언합니다. var age: Int = 100 var job = "iOS Programmer" // 타입 추론이 사용되었습니다. let constHeight = 181.5 age = 99 // 변수는 값을 변경할 수 있습니다. job = "Writer" // 값을 변경할 때에는 기존과 동일한 타입의 값을 할당해야 합니다. name = "야곰" // 상수로 선언된 값은 변경할 수 없습니다. 오류가 발생합니다.
변수를 사용하지 않고 상수를 사용하는 이유는 다양합니다. 하지만 가장 중요한 이유는 가독성입니다. 상수는 변하지 않는 값입니다. 때문에 상수로 값을 선언하면, 이후 코드에서 값의 변화가 없다는 사실을 주석이나 API 문서 등을 살펴보지 않고서도 직관적으로 알 수 있습니다. 즉, 차후 값의 변경을 신경쓰지 않아도 된다 는 것입니다. 예를 들어 원주율 값은 (아직까지는) 공식적으로 불변하는 값이므로 상수로 선언하는 것이 좋습니다. 또, 특정 값에 특별한 의미를 부여할 때 사용할 수도 있습니다. 예를 들어 입력받는 수의 최대 크기가 100이 라고 한다면, 100이라는 숫자에 의미를 부여하기 위해 let maxInputValue = 100 등으로 선언해두면 차후에 직관적으로 읽기도, 사용하기도 편리할 것입니다. |
[플레이그라운드 실행결과]
[오류 수정 후 플레이그라운드 실행결과]
콘솔 로그 남기기
콘솔 로그의 print 함수에 대한 이해가 잘 가지 않는다면 다음 포스팅에 이어질 함수의 내용을 참고하세요. |
문자열 보간법(String Interpolation)은 변수 또는 상수 등의 값을 문자열 내에 나타내고 싶을 때 사용합니다. 문자열 내에 \(변수나 상수) 의 형태로 표기하면 이 변수나 상수를 문자열로 치환해서 넣어줍니다.
기본 데이터 타입
스위프트에서 기본으로 제공하는 데이터 타입(자료형)에 대해 알아보겠습니다.
Int와 UInt
정수 타입입니다. Int는 +, - 부호를 포함한 정수를 뜻하며 이 중 - 부호를 포함하지 않고 0 을 포함한 양의 정수는 UInt로 표현합니다. Int와 UInt형의 최댓값과 최솟값은 각각 max 와 min 프로퍼티로 알아볼 수 있습니다. Int와 UInt는 각각 8비트, 16비트, 32비트, 64비 트의 형태를 가지고 있습니다.
var integer: Int = -100 let unsignedInteger: UInt = 50 // UInt 타입에는 음수 값을 할당할 수 없습니다. print("integer 값 : \(integer), unsignedInteger 값 : \(unsignedInteger)") print("Int 최댓값 : \(Int.max), Int 최솟값 : \(Int.min)") print("UInt 최댓값 : \(UInt.max), UInt 최솟값 : \(UInt.min)") let largeInteger: Int64 = Int64.max let smallUnsignedInteger: UInt8 = UInt8.max print("Int64 최댓값 : \(largeInteger), UInt8 최댓값 : \(smallUnsignedInteger)") let tooLarge: Int = Int.max + 1 // Int의 표현 범위를 초과하므로 오류를 냅니다. let cannotBeNegetive: UInt = -5 // UInt는 음수가 될 수 없으므로 오류를 냅니다. integer = unsignedInteger // 오류! 스위프트에서 Int와 UInt는 다른 타입입니다. integer = Int(unsignedInteger) // Int 타입의 값으로 할당해주어야 합니다.
[플레이그라운드 실행결과]
Bool
let boolean: Bool = true let iLoveYou: Bool = true let isTimeUnlimited: Bool = false print("시간은 무한합니까? : \(isTimeUnlimited)")
[플레이그라운드 실행결과]
Float과 Double
var floatValue: Float = 1234567890.1 // Float이 수용할 수 있는 범위를 넘어섭니다. // 자신이 감당할 수 있는 만큼만 남기므로 정확도가 떨어집니다. let doubleValue: Double = 1234567890.1 // Double은 충분히 수용할 수 있습니다. floatValue = 123456.1 // Float이 수용할 수 있는 범위의 수로 변경합니다.
Character
let alphabetA: Character = "A" print(alphabetA) let commandCharacter: Character = “♡" // Character 값에 유니코드 문자를 사용할 수 있습니다. print(commandCharacter) let 한글변수이름: Character = "ᄀ" // 한글도 유니코드 문자에 속해 있으므로 스위프트 코드에 변수 이름으로 사용할 수 있습니다. print("한글의 첫 자음 : \(한글변수이름)")
[플레이그라운드 실행결과]
String
String은 문자의 나열, 즉 문자열입니다. String은 Character와 마찬가지로 유니코드를 사용할 수 있으며, 값의 앞뒤에 큰따옴표를 사용하여 표현합니다.
let name: String = "yagom" // 상수로 선언된 문자열은 변경이 불가능합니다. // 이니셜라이저를 사용하여 빈 문자열을 생성할 수 있습니다. // var 키워드를 사용하여 변수를 생성하였으므로 문자열의 수정 및 변경이 가능합니다. var introduce: String = String() introduce.append("제 이름은") // append() 메서드를 사용하여 문자열을 이어붙일 수 있습니다. introduce = introduce + " " + name + "입니다." // + 연산자를 통해서도 문자열을 이어붙일 수 있습니다. print(introduce)
[플레이그라운드 실행결과]
이번에 스위프트의 기초적인 문법과 데이터 타입에 대해 알아봤습니다. 다음 포스팅에서는 컬렉션 타입과 함수에 대해 알아보겠습니다.
다음 번에 또 뵈어요~ 고맙습니다 :D
- 본 글의 일부내용은 필자의 저서 [스위프트 프로그래밍](2017, 한빛미디어)(http://www.hanbit.co.kr/store/books/look.php?p_code=B5682208459)에서 요약, 발췌하였음을 알립니다.
- 스위프트의 문법에 대해 더 알아보고 싶다면 애플의 Swift Language Guide[https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html]를 참고해도 많은 도움이 됩니다.
by yagom
facebook : http://www.facebook.com/yagomSoft
facebook group : https://www.facebook.com/groups/yagom/
twitter : http://www.twitter.com/yagomSoft ( @yagomsoft )
p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.
RSS Feed 받기
'Swift > 기본문법' 카테고리의 다른 글
스위프트 시작하기 (0) | 2017.05.08 |
---|---|
Swift - 프로토콜, 익스텐션 (0) | 2017.03.07 |
Swift - 구조체 클래스 (0) | 2017.02.28 |
Swift - 함수, 콜렉션 타입 (0) | 2017.02.06 |
Swift란 어떤 언어인가? (0) | 2017.01.23 |