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