[Swift] Swift? / Basic Operators

김승윤·2022년 4월 26일

Swift 정리

목록 보기
1/6
post-thumbnail

Swift?

Swift는 iOS, macOS, watchOS, tvOS App 개발을 위한 새로운 프로그래밍 언어이다.

Swift는 C, Objective-C 와 유사한 경험을 가질 수 있다.

C, Objective-C 의 기본 타입 Int (integers), Double, Float (floating-point values), Bool (Boolean values), String (textual data) 을 포함하며 Array, Set, Dictionary 의 세가지 컬렉션 타입도 제공한다.

또한 상수, 튜플, 옵셔널타입 등을 제공한다.

Swift는 type-safe 언어로 올바른 타입이 사용되고 있는지 체크해준다.

Basic Operators (기본 연산자)

연산자는 사용자가 값을 확인, 변경, 조합하는데 사용하는 특별한 심볼/문구이다.

Terminology (용어)

Unary operators (단항 연산자)
변수 등의 앞이나 뒤에 나타낸다. (ex. -a, !b, c!)

Binary operators (이항 연산자)
두 변수 등의 사이에 나타낸다. (ex. 2 + 3, 2 - 1)

Ternary operators (삼항 연산자)
Swift의 유일한 삼항연산자로 삼항 조건 연산자가 있다. (ex. a ? b : c)

Assignment Operator (할당 연산자)

할당 연산자는 값을 초기화하거나 업데이트한다.

let b = 10
var a = 5
a = b

다중 값을 갖는 튜플을 할당할 경우 다중 상수나 변수에 한번에 분리되어 등록된다.

let (x,y) = (1,2)

Swift에서 Equal (==) 과의 혼동 방지를 위해 할당연산자는 값을 리턴하지 않는다.

if x = y {
	//This isn't valid
}

Arithmetic Operators (사칙 연산자)

덧셈 Addition ( + )
뺄셈 Substraction ( - )
곱셈 Multiplication ( * )
나눗셈 Division ( / )

1 + 2
5 - 3
2 * 3
10.0 / 2.5

Swift 사칙 연산자는 값의 오버플로우를 지원하지 않는다.

덧셈 연산자는 String 타입도 지원한다.

"Hello, " + "world" //equals "Hello, world"
  • Remainder Operator (나머지 연산자)

나머지 연산자는 (a % b)는 a를 b로 나눈뒤의 나머지를 반환한다.

9 % 4 // equlas 1

a 값이 음수일때도 동일하게 적용된다.

-9 % 4  // eqauls 

b 값이 음수일때는 (-) 가 무시되어 적용된다.

a % b == a % -b
  • Unary Plus, Minus Operator

( - ) 를 통해 값을 토글 할 수 있다.
( + ) 는 실제로 아무 것도 하지 않는다.

Compound Assignment Operators (합성 할당 연산자)

Swift는 +=, -= 와 같은 합성 할당 연산자를 제공한다.

var a = 1
a += 1 // equlas a = a + 2

합성 할당 연산자는 값을 리턴하지 않기 때문에 다음과 같이 작성할 수 없다.

let b = a += 2 // wrond!!

Comparison Operators (비교 연산자)

동일 Equal to (a == b)
비동일 Not equal to (a != b)
더 큰 Greater than (a > b)
더 작은 Less than (a < b)
크거나 같은 Greater than or equal to (a >= b)
작거나 같은 Less than or equal to (a <= b)

여기에 추가로 두개의 오브젝트가 하나의 동일한 인스턴스를 참조하고 있는지 테스트 하기 위해 (===) (!==) 도 제공한다.

비교 연산자는 해당 연산이 참/거짓인지 Bool 타입으로 반환한다.

1 == 1 // true
1 < 2 // false

비교 연산자는 조건문에 자주 사용되어진다.

let name = "world"
if name == "world" {
	print("Hello, world!!"
} else {
	print("Nope")
}

또한 두개의 튜플이 같은 타입을 가지고 있고 같은 갯수의 값을 갖고 있다면 비교 연산자를 통해 비교할 수 있다.

튜플의 왼쪽 값부터 두 값이 동일하지 않을때까지 하나하나 비교가 이루어지게 되는데, 동일하지 않은 경우를 발견시에 그 경우를 통해 true/false 를 판단하고 그 뒤의 값들은 판단하지 않고 넘어간다.

오른쪽 제일 끝까지 동일한 경우 두 튜플은 동일하다고 판단한다.

(1, "zebra") < (2, "apple") // true because 1 is less than 2

이때 String 과 Int 값은 비교가 가능하지만 Bool 값은 비교가 불가능하기 때문에 사용할 수 없다.

("blue", -1) < ("purple", 1) // ok 
("blue", false < ("purple", true) // wrong!

*참고 - String 타입은 ASCII Code 를 따라 비교하게 된다.
Swift Standard Libraray의 튜플 비교 연산은 7개 미만의 요소를 가지는 튜플만 가능하다. 그 외에는 커스텀!

Ternary Conditional Operator (삼항 조건 연산자)

question ? answer1 : answer2

question 의 참, 거짓에 따라 반환값이 결정되는데 다음 코드의 축약형이다.

if question {
	answer1
} else {
	answer2
}

삼항 조건 연산자를 남용하게 될 경우 코드를 읽기 어렵게 될 수 있기 때문에 한 문장 안에 다수의 삼항 조건 연산자는 피하자.

Nil-Coalescing Operator (Nil 병합 연산자)

a ?? b 의 형태를 갖는 연산자로 디폴트로 a 를 반환하지만 만약 a가 nil 일 경우 b 를 반환한다. a 는 항상 옵셔널 타입이고 b 는 a 의 타입으로 맞춰줘야한다.

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

a != nil ? a! : b
let defaultColorName = "red"
var userDefinedColorName: String?

var colorNameToUse = userDefinedColorName ?? defaultColorName // "red"

Range Operators (범위 연산자)

범위 연산자는 일정 범위 형태의 값을 나타낼때 사용된다.

  • Closed Range Operator (닫힌 범위 연산자)

(a...b) 의 형태를 가지며 a, b 포함하여 a 부터 b 까지의 값을 갖는다. for-in loop 등과 같이 자주 쓰인다.

for index in 1...5 {
	print("\(index) times 5 is \(index * 5)")
}
  • Half-Open Range Operator (반닫힌 범위 연산자)

(a..<b) 의 형태를 가지며 b 를 제외한 a 부터 b-1 까지의 값을 갖는다. zero-based의 arrays (배열) 등에 사용하기 좋다.

let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
 	print("person \(i + 1) is called \(names[i])")
}
  • One-Sided Ranges

단방향 연산자는 ...a, b... 의 형태로 처음 또는 끝부터 지정된 값까지를 포함한다.

반닫힌 연산자도 ..<a 형태로 사용할 수 있다.

Logical Operators (논리 연산자)

논리 연산자는 true, false 를 처리한다.
Logical NOT(!a)
Logical AND(a && b)
Logical OR(a || b)

  • Logical NOT Operator

    (!a) 는 Boolean 값을 뒤집는다. true는 false로 false는 true로.

이중부정이나 혼란스러운 논리문은 피하자.

  • Logical AND Operator

    (a && b) 는 a, b 값 둘 다 true일때 true를 반환한다.
    a 값이 true일때 b 값은 연산되지 않기 때문에 확실한 값은 뒤에두고 불확실한 값을 앞에 두자.

  • Logical OR Operator

    (a || b) 는 a, b 값 둘 중 하나가 true일 경우 true를 반환한다. AND 와 마찬가지로 a가 true일 경우 b는 연산되지 않는다.

지금까지의 논리 연산자들은 병합하여 사용가능하다.

profile
정리왕을 꿈꾸며!

0개의 댓글