[Swift 5] The Basics 1

Junyoung Park·2022년 2월 11일
0

Swift5 Docs

목록 보기
1/37

  • 다음은 Swift 5.6 Doc의 The Basics 공부 내용을 정리했음을 밝힙니다.

The Basics

스위프트: iOS 지원 프로그래밍 언어로 C, Objective-C와 유사하다.

  • 데이터 타입(int, double, float, boolean, string)과 컬렉션 타입(array, set, dictionary) 지원. 튜플을 사용해 여러 개의 값을 한 번에 전달
  • 이름 명명을 통해 변수에 값 저장, 참조 가능, 값 변경할 수 없는 상수 사용으로 안전하고 클린한 코딩 가능
  • 옵셔널 타입을 통해 값이 있거나 없는 상황 모두를 다룰 수 있음 ▷ nil 또는 특정 값이 있는 경우를 모두 안전하게 핸들링
  • 타입 세이프티 기능을 통해 자동으로 파라미터 전달 변수의 타입 확인

스위프트의 특징으로 널-세이프티, 타입-세이프티를 꼽을 수 있고, "?"라는 옵셔널 기능을 통해 변수를 선언할 때 주의해야 한다. 코틀린에서도 같은 기능을 보았는데, 클래스나 함수에 다양한 파라미터를 통해 값을 전달해야 할 때 안전하지 못한 상황을 방지할 수 있었다.

상수와 변수

상수와 변수 선언

상수는 값을 선언한 이후에 바꿀 수 없지만, 변수는 바꿀 수 있다.

  • 상수 선언 방법: let constantName:type = value
  • 변수 선언 방법: var variableName:type = value

초기화한 이후 값을 줘도 된다.

변경할 수 없는 값은 미리 상수로 선언해서 안전하게 사용하는 습관을 갖자.

타입 어노테이션

변수/상수 이름 다음 콜론 :을 통해 데이터 타입을 명시할 수 있다. 이때 대입되는 값은 어노테이션된 데이터 타입과 일치해야 한다. 같은 종류의 데이터 타입일 때에는 var a, b, c:Int와 같이 한 번에 선언할 수 있다.

  • 스위프트는 변수/상수를 초기화할 때 주는 값의 타입을 자동으로 추론하기 때문에 :을 통해 직접적으로 타입 어노테이션하지 않아도 된다.

변경할 수 없는 값은 미리 상수로 선언해서 안전하게 사용하는 습관을 갖자.

상수와 변수 명명

변수/상수명은 대부분의 문자를 사용할 수 있다. 이때 숫자로 시작하거나 공백 문자, 수학 기호 등은 사용해서는 안 된다. 선언 이후에는 동일 이름을 사용할 수 없고 다른 타입의 값을 저장할 수 없다. 변수를 상수로, 상수를 변수로 바꿀 수도 없다.

상수와 변수 출력

print() 함수를 통해 상수와 변수에 저장된 값을 출력할 수 있다. 이때 print() 함수는 넘겨받은 파라미터 값을 출력한다.

  • 문자열 인터폴레이션(interpolation): print("string_values") 출력 시 문자열 내부에 상수나 변수 값을 함께 출력할 수 있는데, \(variable or constant)로 감싸면 된다.

    파이썬의 F-string과 유사하게 편하게 문자열을 쓸 수 있는 기능이다.

주석

  • 싱글 라인: /single-line/
  • 멀티 라인: /*multiple-lines*/ 주석 안에(nested) 또 다른 주석이 있을 수도 있다.

세미콜론

스위프트는 커맨드를 라인 별로 구분한다. 하지만 싱글 라인에서 여러 명령어를 쓰고 싶을 때에는 ;를 쓴다.

정수

정수 및 바운드

정수 데이터 타입은 signed/unsigned로 구분된다.
스위프트는 각 정수(signed/unsigned)를 8, 16, 32, 64비트 형태로 제공하는데, 최댓값과 최솟값을 max, min 프로퍼티로 알 수 있다.
9223372036854775807

Int / Uint

64비트 플랫폼의 기본 정수 타입은 Int64로 signed(양수, 음수, 0) 형태 정수를 최댓값 9223372036854775807, 최솟값-9223372036854775808까지 제공한다.

정확한 값보다는 플랫폼에 따라 Int가 지원하는 비트가 달라진다는 점을 확인하자.

Uint는 음수값을 사용하지 않는 환경에서만 사용하자.

실수

실수를 표현하는 데이터 타입으로 64비트 Double, 32비트 Float로 구분된다. 정확도는 Double이 더 높다.

타입 세이프티와 타입 추론

스위프트는 타입 세이프 언어로 코드 내 값의 타입이 무엇인지 명시해주기 때문에 데이터 타입이 다른 곳에 잘못 값을 입력하는 걸 방지해준다. 이때 타입 어노테이션을 할 필요 없이 초깃값으로 던져준 데이터 타입을 스위프트 컴파일러가 자동으로 추론한다.

  • 두 개 이상의 데이터 타입이 사용된 경우 컴파일러가 표현형이 "더 큰" 데이터 타입을 자동으로 추론한다. 정수 + 실수 연산은 floating point number로 추론된다.

숫자 리터럴

리터럴은 코드를 통해 개발자가 할당한 값이다. 숫자 리터럴은 일반적으로 10진수이지만, prefix를 통해 2진법, 8진법, 16진법으로 표현할 수 있다.

var dec_17 = 17
var bin_17 = 0b10001
var oct_17 = 0o21
var hex_17 = 0x11

실수 리터럴의 경우 지수(exponent)를 통해 값을 표현할 수 있다. e 앞에는 base 수, 뒤에는 지수가 들어간다. 1.7e2이라는 수는 '1.71021.7 * 10^2'이다.

숫자 변환

숫자 타입 변환

오버플로우를 방지하기 위해 데이터 타입이 지원하는 수 범위를 고려하자.

정수 간 변환

정수 데이터가 지원하지 않는 값이 할당되면 에러가 난다. 예를 들어 -128~127 범위인 Int8 데이터 타입에 128은 줄 수 없다.

자바 같은 경우 범위를 벗어나면 비트 값이 이상하게 바뀌었는데, 스위프트의 경우 빌드 이전 데이터 타입과 범위를 확인해 에러를 확인할 수 있다.

다른 종류의 정수끼리 계산할 때에는 더 큰 범위를 지원하는 정수 타입으로 나머지 정수를 캐스팅하자.

정수와 실수 간 변환

정수와 실수를 연산할 때에는 타입을 명시해야 한다.

let pi = 3.141592
let num = 1234
var int_to_double = pi + (Double) num
var double_to_int = (Int) pi + num
  • 리터럴을 연산할 때에는 실수와 정수 캐스팅을 할 필요가 없었지만, 변수/상수 연산에는 필요하다.

타입 앨리아스

특정 타입을 원하는 이름으로 별칭할 수 있다.

typealias AudioSample = Int64
var maxAmplitudeFound = AudioSample.max

타입 앨리아스를 통해 이해가 더 쉬운 코딩이 가능하다.

불리언 타입

논리적 데이터 타입 불리언을 통해 참/거짓을 확인할 수 있다.

  • 다른 언어에서는 조건문의 true 조건을 0을 제외한 다른 수를 넘겨주는 것으로 실행할 수 있었지만 스위프트의 타입 세이프티는 이를 허용하지 않는다. 따라서 == 등 논리적 비교 연산자를 사용해야 한다.
let i = 1
if i == i {
...
}

조건문 쓸 때 ==, != 등 비교 연산자를 붙이는 데 주의하자.

튜플

튜플은 여러 종류의 값을 괄호를 사용해 하나로 묶은 데이터 타입이다. 어떤 종류의 타입이든 한 꺼번에 튜플로 만들어질 수 있다.

  • 파이썬과 마찬가지로 튜플 내 저장된 값의 개수만큼의 변수에 그대로 언패킹할 수 있다. 튜플을 언패킹할 때 언패킹한 값이 담기는 상수 또는 변수를 역시 괄호로 묶어주면 된다.
let tuple_example = (1, "2", 3.14, true)
let (int_ex, str_ex, double_ex, boolean_ex) = tuple_example
  • 인덱스로도 튜플 값을 참조할 수 있다. 이때 스위프트에서 인덱스를 접근하는 방법은 인덱스를 참조할 튜플/배열에 .을 통해 접근한다는 데 주의하자.
let tuple_example = (1, "2", 3.14, true)
print(tuple_example.1)

파이썬과 달리 스위프트는 튜플 내 저장된 데이터를 변경할 수 있도록 허용한다. 하지만 이때 초깃값으로 정해진 '데이터 타입'과 같은 값만 입력할 수 있으므로 차이점을 파악하자.

profile
JUST DO IT

0개의 댓글