본문 바로가기

프로그래밍 공부&정리/Swift

Swift 기초문법(수정중)

iOS


ios는 iPhone, iPad, iPod 운영체제이다.

Mac OS X, watch OS, TV OS와는 상이하다

프로그래밍은 Objective-C(객체지향 언어) 언어와 Swift(스크립트 언어) 언어를 공식적으로 지원한다.

참고로 안드로이드도 Java(객체지향 언어) 언어와 Kotlin(스크립트 언어) 언어를 공식적으로 지원하고 있다.

안드로이드의 Kotlin은 자체적으로 Java를 지원하기 때문에 Kotlin 코드에 Java를 사용해도 되지만 Swift와 Objective-C는 형변환 과정이나 Bridge를 이용하지 않으면 서로 간에 호환되지 않는다.




Swift에서 변수나 상수 선언


var 변수명 : 자료형 = 값

let 변수명 : 자료형 = 값

과 같이 선언한다.

var가 사용되면 변수이고 let이 사용되면 상수이다.

상수는 값을 변경할 수 없다.

' : 자료형'을 생략하면 알아서 값을 보고 추론해서 자료형을 결정한다.




Data의 분류


1. 데이터 개수에 따른 분류

1) scala

데이터 1개로 구성된 경우 scala로 분류한다.


2) vector(collection)

0개 이상의 데이터로 구성된 경우 vector로 분류한다.


  • 이렇게 나누는 첫번째 이유는 메모리는 데이터를 1개 밖에 저장할 수 없기 때문에 scala 데이터는 데이터를 저장하고 하나의 이름만 부여되지만 vector 자료형은 데이터를 저장하고 하나의 대표되는 이름을 부여하고 인덱스나 key를 이용해서 데이터를 저장하도록 해야 하기 때문이다.
  • 두번째 이유는 해석을 할 때 scala 데이터는 통계분석을 하지 않지만 vector는 분석을 할 수 있기 때문이다.

2. 데이터가 저장하는 종류에 따른 분류
1) value 타입
실제 데이터를 저장한다.

2) reference 타입
실제 데이터가 저장된 곳의 참조를 저장한다.

3. 데이터의 변경 여부에 따른 분류
1) immutable
변경이 불가능하다.

2) mutable
변경이 가능하다

  • '변경이 불가능하다'라는 의미는 내부 데이터를 변경하는 것이 불가능하다는 의미이지 주소 자체를 못 바꾼다는 의미는 아니다.

String str = "Hello"

str = "World"


  • 위의 예제는 데이터 내부를 변경한 것이 아니고 World라고 하는 데이터가 저장된 곳의 참조를 str에 대입한 것이므로 str이 저장하고 있는 참조를 변경한 것이다.

int [] ar = {10,20,30};

ar[0] = 40;




기본 자료형


1. 정수 자료형

정수는 양수만 저장하는 자료형과 양수와 음수를 같이 저장할 수 있는 자료형으로 나뉜다.


1) 양수만 저장하는 자료형

UInt8, UInt16, UInt32, UInt64가 있다. 뒤에 붙은 숫자는 bit 수를 의미한다.


2) 음수도 저장하는 자료형

Int8, Int16, Int32, Int64가 있다. 마찬가지로 뒤에 붙은 숫자는 bit 수이다.

Int는 양수와 음수를 모두 저장할 수 있는데 크기는 플랫폼에 따라 다르게 만들어진다.

참고로 플랫폼이란 운영체제의 Word크기다. 한번에 전송되는 데이터 또는 명령어의 크기를 뜻한다.


  • 대부분은 Int를 많이 사용하는데 굳이 이렇게 음수를 저장하는 자료형과 그렇지 않은 자료형을 나눈 것은 메모리 효율 때문이다.
  • 음수를 저장하는 자료형은 양수와 음수의 개수를 동일하게 저장할 수 있어야 한다.
  • 음수가 필요없는 경우의 데이터를 음수를 저장하는 자료형에 저장하게 되면 음수 부분의 낭비가 발생하기 때문에 이런 경우엔 양수만 저장할 수 있는 자료형에 저장하는 것이 좋다.
  • 반복횟수나 데이터의 위치 등은 근본적으로 음수가 될 수 없는 것들이니 참고하자.


2. 실수 자료형

1) Float

32bit이며 정밀도가 소수 7자리이다.


2) Double

64bit이며 정밀도는 소수 15자리이다.


  • 저장은 부동소수점 방식을 이용한다.

3. Bool

true와 false만 저장하는 자료형이다.


4. Character

하나의 유니코드 문자를 저장하는 자료형이다.

\로 시작하는 제어문자(\n : 줄바꿈, \t : 탭, \0 : NULL)

Character는 자료형을 명시하지 않으면 String이 된다.


5. String

0개 이상의 문자를 저장하는 자료형이다.




1. 자료형 별명 만들기

typealias 자료형별명 = 기존자료형

참고로 Swift의 변수는 한 번 자료형이 결정되면 자료형을 변경할 수 없다.


2. 문자열 보간(템플릿)

문자열에 데이터를 포함시키는 것을 말한다.

"문자열\(데이터)"의 형식으로 해주면 된다.


3. 여러 줄의 문자열 표현

"""""" 사이에 문자열을 대입하면 된다.


4. 자료형 확인

데이터 is 자료형

위의 코드는 자료형이 일치하면 true가 되고 그렇지 않으면 false가 리턴된다.


5. 데이터 타입 변환

자료형(데이터)

위의 코드는 데이터를 이용해서 자료형의 데이터를 생성하는 형식이다.


데이터 as 자료형

위의 코드는 강제 형 변환을 하는 것이다.




연산자


1. 할당 연산자

=

오른쪽의 값을 왼쪽의 변수나 상수에 대입한다.

변수나 상수를 선언하는 문장에 데이터를 대입할 때 nil(NULL)을 대입하면 false가 리턴되고 nil이 아닌 데이터가 대입되면 true가 리턴된다.

아래와 같은 명령문이 많이 등장한다.


if let 상수명 = 표현식{

표현식이 nil이 아니면 수행할 내용

즉, 표현식이 true일 때 수행할 내용

}


참고로 true이면 다음 코드로 넘어가고 false이면 {} 안의 내용을 수행하는 것도 있는데 이것은 맛보기로 잠깐 보자면 guard 이다.


2. 산술 연산자

+, -, *, /, %

참고로 &+, &-, &*는 오버플로우를 허용하는 연산자이다.

Overflow란 저장할 수 있는 데이터의 범위를 넘어서는 것을 의미한다.

일반 +나 -는 오버플로우가 발생하면 에러를 발생시키지만 &가 붙는 연산자는 상위 bit를 무시한다.


3. 비교 연산자

==, !=, >, >=, <, <=

2개의 데이터를 비교해서 연산의 결과를 Bool로 리턴해주는 연산자이다.

비교를 할 때는 동일한 자료형끼리 비교하는 것이 좋다.

서로 다른 자료형의 데이터를 비교하면 올바른 결과를 얻어내지 못하거나 에러가 발생한다.


4. 조건 논리 연산자

!, &&, ||

!는 NOT(~가 아니다)을 의미한다.

&&는 AND(그리고)를 의미한다.

||는 OR(또는, 이거나)를 의미한다.


Bool 데이터를 가지고 수행하는 연산자들로,

!는 true와 false를 반대로 만들어주는 연산자이고

&&는 모든 데이터가 true인 경우에만 true를 리턴하는 연산자이다.

그리고 ||는 모든 데이터가 false인 경우에만 false가 리턴되는 연산자이다.


5. 비트 논리 연산자

~, &, |, ^

~는 1의 보수를 의미한다.

&는 비트의 AND를 뜻한다.

|는 비트의 OR를 뜻한다.

^는 비트의 XOR를 의미한다. exclusive OR의 약자로 배타적 OR이라는 뜻이다.


정수 데이터를 가지고 연산을 수행하는데 실제 연산의 수행은 비트 단위로 한 다음 결과를 정수로 리턴하는 연산자이다.

1은 true로 간주하고 0은 false로 간주한다.

~은 0과 1을 반대로 뒤집어서 결과를 리턴한다. (1의 보수)

&는 둘 다 1인 경우만 1이 나오고 나머지 경우는 0이 리턴된다.

|은 둘 다 0인 경우만 0이 나오고 나머지 경우는 1이 리턴된다.

^는 0과 0, 1과 1인 경우는 0 그리고 0과 1, 1과 0인 경우는 1이 나오는 연산이다.

이것들은 embedded programming이나 image processing 그리고 데이터 분석 분야에서 브로드캐스팅 연산에 많이 사용한다.


6. shift 연산자

>>, <<

정수를 가지고 비트 단위로 오른쪽이나 왼쪽으로 미는 연산자이다.

>> 연산자는 왼쪽의 정수 데이터를 오른쪽의 정수 데이터 만큼 오른쪽으로 밀어내는 연산자로 1번 할 때마다 2로 나눈 효과가 나타난다.

<< 연산자는 왼쪽의 정수 데이터를 오른쪽의 정수 데이터 만큼 왼쪽으로 밀어내는 연산자로 1번 할 때마다 2를 곱한 효과가 나타난다.


7. 삼항 연산자

표현식 ? 표현식이 참일 때 수행할 내용 : 표현식이 거짓일 때 수행할 내용

위와 같이 쓰인다.


8. 복합 할당 연산자

연산자 =을 이용하는 구조로, 왼쪽 변수에 들어있는 데이터와 오른쪽 데이터를 연산자를 이용해서 연산을 수행하고 왼쪽의 변수에 대입하는 것이다.

Swift4 버전에는 ++, --가 없어져서 복합할당 연산자로 대신해야 한다.


9. 범위 연산자

시작숫자 ... 끝나는 숫자

위의 코드는 시작하는 숫자부터 끝나는 숫자까지의 순서열을 범위로 생성하는 것이다.


시작숫자 ..< 끝나는 숫자

위의 코드는 시작하는 숫자부터 끝나는 숫자 이전까지의 순서열을 범위로 생성하는 것이다.


  • 시작숫자 보다 끝나는 숫자가 커야 하는데 만약 반대로 하고자 할 때에는 .reverse()를 호출하면 된다.

10. nil 연산자
nil은 가리키는 데이터가 없다는 의미이다.
자료구조에서는 nil 이라는 표현을 사용하고 프로그래밍 언어에서는 NULL 이라고 표현하는 경우가 많다.

표현식 ?? 값

위의 코드는 표현식의 결과가 nil 이라면 값을 선택하겠다는 코드이다.

'프로그래밍 공부&정리 > Swift' 카테고리의 다른 글

[iOS 연구] 대화상자, AlertController  (0) 2019.01.30