2014년 6월 10일 화요일

Swift - 기본 공통사항

Swift의 기본이라는 제목을 달고 있긴 하지만 기본이라기 보단 그냥 앞으로 쓸 글들을 이해하는데 필요한 공통적인 내용을 별도의 글로 뽑아낸 글이다.

Hello World

모든 언어 튜토리얼에는 "Hello World"를 출력하는걸 항상 시작으로 적곤 한다. 스위프트 버전은 아래 한 줄이 전부이다.
println("Hello World")
굳이 설명할 필요가 있을까 싶지만, 이 코드는 콘솔에 "Hello World" 를 출력하는 코드이다. 여기서 사용된 println()은 Swift 내장 함수로써 문자열을 콘솔에 찍는다. 그리고 특징적으로 끝에 개행문자(\n)를 붙여서 표시한다. 즉 마지막의 ln 이라는 글자는 line 이라고 이해 할 수 있다.

이와 비슷하게 print() 라는 함수는 끝에 개행문자를 출력하지 않는다.
print("This is ")
print("Print Function ")
print("Test.\n")
위의 세 라인은 한 줄의 문자열을 찍어낸다. 마지막에 \n 으로 개행문자를 표시했음에 유의하자.
Swift 2.0 부터는 println() 함수는 print() 으로 통일된다. 그리고 print() 함수는 자동으로 개행문자(\n)를 찍도록 바뀌었다.

문자열에 주의

더블쿼터로 쌓여진 문자들("...")은 문자열이다. Objective-C 에서 Swift로 넘어왔다면 문자열 표시 시 @(골뱅이)를 앞에 붙여놓지 않았다는 것에 유의하자.

개인적으로 Swift로 넘어오면서 가장 환호한 것이 바로 이 문자열에서 골뱅이를 떼어내서 버렸다는 것이다. -_-;;

세미콜론

C에서 파생된 언어들은 세미콜론(;)을 각 라인 끝에 꼭 적어줘야 한다. 그런데 스위프트는 C에서 파생된 언어는 아니니깐 쓰지 않아도 되겠네?

사실 써도 되고 안써도 된다. 스위프트에서 세미콜론은 주로 여러 라인을 한 줄에 표기하기 위해서 사용하는 라인 구분자로 쓰인다.
var a = 10; let b = 20; println("a = \(a), b = \(b)")
이런 식의 문법을 가능하게 한다는 것인데 잘 쓰면 가독성이 높아지지만 잘 못 쓸 확률이 높을 거라 생각된다 -_-;

심볼 네이밍

보통 언어들은 변수나 함수 이름 등에 영문자나 숫자 혹은 언터라인 정도만 쓸 수 있다는 것을 알고 있을 것이다. 그런데 Swift는 유니코드의 거의 모든 문자를 심볼 네이밍 용도로 사용 할 수 있다.

그런데 대부분의 프로그래머들은 계속 영어로 네이밍을 하겠지? 한글 영문 전환하는 것도 귀찮은 일이고 오픈소스라면 더더욱 영어 위주로 써야한다. 유니코드 그림문자로 미친듯한 변수명 지으면 누가 좋아할까?

수치 표현

10진수가 아닌 다른 16진수 등의 숫자는 C언어와 비슷하게 쓸 수 있다.
let dec = 10
let hex = 0xff     // 16진수
let oct = 0o23     // 8진수
let bin = 0b1001   // 2진수
10진수 외에는 0x 로 시작되는 16진수를 많이 쓰게 될거니 다른 것을 그냥 있다고만 알아두자.

스위프트만의 독특한 수치 표현 방법이 한가지 있다. 언더라인을 이용해 단위 구분을 시각적으로 할 수 있다.
let oneMillion = 1_000_000
let 일조 = 1_0000_0000_0000
여기서 언더라인(_)은 실제론 아무런 역활을 하지 않는다. 다만 일조 같은 큰 수치를 시각적으로 표현하기에 좋다. 물론 필수적인 기능은 아니겠지만 실수를 방지해 줄 수도 있기에 좋다고 생각된다.

기본연산자

보통 사용되는 산술연산자는 거의 동일하게 사용된다.
1 + 1         // = 2
2 - 1         // = 1
4 * 3         // = 12
4 / 2         // = 2 (참고로 소수점 이하는 그냥 버린다. 반올림 없음!)
5 % 2         // = 1 (산수에서 '나머지'를 의미)

C에서 사용되는 단축된 산술연산자도 거의 동일하게 사용된다.
var a = 1
a++           // a = 2
var b = a++   // b = 2, a = 3
var c = ++a   // a = 4, c = 4
a -= 2        // a = 2
C에서 처럼 ++ 이나 -- 연산자가 변수 이름 앞이나 뒤에 올때 동작 순서가 다르다는 건 스위프트에서도 동일하다.

특정 인스턴스의 타입에 따라 특정 산술연산자가 특정한 역활을 하기도 한다. 예를 들어 문자열의 경우 더하기(+) 연산자는 붙이기 역활을 한다. (자세한 것은 문자열(String) 글을 참고하자)
var str = "STRING"
var newStr = "NEW " + str  // newStr = "NEW STRING"

비트연산자의 경우도 동일하다.
0b0001 | 0b0010    // = 3 (0b0011)
0b0110 & 0b0010    // = 2 (0b0010)
0b0110 ^ 0b0010    // = 4 (0b0100)
0b0001 << 1        // = 2 (0b0010)
0b1000 >> 1        // = 4 (0b0100)
XOR는 자주 사용되지 않지만 AND(&)와 OR(|)는 여전히 종종 사용하게 될 것 같다.

주석(Commenting)

코드에 설명을 다는 등 주석은 정말 중요한 역활을 하는 언어의 필수 구성 요소이다. Swift의 주석문은 C와 C++의 주석문과 동일한 문법이다.
// one line comment
/* multi
   line
   comment */

블럭의 시작과 끝

C언어 혹은 C언어에서 파생된 C++이나 Java, 전신인 Objective-C 등등과 비슷하게 Swift에서도 중괄호는 블럭의 시작과 끝을 표시하는 문자이다.
func someFunction() {
    ...
}

[돌아가기] 스위프트(Swift) 가이드
[관련글] Swift - print 와 debugPrint 이야기​

댓글 2개 :

Jung-su Yuu :

안녕하세요. 프로그램 초보 입문자 kororo 입니다.
주석 달 때 /* */ 이거 있지 않습니까? 이거 이클립스에서 ctrl + shift + / 이렇게 하니까 되던데,, swift 에서는 어떻게 하나요?

Renn Seo :

보통 Swift로 코딩 할 때는 Xcode를 사용하니 Xcode 위주로 이야기 드리자면 Command + / 키를 누르면 주석처리가 되거나 풀 수 있습니다. 다른 에디터나 IDE를 사용하신다면 매뉴얼을 찾아보셔야지요...;;