Swift - 기본 연산자

임성빈·2022년 2월 18일
0

Swift

목록 보기
2/26
post-thumbnail
post-custom-banner

용어

연산자에는 단항, 이항 그리고 삼항 연산자가 있다.

  • 단항 연산자는 -a, !b, c! 와 같이 하나의 대상에 앞뒤에 바로 붙여 사용하는 연사자이다.
  • 이항 연산자는 2 + 3 같이 두 대상 사이에 위치하는 연산자이다.
  • 삼한 연산자는 a ? b : c 형태로 Swift에 삼항 연산자는 이 연산자 단 하나만 존재한다.

할당 연산자

할당 연산자는 값을 초기화 시키거나 변경한다.
상수, 변수 모두에 사용 가능하다.

let b = 1
var a = 2
a = b
// a의 값은 10

튜플을 이용해 여러 값을 한번에 할당할 수 있다.

let (x, y) = (3, 4)
// x는 3, y는 4의 값이 저장

사칙 연산자

Swift는 모든 숫자 형에서 사용 가능한 4가지 표준 사칙 연산자를 지원한다.

  • 덧셈 (+)
  • 뺄셈 (-)
  • 곱셈 (*)
  • 나눗셈 (/)
1 + 2		// 3
4 - 3		// 1
5 * 6		// 30
9.0 / 4.5	// 2.0

Swift는 사칙 연산의 값이 오버플로우 되는 것을 허용하지 않는다.
만약 허용하고 싶다면 오버플로우 연산자를 이용해 지원할 수 있다.

덧셈 연산자는 문자열을 합치기 위해 사용할 수 있다.

"hello, " + "world"
// equals "hello, world"

나머지 연산자

a % b 와 같이 나머지 연산을 지원한다.

9 % 4		// 1
-9 % 4		// -1

단항 음수 연산자

숫자 값은 - 로 표현되는 단항 음수 연산자에 의해 부호가 변한다.

let three = 3
let minusThree = -three			// minusThree == -3
let plusThree = -minusThree 	// plusThree == 3

단항 양수 연산자

+ 로 표현되는 단항 양수 연산자는 부호에 아무런 영향을 끼치지 않는다.

let minusSix = -6
let alsoMinusSix = +minusSix 	// alsoMinusSix == -6

합성 할당 연산자

a = a + 2 와 같이 할당연산(=)과 덧셈연산(+)으로 구성된 연산을 합성해 += 형태로 축약해 사용 가능하다.

var a = 1
a += 2
// a == 3

주의
합성 할당 연산자는 값을 반환하지 않는다. 즉, let b = a += 2 와 같은 문법은 사용할 수 없다.

비교 연산자

Swift에서는 표준 C에서 제공하는 비교 연산자를 모두 지원한다.

  • 같다 ( a == b )
  • 같지않다 ( a != b )
  • 크다 ( a > b )
  • 작다 ( a < b )
  • 크거나 같다 ( a >= b )
  • 작거나 같다 ( a <= b )

각 비교연산은 ture 혹은 false 값을 반환한다.

1 == 1   // true
2 != 1   // true
2 > 1    // true
1 < 2    // true
1 >= 1   // true
2 <= 1   // false

비교 연산은 if-else와 같은 조건 구문에서 자주 사용된다.

let name = "seongbin"
if name == "seongbin" {
	print("hi, seongbin")
} else {
	print("who are you, \(name)?")
}
// Prints "hi, seongbin"

같은 타입의 값을 갖는 두 개의 튜플을 비교할 수 있다.
튜플의 비교는 왼쪽에서 오른쪽으로 이뤄지고 한번에 한개의 값만 비교한다.
이 비교는 서로 다른 두 값을 비교하게 될 때까지 수행한다.

( 1, "apple" ) < ( 2, "bird" ) 		// true
( 3, "cat" ) < ( 3, "dog" )    		// true
( 4, "egg" ) == ( 4, "egg" ) 		// true

튜플은 비교 연산자가 해당 값을 비교할 수 있는 경우에만 비교를 수행할 수 있다.

( "blue", -1 ) < ( "purple", 1) 	// true
( "a", false ) < ( "b", true ) 		//error, Boolean 값은 < 연산자로 비교할 수 없다.

삼항 조건 연산자

삼항 조건 연산자는 question ? answer1 : answer2 의 구조를 갖는다.
question 조건이 true인 경우 answer1 이 false인 경우 answer2 가 실행된다.
삼항 조건 연산자는 if-else 코드의 축약이다.

if question {
	answer1
} else {
	answer2
}

삼항 조건 연산의 실제 예시

let contentHeight = 40
let hasHeader = true
let rorwHeight = contentHeight + ( hasHeader ? 50 : 30 )
// rowHeight == 40 + 50 == 90

삼항 조건 연산자는 코드를 짧게 만들어 가독성을 높여준다.


Nil 병합 연산자

nil 병합 연산자는 a ?? b 형태를 갖는 연산자이다.
옵셔녈 a 를 벗겨서 만약 anil 인 경우 b 를 반환 한다.

nil 병합 연산자는 다음 코드의 축약형이다.

a != nil ? a! : b

삼항 조건 연산자를 사용했는데,
옵셔널 anil 이 아니라는 것이 true이면 a 를 unwrap하고,
옵셔널 anil 이 아니라는 것이 false 이면 b 를 반환하라는 의미이다.

이해를 돕기 위한 예시

let defaultName = "seongbin"
var userDefindedName: String? // 이 값은 defaults 값이 nil

var nameToUse = userDefindedName ?? defaultName
// userDefindedName 값이 nil이므로,
// nameToUse 값은 defaultName인 "seongbin"

userDefindedName = "Lim"
nameToUse = userDefindedName ?? defaultName
// userDefindedName 값이 nil이 아니므로,
// nameToUse 값은 "Lim"

범위 연산자

닫힌 범위 연산자

(a..b) 의 형태로 범위의 시작과 끝이 있는 연산자이다.
for-in loop에서 자주 사용된다.

for index in 1...5 {
	print("\(index) times 5 is \(index * 5)")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25

반 닫힌 범위 연산자

(a..<b) 의 형태로 a 부터 b 보다 작을 때까지의 범위를 갖는다.
즉, a 부터 b-1 까지 값을 갖는다.
보통 배열이 배열의 크기 -1의 인덱스를 갖기 때문에 이 반 닫힌 범위 연산자는 배열을 다루는데 유용하다.

let names = [ "짱구", "철수", "훈이", "맹구", "이슬" ]
let count = names.count
for i in 0..<count {
	print("Person \(i + 1) is called \(names[i])")
}
// Person 1 is called 짱구
// Person 2 is called 철수
// Person 3 is called 훈이
// Person 4 is called 맹구
// Person 5 is called 이슬

단방향 범위

[a..] [..a] 의 형태로 범위의 시작 혹은 끝만 지정해 사용하는 범위 연산자이다.
지정한 시작 값 혹은 끝 값은 범위에 포함된다.

for name in names[2...] {
	print(name)
}
// 훈이
// 맹구
// 이슬

for name in names[...2] {
	print(name)
}
// 짱구
// 철수
// 훈이

단방향 범위 연산자는 subscript뿐만 아니라 아래와 같이 특정 값을 포함하는지 여부를 확인할 때도 사용 가능하다.

let range = ...5
range.contains(7)	// false
range.contains(4)	// true
range. contains(-1) // true

논리 연산자

Swift에서는 세가지 표준 논리 연산자를 지원한다.

  • 논리 부정 NOT ( !a )
  • 논리 곱 AND ( a && b )
  • 논리 합 OR ( a || b )

논리 부정 연산자

let allowedEntry = false

if !allowedEntry {
	print("ACCESS DENIED")
}
// Prints "ACCESS DENIED"

논리 곱 연산자

let enteredDoorCode = true
let passedRetinaScan = false

if enteredDoorCode && passedRetinaScan {
	print("Welcome!")
} else {
	print("ACCESS DENIED")
}
// Prints "ACCESS DENIED"

논리 합 연산자

let hasDoorKey = false
let knowsOverridePassword = true

if hasDoorKey || knowsOverridePassword {
    print("Welcome!")
} else {
    print("ACCESS DENIED")
}
// Prints "Welcome!"

논리 연산자의 조합

두 개 이상의 논리 연산자를 조합해서 사용할 수 있다.

if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
    print("Welcome!")
} else {
    print("ACCESS DENIED")
}
// Prints "Welcome!"

Swift의 논리 연산자 &&|| 는 왼쪽의 표현을 우선해서 논리 계산한다.

명시적 괄호

논리 연산자의 적용 우선 순위를 연산자에 맡기지 않고 명시적으로 괄호를 사용해 계산 순서를 지정할 수 있다.

if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
    print("Welcome!")
} else {
    print("ACCESS DENIED")
}
// Prints "Welcome!"

괄호를 사용하면 가독성이 높아져 코드의 의도를 명확하게 파악 하는데 도움이 된다.

profile
iOS 앱개발
post-custom-banner

0개의 댓글