[Swift] Swift Basic


Swift 기본 문법 정리


이번 포스팅은 인프런의 Ellen Swift Class를 보고 스위프트의 기본적인 문법 부분을 정리 기록하기 위해 한 포스팅이다.
나를 포함해서 Swift 이외의 다른 언어로 알고리즘 문제를 푼 경험이 있다면 그냥 모든 언어에 존재하는 문법이지만 스위프트에서는 이렇게 표현했구나 정도로만 가볍게 보고 넘어가도 될 내용이다.

문자열 보간법

var name = "KkoHma"
var age = 20
var job = "학생"

print("저는 /(name)입니다. /(age)살이고, /(job)입니다.")
// 저는 KkoHMa입니다 20살이고 학생입니다.

변수와 상수

일반적으로 변수와 상수를 통틀어 변수라고 말하기도 한다.

var num1 = 1   // 변수
let num2 = 2   // 상수

비어있는 변수를 먼저 선언할 수도 있다.

var num: Int
num = 10

스위프트의 데이터 타입

데이터를 메모리라는 공간에 어떤 크기, 형태로 저장할 것인지 정해야하기 때문에 타입을 정한다.
(스위프트는 모든 타입에 대문자를 사용)

타입 어노테이션을 통해 변수를 선언하면서 타입도 지정할 수 있다.

var I: Int = 4
var j: Double = 4

// i는 4, j는 4.0

굳이 타입을 지정하지 않아도 Swift에서는 타입 추론을 통해 컴파일러가 타입을 유추해서 알맞은 타입으로 저장한다.

타입 변환

let Str = "123"
let number = Int(str)

//123 

타입을 알아보는 방법

  • Option을 누르고 변수를 누르면 변수의 타입을 알 수 있다.
  • type(of: ??)를 통해 알 수 있다.

스위프트의 조건문

if문 기본 포맷

if 조건 {
    print("수행")
}
else if 조건 {
    print("수행")
}
else {
    print("수행")
}

조건문에 논리 연산자 활용

if 조건 && 조건 {
    print("and 일 때 수행")
} 
if 조건 || 조건 {
    print("or 일 때 수행")
}

switch문 기본 포맷

switch 표현식 {
case 조건1 :
	print("수행1")
case 조건2 :
	print("수행2")
default :
	print("기본 수행")
}

if문

  • 조건 2개도 사용 가능하고 응용 범위가 넓음
  • Bool 값을 조건으로 주어야 함

Switch문

  • if문보다 가독성이 좋고, 실제 앱 등에서 분기처리에 많이 사용
  • Bool 값을 조건으로 줄 수 없음
    • 부등식을 사용할 수 없음. 범위 연산자로 범위의 케이스를 만들어야 함

스위치문과 바인딩

var num = 6

switch num {
case let a:      // let a = num
    print("숫자: \(a)")
default:
    break
}

스위치문과 where절

num = 7

switch num {
case let x where x % 2 == 0:      // let x = num
    print("짝수 숫자: \(x)")
case let x where x % 2 != 0:
    print("홀수 숫자: \(x)")
default:
    break
}

//where절은 대부분 밸류바인딩 패턴과 함께 사용한다.

튜플

  • 여러가지로 연관된 데이터를 저장하는 법
  • 파이썬과는 달리 스위프트에서는 튜플을 컬렉션 타입에 포함시키지 않는 듯?
let twoNumbers: (Int, Int) = (1, 2)
let theeValues = ("문자열1", 12, "문자열2")
let namedValues = (name1: "문자열", name2: 12)

// 멤버(데이터의 종류 및 갯수)는 튜플을 만들때 결정되므로 "추가"/"삭제" 불가

삼항연산자

  • 기존의 if/else문과 완벽하게 동일
  • 선택지가 두가지일 경우에만 사용
// if/else문
if a > 0 {
	name = "스티브 잡스"	
} else {
	name = "팀 쿡"

// 삼항 연산자
var name = a > 0 ? "스티브 잡스" : "팀 쿡"

범위 연산자

  • 제한된 숫자의 범위를 표기하기 위한 연산자
  • 자체가 특별한 타입을 의미

  • 기본적으로 내림차순 형식으로 표기 불가능
    • (1…10).reversed()로 표현 가능
  • 실수 형식의 범위도 가능하긴 함

  • Switch문에서 패턴 매칭에 사용
  • for문과 주로 함께 사용 (정수 한정)
  • 배열의 서브스크립트 문법과 함께 사용
let range1 = 1...5 // 1 이상 5 이하
let range1 = 1...   // 1 이상
let range1 = ...5  // 5 이하
let range1 = 1...<5 // 1 이상 5 미만
let range1 = ...<5  // 5 미만

패턴매칭 연산자

0...50 ~= num
//num이 0에서 50 사이의 수라면

//ex)
If num ~= 0...50 {
	수행
}

반복문

for문

for문의 기본 포맷

for _ in 0...10 {
	print("hi, Swift")
}
// _(언더바)는 와일드 카드 패턴
// 반복문 내부에서 반복상수를 사용하고 싶지 않을 때 활용

사용 가능한 타입

  • 범위 연산자 -> 정수형태로 출력
  • 배열 등 컬랙션 타입 -> 원소가 출력
  • 문자열 -> 문자가 출력
  • stride(from: a, to: b, by: c) -> a부터 b까지 c씩 건너뛴 값 출력

while문

while문의 기본 포맷

var num = 0

while num < 3 {
	print(num)
	num += 1
}

다른 언어에서의 do-while문 대신에 Swift에는 repeat-while문이 있다.

제어 전송문

Continue

  • 반복문 내에서 만났을 때 조건에 맞으면 다음 반복 주기로 넘어감

break

  • 반복문 내에서 만났을 때 조건에 맞으면 반복문을 종료

주의 : 제어 전송문은 가장 인접한 반복문에 영향을 미침

Labeled Statement를 활용한 제어 전송문 활용

// 반복문을 중첩적으로 사용할때, 각 반복문에 이름을 붙여서, 가장 인접한 범위 이외의 반복문도 제어가능


OUTER: for i in 0...3 {
    print("OUTER \(i)")
    INNER: for j in 0...3 {
        if i > 1 {
            print("  j :", j)
            continue OUTER
            //break OUTER
        }
        print("  INNER \(j)")
    }
    
}

아직까지는 1.5배속으로 들을만큼 워낙 기본적인 내용이고 다 아는 내용이라서 스위프트라는 언어가 처음이니까 하는 느낌으로 강의를 들었다.
이번주 내로 스위프트 기본 문법을 끝내고 주말부터는 중급 단계로 넘어가는 게 작은 목표다.


빨리 다 채워나가버리자



참고

Ellen Swift Class






© 2021. by hminkim