Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

브래의 슬기로운 코딩 생활

3 - 연산자(operator), 제어문 본문

2 - 겨울방학/Swift 복습

3 - 연산자(operator), 제어문

김브래 2023. 12. 26. 12:29

연산자의 우선순위와 결합성

기본 할당 연산자

할당 연산자(=)는 두 개의 피연산자를 가짐

 

왼쪽에 있는 피연산자는 값이 할당되는 변수 또는 상수이며, 오른쪽에 있는 피연산자는 할당할 값

 

오른쪽 피연산자는 주로 산술식 또는 논리식을 수행하는 표현식이며, 그 결과는 왼쪽 피연산자인 변수나 상수에 할당
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)")