프로그래밍의 기본은 값, "변수, 연산이다. 이러한 가장 기본적인 것부터 설명한다.


리터럴(값)

프로그래밍의 기본 중에 기본이 되는 것은 '값'과 '변수'이다. 우선 이들에 대해 대충 이해해 두도록 하자.

우선 "리터럴(literal)"이다. 소스 코드에 직접 작성된 값을 일반적으로 "리터럴"라고 다. 리터럴 작성은 많은 프로그래밍 언어 대체로 공통적 비슷하다.

숫자 리터럴

수치는 그냥 보통으로 숫자를 적으면 된다. "123" 또는 "0.45"식으로 작성하면 된다. 비교적 알기 쉽다. 이러한 일반적인 숫자의 작성뿐만 아니라 색다른 작성 법도 제공한다.

4 자리마다 밑줄

숫자는 자리수가 많아지면 바로 알아보기가 힘들다. 그래서 일반 사회에서는, "1,000,000" 처럼 4자리마다 구분 기호를 붙여 작성하기도 한다. 이와 같은 것을 Swift도 가능하다. 그러나, 기호는 쉼표(,)가 아닌 밑줄(_)이다. 또한 자릿수를 가지런히 보여주기 위하여 처음에 숫자 0으로 쓸 수도 있다.

예) 0012_3456_7890 (1234567890와 동일)

2, 8, 16 진수

보통 10진수 외에 2진수, 8진수, 16진수 값도 작성할 수 있다. 이것들은 각각 숫자의 시작 부분에 '0'로 시작하는 기호를 다음과 같이 붙인다.

진수설명예시
2진수"0b"를 시작 부분에 붙여 작성한다.0b11011
8진수"0o"(두 번째 문자는 알파벳 오)를 시작 부분에 붙여 작성한다.0o7623
16진수"0x"를 시작 부분에 붙여 설명. 값은 0~9와 A~F를 사용하여 작성한다.0x5fa3

텍스트 리터럴

텍스트는 값 양쪽을 큰 따옴표(")로 묶어 작성한다. 이는 많은 언어에서 사용되고 있다.

예) "Hello", "안녕하세요"

이스케이프 기호

텍스트 리터럴에는 직접 문자로 표현할 수 없는 기호가 있다. 예를 들어, 큰 따옴표는 쓸 수 없다. 또 줄바꿈(carriage return)과 같은 제어 기호를 쓸 수 없다. 이들은 이스케이프 기호인 백슬래시(\) 기호로 작성한다.

기호설명
\"큰 따옴표 (") 기호
\\백 슬래시 (\) 기호
\t수평 탭 기호
\r캐리지 리턴
\n라인 피드
\0널 문자
예) "이것은\"더블\\쿼트\"기호\n"

변수 포함

리터럴에는 변수를 포함할 수 있다. 이것은 '\(변수)'와 같은 형태로 기술한다. 예를 들어, 변수 str 리터럴 내에 포함한다면 아래 같이 작성할 수 있다.

예) "여기에 \(str)로 표시"

부울

양자 택일의 상태를 나타내는데 사용하는 것이 부울이다. 실제 값은 "true", "false"가 리터럴로 준비되어 있다. 이를 직접 작성하여 사용한다.


변수, 정수 및 타입(유형)

변수는 미리 선언을 하고 사용한다. 선언하지 않고 사용하거나, 또는 이미 선언 한 변수를 다시 선언 할 때 오류가 발생한다. 변수의 선언은 다음과 같이 작성한다.

var 변수 = 값
var 변수:유형 = 값

이런 식으로 초기값이 되는 값을 대입하는 형태로 선언하는 것이 일반적이다. "처음에 값을 할당하지 않고 싶다"면 아래와 같이 작성할 수도 있다.

var 변수:유형

상수

변수는 일반적으로 값 변경이 가능하지만, "나중에 변경할 수 없도록 하고 싶다"면 상수를 사용할 수 있다. 이것은 다음과 같이 작성한다.

let 상수 = 값
let 상수:유형 = 값

상수는 기본적으로 값을 대입 선언을 세트로 작성한다. 선언만 해 두었다가 나중에 값을 할당 할 수 없다. 선언시에 할당된 값이 상수의 값이 되고 이후 변경할 수 없다.

변수 타입

보면 알 수 있듯이 변수(상수)를 선언할 때 변수 이름뿐만 아니라, 타입(유형)을 지정할 수도 있다. 이것을보고 "Swift 변수는 유형을 지정하지 않고 작성하는 방법과 지정하고 작성하는 방법이 있구나 '라고 생각해서는 안된다.

Swift 변수는 기본적으로 모든 타입이 정해져 있다. 변수를 만들 때, 반드시 타입을 지정하지 않으면 안된다. 그럼, 왜 "var 변수 = 값" 이와 같이 작성도 할 수 있는가? 라고 하면 대입하는 값에서 타입을 유추하여 설정하기 때문이다. (그래서 "var 변수"뿐이라면, 오류가 발생한다.)

Swift는 기본적으로 "정적 타이핑(static typing)"언어이다. 모든 변수는 최초에 반드시 타입을 지정하여 해당 타입의 값만 할당 할 수 있다.

타입의 종류

Swift는 많은 타입이 준비되어 있다. 주요 형태에 대해 여기서 정리해 두겠다.

정수

타입설명
Int일반적인 정수이다. 32bit 또는 64bit의 값이 된다. (실행하는 CPU에 따라 다르다.)
UIntInt와 동일하지만, 이는 플러스, 마이너스 부호가 없다. (즉, 마이너스를 사용할 수 없다.)
Byte8bit 폭의 값이다.
Int8, Int16, Int32, Int64값의 크기를 지정하고 변수를 사용하는 것과 같은 경우, 이것들을 이용하는 것이 알기 쉬울 것이다. 각 변수의 bit 수를 나타낸다. 부호없는 정수 UInt8~ 등도 갖추어져 있다.

실수 (부동 소수점)

타입설명
Float32bit 폭의 부동 소수점 값이다.
Double64bit 폭의 부동 소수이다.
Float32, Float64, Float80, Float96값의 크기를 지정하여 부동 소수점을 취급하고 싶은 경우에 사용한다. Double에서도 정밀도가 부족한 경우 96bit 폭까지 사용할 있다.

텍스트

타입설명
String이것이 일반적인 텍스트이다.
Character1개의 문자 텍스트이다.

부울

타입설명
Bool논리 값이다. (true, false)

 

이것들은 이른바 기본형이라고도 할 수있 는 것으로, 이 외에도 Swift 값의 형태로 이용되는 것은 많이 있다. 배열이나 객체 "튜플(tuple)", "옵션널(optional)"라는 값등이 있다. 이것들은 기본형에 비해 조금 어려운 때문에 별도로 설명한다.



기본 연산

값의 연산은 그다지 특수(?) 것은 없다. 주요 연산자에 대해 설명한다.

수치 연산

수치 연산의 기본인 사칙 연산은 보통의 연산자를 그대로 사용 할 수 있다. 연산자의 설명은 다음과 같다.

연산설명
A + BA와 B를 더한다. (덧셈)
A - BA에서 B를 뺀다. (뺄셈)
A * BA와 B를 곱한다. (곱셈)
A / BA를 B로 나눈다. (나눗셈)
A % BA를 B로 나눈 나머지를 계산한다.

이 밖에 ()에 의해 연산의 우선 순위 지정 등도 물론 있다. 수치 연산은 그다지 특별한 것은 없을 것이다.

텍스트 연산

텍스트의 연산은 플러스(+) 기호로 텍스트 연결을 한다. "Hello"+ "Swift"라고 하면 "HelloSwift"라는 텍스트를 얻을 수 있다.

대입 연산자

이미 등장하고 있었지만, 값의 대입은 등호(=)를 사용한다. 그러면 오른쪽의 값을 왼쪽 변수 등에 대입한다. 보통 다른 사칙 연산과 대입을 동시에 하기 때문에, 다음과 같은 연산자를 사용할 수 있다.

수식설명
A += BA에 B를 가산한다. (A = A + B와 동일)
A -= BA에서 B를 감산한다. (A = A - B와 동일)
A *= BA에 B를 곱한다. (A = A * B와 동일)
A /= BA를 B로 나누한다. (A = A / B와 동일)
A %= BA를 B로 나눈 나머지를 A에 대입한다. (A = A % B와 동일)

증가/감소 연산자

변수의 값을 1증가 하거나1감소 시키고 하기 위한 연산자이다. 연산자의 설명은 다음과 같다.

수식설명
++A, A++A의 값을 1 증가시킨다.
--A, A--A의 값을 1 감소시킨다.

변수 앞에 붙이는 경우와 뒤에 붙이는 경우가 있다. 이것은 값의 평가와 갱신의 타이밍 차이이다. ++A인 경우 값을 1증가하고 A의 값을 가져온다. 즉, 얻을 수 있는 값은 1 증가했다. 이에 비해, A++는 A를 취득한 후에 값을 1 증가시킨다. 즉, A의 값은 1 증가 전의 것으로, 그것이 사용된 후에 값이 변경된다.

비교 연산자

제어 구문의 조건 등에 많이 사용되는 연산이다. "A와 B는 같다" 혹은 "A는 B보다 크다"라는 식으로 두 값을 비교하고 그것이 맞으면 true, 그렇지 않으면 false를 반환하는 연산자이다.

수식설명
A == BA와 B는 같다.
A! = BA와 B는 다르다.
A < BA는 B보다 작다.
A <= BA는 B보다 작거나 같다.
A > BA는 B보다 크다.
A >= BA는 B보다 크거나 같다.

논리 연산자

부울 값의 의해 부울 값을 반환하는 연산자이다. 구문의 조건으로 여러 비교 연산 식을 함께 설정하는데 사용된다.

수식설명
A && BAND 연산이다. A와 B 모두 true이면 true, 그 이외는 모두 false이다.
A || BOR 연산이다. A와 B의 어느 한쪽이 true라면 true, 모두 false인 경우에만 false이다.
A ^ BXOR 연산이다. A와 B가 서로 다른 값이면 true, 같은 값이면 false이다.
!A

NOT 연산이다. A가 true라면 false, false이면 true이다.



그밖에 알아야 하는 기초 지식

이상, 값, 변수, 연산에 대해 설명하였다. 이 외에도 보충으로 알아야 할 지식에 대해 설명한다.

텍스트는 여러 행 또는 세미콜론으로 구분

Swift는 문장의 끝은 일반적으로 줄 바꿈으로 구분된다. 한 문장씩 줄 바꿈하여 써서 넣어야만 문장의 끝으로 의식하는 것은 아니다.여러 문장을 하나로 통합하여 쓰고 싶은 경우에는 세미콜론(;)으로 구분하여 작성할 수도 있다.

a = 1; b = 2; c = 3

주석은 // 또는 /* */으로

주석은 두 종류의 작성법이 있다. // 이후에 한줄이 끝날때까지 모든 텍스트를 주석으로 간주한다. /* */는 /*에서 */까지의 모든 문장을 주석로 간주한다.

또한 /* */ 주석의 계층화를 지원한다. 주석에 다시 주석을 작성할 수도 있다.

/* comment is /* THIS! */ text. */

변수 선언과 대입는 괄호로 모을 수 있다.

여러 변수를 제공하는 경우, 각각을 하나 하나 문장 쓰는 것보다 한꺼번에 쓰는 것이 편하다. Swift는 이런 작성법이 가능하다.

var (변수1, 변수2, ...) = (값1, 값2, ...)

이것으로 "변수1"에는 "값1", "변수2"에는 "값2" ......라는 식으로 순서대로 값이 할당된다.

오버플로우 방지를 위한 "&"

큰 숫자를 처리하는 경우, 오버플로우나 언더플로우의 발생에 주의하지 않으면 안된다. 오버플로우는 자릿수가 넘쳐서, 정수로 그 형태로 취급할 수 있는 상한과 하한을 초과하는 것이다. 또한 언더플로우는 부동 소수로 취급하는 자릿수를 초과하는 것이다. 이 밖에 연산시 발생하는 오류로 "0으로 나누기"등도 있다.

이러한 연산을 할 시에 오류 발생을 고려해야 할 경우, "값이 이상해져도 좋으니까 오류를 발생시키지 말았으면"할 때도 있을 것이다. 이러한 경우에 연산자 앞에 "&"를 붙여서 오류를 발생시키지 않도록 할 수 있다.

var x = y & + 100000

값 연산할 때 캐스팅(형 변환)하기

Swift는 각각의 값의 유형은 정적으로 정해져 있다. 값이 다른 것끼리 연산하고자 하는 경우에는 어느 한쪽 유형으로 캐스팅해서 맞춰야 한다. 이것은 "타입명(값)"의 형태로 할 수 있다. 예를 들면 아래와 같은 방식이다.

// 정수로 변환
123 + Int(45.67)
// 텍스트로 변환
"123"+ String(456)

 

매우 대충이지만 어째든 값, 변수, 연산의 기본에 대해 대략적으로 정리했다. 이것들은 프로그래밍의 기본 중의 기본이기 때문에, 여기에서 제대로 기억하기로 하자. 다음은 문법의 핵심이되는 "제어 구문"에 대해 설명하겠다.


'Swift' 카테고리의 다른 글

[Swift] 배열과 사전  (0) 2017.12.09
[Swift] 클래스 기본  (0) 2017.12.09
[Swift] 함수  (0) 2017.12.09
[Swift] 제어 구문  (0) 2017.12.09
[Swift] 값, 변수, 연산  (0) 2017.12.09
[Swift] Swift 사용 준비하기  (0) 2017.12.09

+ Recent posts