📱 Mobile/🚀 Swift

[Swift] Swift 기본 문법

exception_log 2021. 1. 18. 21:36

<!— 본 포스트는 "꼼꼼한 재은씨의 Swift : 문법편"을 공부하며 직접 정리한 포스트입니다. —>

 

🚀작성자의 Swift 정리 원본인 Notion 구경하기 -> www.notion.so/Swift-59150070adb0467ea11d4f69090dbb24

Swift 기본 문법

✔️ 스위프트는 여러 언어의 경험 연장 선상에 있다. 따라서 기존에 어떤 언어를 다루어 본 경험이 있다면 스위프트 문법을 학습하면서 많은 부분이 비슷하다고 여길지도 모른다.

스위프트 기본 문법

  • 헤더 파일을 작성할 필요가 없다.

    → 헤더파일과 소스파일이 통합된 하나의 *.swift 파일에서 필요한 내용을 자유롭게 정의하고 사용하면 된다. 스위프트는 클래스나 구조체를 선언할 때 정의구현을 분리하지 않고 통합하여 작성하는 특징이 있다.

  • 스위프트는 대소문자를 구분한다. 따라서 다음과 같은 관례를 지키는 것이 좋다.
    1. 함수와 메소드, 인스턴스 명의 첫 글자는 대문자로
    1. 클래스와 구조체, 프로토콜 등 객체의 첫 글자는 대문자
    var a = 30
    var A = 30
    
    -> 두 변수는 완전히 다른 변수이다.
  • 구문 끝의 세미콜론은 생략 가능
  • 엔트리포인트 (시작점) 으로 사용되는 main() 함수가 없다. 대신, @UIApplicationMain 어노테이션을 활용하여 앱을 시작하는 객체를 지장한다. 하나의 앱에서 @UIApplicationMain 어노테이션이 붙은 객체는 단 하나뿐이어야 한다.
  • 문자열 뿐 아니라 문자도 큰 따옴표를 사용한다.
  • import 키워드를 사용하지만, 라이브러리와 프레임워크의 참조 용도이다.
  • C나 자바처럼 한 줄 주석, 여러 줄 주석 처리 방식을 모두 사용 가능하다.
    /*
      ViewController.swift
      FriendsCollection
    
      Created by exception on 2021/01/18.
    */ 
    
    // 주석주석
    
    주석은 중첩하여 사용할 수 있다.
  • try ~ catch 방식 오류 처리를 지원한다.

변수와 상수

✔️ 값을 저장한, 혹은 저장할 메모리 주소값을 이름으로 연결해 놓은 것을 변수와 상수라고 한다.

✔️ 변수는 한 번 저장된 값을 다른 값으로 변경할 수 없는 반면에 변수는 필요에 따라 저장된 값을 몇 번이라도 다른 값으로 변경할 수 있다.

✔️ 변수라고 해서 아무 값이나 마음대로 저장할 수 있는 것은 아니다. 변수의 값을 변경할 때에는 처음 저장했던 값과 일치하는 타입이어야 한다.

✔️ 프로그래밍 소스 관리 목적상 변하지 않는 값은 상수에 저장하는 것이 훨씬 효율적이다. 실수로 값이 변경되는 것도 막을 수 있고, 값의 성격이 명확히 분류되어 관리에도 용이하기 때문이다.

✔️ 억지로 자료형을 집어넣으면? → 에러 발생! (컴파일 에러)

변수와 상수 정의

변수를 선언할 때 : var + 변수명
상수를 선언할 때 : let + 상수명

var year = 1999 // 정수형 변수
let message = "Hello, world" // 문자열 변수

🚀 스위프트에서는 선언과 초기화를 분리할 수도 있다.

var year: Int // 정수형 변수 선언
year = 1999 // 초기화

 

🚀 변수와 상수의 이름 정의하기

  1. 알파벳과 한글 자음 및 모음, 아라비아 숫자를 사용할 수 있으며, 특수 기호나 한자, 이미지용 바이너리 코드까지 사용할 수 있다.
    var str = "HI"
    var 마스터 = "저자"
    var aㅁs = 20.13
    var ❤️ = "H"
  1. 연산자와 혼동할 수 있는 [ +, - , *, / ] 및 공백은 변수, 상수 명에 사용할 수 없다. 단, _ (언더바)는 사용할 수 있다.
    var ab+c = "ab plus c" // X
    var ab_c = "ok" // OK
  1. 스위프트에서 예약어나 키워드로 등록되어 있는 단어는 변수나 상수명에 사용될 수 없다. 단, 대소문자를 바꾸어 사용하는 것은 가능하다.
    var class = 1 // X
    var enum = 2 // X
    var extension = 3 // X
    
    var Class = 1 // O
    var Protocol = 2 // O
  1. 변수나 상수명의 첫 번째 자리에 숫자가 올 수 없다.
    var 1abc = 123 // X
    
    var abc2 = 123 // O
    var a2cb2 = 123 //O

 

기본 자료형

🚀 Int

  • 부호 있는 정수값을 저장할 수 있다.
  • -128 부터 127까지의 값을 저장할 수 있다. (8bit)
  • Int8, Int16, Int32, Int64 서브 자료형
  • 각각 8bit, 16bit, 32bit, 64bit의 크기

 

🚀 UInt

  • Unsigned Integer를 줄인 단어로 부호가 없는 정수를 의미한다.
  • 0을 포함하여 자연수 범위의 정수를 저장할 수 있다.
  • 저장할 수 있는 범위는 0 ~ 255
  • UInt도 UInt8, UInt16, UInt32, UInt64 로 구분된 서브 자료형 존재
  • 각 서브 자료형의 최소값은 0이고, 서브 자료형별 최대값은 (Int 서브 자료형 최대값 x 2) + 1 이다.

 

🚀 Double & Float

  • Float 타입은 32bit 부동 소수점 자료형 ( 소수점 아래 7~8 자리까지의 값을 정확하게 저장 가능 )
  • Double 타입은 64bit 부동 소수점 자료형 ( 소수점 아래 15 ~ 16 자리까지의 값을 정확하게 저장 가능 )
  • Double값이 더 세밀한 값을 저장하는 데에 유리하고 당연히 메모리에서 차지하는 크기도 크다.
  • Float 타입의 서브 자료형으로 사용되는 Float32와 Float64는 실제로 존재하는 객체가 아니라 typealias에 의해 정의된 타입들이다. 여기서 typealias 란, 타입을 가리키는 표현만 달리하는 것을 의미한다.
// A 32-bit floating point type
typealias Float32 = Float

// A 64-bit floating point type
typealias Float64 = Double
  • 두 타입을 알리어스로 정의하고 있는 구문을 살펴보면 정의된 Float32는 Float이지만, Float64는 Double이다. 32bit 실수는 Float로 처리하고, 64bit 실수는 Double로 처리한다는 의미로 해석할 수 있다.

 

🚀 Bool

  • true / false 두 가지 종류의 값만 가질 수 있는 자료형으로서 주로 논리값을 저장하기 위해 사용된다.

 

🚀 String

  • 문자열을 저장할 때 사용된다.

 

🚀 Character

  • 한 개의 문자를 저장할 수 있는 단일 자료형이다. String 타입에 저장된 문자열을 하나씩 분해하면 Character 타입이 된다.

 

타입 추론과 타입 어노테이션

타입 어노테이션이란, 변수나 상수를 선언할 때 그 타입을 명시적으로 선언해 줌으로써 어떤 타입의 값이 저장될 것인지를 컴파일러에 직접 알려주는 문법이다.
var name: String // 명시적 String 타입
var firstChr: Character // 명시적 Character 타입
var pi : Float // 명시적 Float 타입
var flag : Bool // 명시적 Bool 타입
타입 추론은 변수나 상수를 초기화할 때 입력된 값을 분석하여 변수에 적절한 타입을 컴파일러가 스스로 추론하는 기능이다.

✔️ 예를 들어, 초기 값으로 "Hi"가 입력되었다면 '아, 이 변수의 타입은 String 이겠군!' 이라고 추론하는 것이다.

✔️ 반드시 타입 어노테이션을 사용해야 하는 다음 두 가지 경우를 제외하면 타입을 명시적으로 선언하지 않아도 된다.

  1. 선언과 초기화를 분류할 경우
    // 선언 + 타입 어노테이션
    var year : Int
    
    // 초기화
    year = 1999
  1. 타입 추론으로 얻어지는 타입이 아닌, 다른 타입을 직접 지정할 필요가 있을 때
    var temper1 = 3 // Int 값으로 정의
    var temper2 : Float = 3 // Float 타입으로 정의
    
    -> 위의 두 값을 출력해보면 컴파일러는 3과 3.0으로 처리한다. 

타입이 다른 변수끼리의 결합

✔️ 스위프트에서는 서로 다른 타입의 변수나 상수끼리의 결합 연산은 허용되지 않는다.

Int(<정수로 바꾸고 싶은 문자열>)

위처럼 새로운 인스턴스를 생성하여 합쳐주면 된다. 

🚀 문자열 템플릿

  • 변수나 상수의 값을 문자열 속에 포함시키는 방버븡로, 정수나 실수 등의 문자열이 아닌 값도 변환 과정이 없이 사용할 수 있도록 스위프트에서 제공하는 기능이다.
let apple = 3
let banana = 2

print("과일은 총 \(apple + banana)개 입니다.")

 

연산자

산술 연산자

구분 연산자 사용 예 의미
단항 연산자 - -a 값의 부호를 변경
이항 연산자 + a + b 두 개의 값을 더함
이항 연산자 - a - b 연산자 앞의 값에서 뒤의 값을 뺌
이항 연산자 * a * b 두 개의 값을 곱함
이항 연산자 / a / b 연산자 앞의 값을 뒤의 값으로 나눔
이항 연산자 % a % b 연산자 앞의 값을 뒤의 값으로 나눈 나머지

비교 연산자

연산자 사용 예 의미
< a < b a가 b보다 작으면 true, 아니면 false
> = a > b a가 b보다 크면 true, 아니면 false
< = a < == b a가 b보다 작거나 같으면 true, 아니면 false
a > == b a가 b보다 크거나 같으면 true, 아니면 false
== a == b a가 b와 같으면 true, 같지 않으면 false (수학에서의 =와 같음)
! = a ! = b a와 b가 같지 않으면 true, 같으면 false

논리 연산자

연산자 사용 예 의미
! (NOT) !a a가 true이면 false, false이면 true 반환
&& (AND) a && b a와 b 모두 true일 때 true, 둘 중 하나라도 false이면 false 반환
|| (OR) a || b a 또는 b 둘 중 하나라도 true라면 true, 둘 다 false일 떄 false 반환

범위 연산자

🚀 닫힌 범위 연산자 : 주어진 피연산자 a, b를 포함하는 범위를 나타내는 연산자

1 ... 5

연산자가 나타내는 값 : 1, 2, 3, 4, 5

🚀 반 닫힌 범위 연산자 : 주어진 양쪽 경계 중에서 왼쪽은 포함, 오른쪽은 포함하지 않는 연산자, 반대로 사용 불가

1 ..< 5

1, 2, 3, 4
// 1 >.. 5 는 불가!

대입 연산자

대입연산자 사용 예시 의미
= a = 1 변수 a에 1을 대입
+= a += 1 a = a + 1
-= a -= 3 a = a - 3
*= a *= 3 a = a * 3
/= a /= 3 a = a / 3
%= a %= 3 a = a % 3
<< = a << = 3 a = a << 3
>> = a >> = 3 a = a >> 3
&= a &= 3 a = a & b
^= a ^= 3 a = a ^ b
|= a |= 3 a = a | b

 

반응형

'📱 Mobile > 🚀 Swift' 카테고리의 다른 글

[Swift] 집단 자료형  (0) 2021.01.20
[Swift] 흐름 제어 구문  (0) 2021.01.19
[Swift] Swift 개요  (0) 2021.01.17
[Swift] 배열, for 루프, while 루프  (0) 2020.12.22
[Swift] 상수와 변수  (0) 2020.12.13