브래의 슬기로운 코딩 생활
3 - 연산자(operator), 제어문 본문
연산자의 우선순위와 결합성
기본 할당 연산자
할당 연산자(=)는 두 개의 피연산자를 가짐
왼쪽에 있는 피연산자는 값이 할당되는 변수 또는 상수이며, 오른쪽에 있는 피연산자는 할당할 값
오른쪽 피연산자는 주로 산술식 또는 논리식을 수행하는 표현식이며, 그 결과는 왼쪽 피연산자인 변수나 상수에 할당
var x: Int? // 옵셔널 Int 변수를 선언함
var y = 10 // 일반 Int 변수를 선언하고 초기화함
x = 10 // 값을 x에 할당함, Optional(10)
x = x! + y // x + y의 결과를 x에 할당함, Optional(20)
x = y // y의 값을 x에 할당함, Optional(10)
산술 연산자
보통 두 개의 피연산자를 받는 이항(binary) 연산자
예외로는 값이 음수임을 가리키는 단항 마이너스 연산자(unary negative operator)인 ‘ - ’
var x = -10 // 변수 x에 -10을 할당하기 위해 사용되는 단항 - 연산자
x = x – 5 // x에서 5를 빼는 뺄셈 연산자
- (단항) 변수 또는 표현식의 값을 음수로 만듦
* 곱셈
/ 나눗셈
+ 덧셈
- 뺄셈
% 나머지 연산
하나의 표현식 안에 여러 개의 연산자를 사용할 수 있음
x = y * 10 + z - 5 / 4
복합 할당 연산자
x = x + y
x += y
변수 x값과 변수 y값을 더하고 그 결과를 변수 x에 저장
- x += y x와 y를 더하고 그 결과를 x에 할당
- x -= y x에서 y를 빼고 그 결과를 x에 할당
- x *= y x와 y를 곱하고 그 결과를 x에 할당
- x /= y x를 y로 나누고 그 결과를 x에 할당
- x %= y x를 y로 나눈 나머지를 x에 할당
- x &= y x와 y의 bit AND 연산 결과를 x에 할당
- x |= y x와 y의 bit OR 연산 결과를 x에 할당
증가 연산자와 감소 연산자
단항 연산자
x = x + 1 // x 변수의 값을 1 증가시킴
x = x - 1 // x 변수의 값을 1 감소시킴
위의 표현식은 x의 값을 1 증감
이러한 방법 대신 ++ 연산자와 --연산자를 사용할 수도 있었음
- x++ // x를 1 증가시킴, Swift 3에서 없어짐, x+=1
- x-- // x를 1 감소시킴, Swift 3에서 없어짐, x-=1
비교 연산자
비교의 결과로 불리언(Boolean) 값을 반환
var result: Bool?
var x = 10
var y = 20
result = x < y //true
x == y
x와 y가 같다면 true를 반환
x > y
x가 y보다 크면 true를 반환
x >= y
x가 y보다 크거나 같다면 true를 반환
x < y
x가 y보다 작다면 true를 반환
x <= y
x가 y보다 작거나 같다면 true를 반환
x != y
x와 y가 같지 않다면 true를 반환
불리언 논리 연산자
NOT(!), AND(&&), OR(||)와 XOR(^)
NOT(!) 연산자는 불리언 값 또는 표현식의 결과를 현재와 반대로 바꿈
var flag = true // 변수는 참
var secondFlag = !flag // secondFlag는 거짓으로 설정됨
OR(||) 연산자는 두 개의 피연산자 중에 하나라도 참이면 참(true)을 반환하고, 두 개 모두 거짓이면 거짓(false)을 반환
범위 연산자
닫힌 범위 연산자(closed range operator)
- x...y // x에서 시작하여 y로 끝나는 범위에 포함된 숫자
- 5…8 // 5, 6, 7, 8
반 열린 범위 연산자(half-open range operator)
- x..<y // x부터 시작하여 y가 포함되지 않는 모든 숫자
- 5..<8 // 5, 6, 7
One-Sided Ranges
- let names = ["A", "B", "C", "D"]
for name in names[2...] {
print(name)
} // C, D
삼항 연산자 ?:
비교 연산을 빠르게 하기 위해 삼항 연산자(ternary operator)를 지원
[조건] ? [참 표현식] : [거짓 표현식]
삼항 연산자는 [조건] 부분을 계산하여 참(true) 혹은 거짓(false)을 확인하여 결과가 참이면 [참 표현식] 부분이 실행되며, 거짓이면 [거짓 표현식] 부분을 수행
var x = 1
var y = 2
print("Largest number is \(x > y ? x : y)")
Nil-Coalescing Operator (Nil합병연산자) ??
옵셔널변수 ?? nil일 때 할당되는 값
옵셔널 변수의 값이 nil이면 ?? 다음 값으로 할당됨
옵셔널 변수의 값이 nil이 아니면 언래핑된 값이 나옴
let defaultColor = "black"
var userDefinedColor: String? // defaults to nil
var myColor = userDefinedColor ?? defaultColor //nil이므로 defaultColor인 black으로 할당됨
print(myColor) //black
userDefinedColor = "red"
myColor = userDefinedColor ?? defaultColor //nil이 아니므로 언래핑된 red가 할당됨
print(myColor) //red, 주의 optional(red)가 아님
제어문
for문
조건-증가(condition-increment) for 문
for-in 반복문
조건-증가 for문(없어진 문법)
Swift 3에서 없어진 문법
for 초기화; 조건식; 증감식 {
// 실행될 구문
}
for var i = 0; i < 10; i+=1 { // for i in 0..<10 로 수정해야 함
print(i)
} //error: C-style for statement has been removed in Swift 3
for-in 반복문
for-in 반복문은 컬렉션 또는 숫자 범위 내에 있는 목록을 반복
for 상수명 in 컬렉션 또는 범위 {
// 실행될 코드
}
'상수명'은 반복문이 돌면서 컬렉션 또는 범위에서 가져온 항목을 담게 될 상수
'컬렉션 또는 범위'는 반복문이 반복되면서 현재의 항목을 참조
- 문자열 값들의 배열이거나 범위 연산, 문자들로 구성된 문자열일 수 있음
for index in 1...5 {
print(index)
}
- index라는 이름의 상수에 현재 항목이 할당되면서 시작
_로 참조체(i) 생략 가능
for _ in 1...5 {
print("안녕")
}
for i in 1...5 {
print("\(i) 안녕")
}
배열의 항목 접근
let names = ["A", "B", "C", "D"]
for name in names {
print(name)
}
dictionary의 항목 접근
let numberOfLegs = ["Spider": 8, "Ant": 6, "Dog": 4] //dictionary는 key:value형식의 배열
for (animalName, legCount) in numberOfLegs {
print("\(animalName)s have \(legCount) legs")
}
// Spiders have 8 legs
// Ants have 6 legs
// Dogs have 4 legs
while 반복문
for 반복문은 몇 번 정도 반복해야 할지를 이미 아는 경우에 사용하기 적합
어떠한 조건이 되기 전에 대체 몇 번 정도 반복해야 할지를 알 수는 없지만 그 조건을 만족할 때까지는 반복해야 하는 경우 while 반복문 사용
지정된 조건을 만족할 때까지 작업을 반복
while 조건식 {
// 반복 코드
}
myCount 변수가 1000보다 크지 않을 때까지 반복, 1000이 되는 시점에 반복문이 종료
var myCount = 0
while myCount < 1000 {
myCount+=1
}
print(myCount) // 1000
repeat-while 반복문
swift 1.x의 do … while 반복문을 대신하는 문
repeat … while 반복문의 몸체는 적어도 한번은 실행
repeat {
//
} while 조건식
var i = 10
repeat {
i=i-1
print(i) // 9 8 7 6 5 4 3 2 1 0
} while (i > 0)
반복문에서 빠져나오기(break)
반복문이 완료되는 조건 전에 반복문을 빠져나오는 어떤 조건을 만들 수도 있음
- 특히 무한 루프를 생성할 경우
반복문에서 빠져나오기 위하여 break 문 사용
현재의 반복문에서 빠져나와서 반복문 바로 다음에 있는 코드를 실행
for i in 1..<10 {
if i > 5 break
//중요!! 에러 수정 : error: expected '{' after 'if' condition
print(i)
}
for i in 1..<10 {
if i > 5 {
break
}
print(i)
}
continue문
continue 문은 반복문에서 continue문 이후의 모든 코드를 건너뛰고 반복문의 상단 시작 위치로 돌아감
for i in 1...10 {
if i % 2 == 0 {
continue
}
print(i)
}
if문
다른 프로그래밍 언어들과는 다르게, Swift에서는 if 문 다음의 실행 코드가 한 줄이라도 중괄호({})를 필수적으로 사용해야 한다.
if 불리언 표현식 {
// 불리언 표현식이 참일 경우 수행될 스위프트 코드
}
기본적으로 ‘불리언 표현식’이 참(true)으로 판단되면 중괄호로 감싸인 코드 실행
‘불리언 표현식’이 거짓(false)이면 중괄호로 감싸인 코드는 건너뜀
var x = 10
if x > 5 {
print("5보다 큽니다")
}
if문 조건에서 콤마의 의미(중요)
var a = 1
var b = 2
var c = 3
var d = 4
if a < b && d > c {
print("yes")
}
if a < b, d > c { // if문에서 콤마는 AND(&&)의 의미
print("yes")
}
if -else문
if 문의 다른 변형으로, if 문의 표현식이 거짓(false)으로 평가될 경우에도 수행될 코드를 지정
if 불리언 표현식 {
// 표현식이 참일 경우 실행되는 코드
} else {
// 표현식이 거짓일 경우 실행되는 코드
}
var x = 3
if x % 2 == 0 {
print("짝수입니다")
}else{
print("홀수입니다")
}
다중 if-else문
다양한 조건을 바탕으로 결정해야 할 때 다중 if-else구문을 사용
var num = 3
if (num == 1 || num == 3){
print("당신은 남성이군요!\n")
}else if (num == 2 || num == 4){
print("당신은 여성이군요!\n")
}else {
print("당신은 대한민국 사람이 아니군요!\n")
}
다중 if-else문 : BMI 계산 결과 판정
let weight = 60.0
let height = 170.0
let bmi = weight / (height*height*0.0001) // kg/m*m
var body = ""
if bmi >= 40 {
body = "3단계 비만"
} else if bmi >= 30 && bmi < 40 {
body = "2단계 비만"
} else if bmi >= 25 && bmi < 30 {
body = "1단계 비만"
} else if bmi >= 18.5 && bmi < 25 {
body = "정상"
} else {
body = "저체중"
}
print("BMI:\(bmi), 판정:\(body)")
'2 - 겨울방학 > Swift 복습' 카테고리의 다른 글
5 - 함수와 메서드(method) (0) | 2023.12.27 |
---|---|
4 - guard문, switch-case문 (0) | 2023.12.27 |
2 - 옵셔널 (optional), as(형 변환), is(타입 검사), Any와 AnyObject (1) | 2023.12.26 |
1 - 데이터 타입(자료형), 상수(let), 변수(var) (1) | 2023.12.26 |
0 - 자료 출처 (0) | 2023.12.26 |