morijwana
수로그
morijwana
전체 방문자
오늘
어제
  • 분류 전체보기
    • 강의노트
    • Machine Learning
      • Pandas
      • NLP
    • Computer Science
      • Linux
      • TIL
    • Development
      • React
      • Swift
      • Javascript
    • 스터디 기록
      • Clean Code
      • 구글 BERT의 정석
      • 개발도서
      • 기타
    • Problem Solving
      • Baekjoon
      • ICPC Sinchon
    • 끄적
      • 끄적끄적
      • 요리왕

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • nlp
  • 프레임워크없는프론트엔드개발
  • 프로그래밍언어론
  • 백준
  • 데이터사이언스
  • Solution Challenge
  • 구부정스터디
  • cs224n
  • ML
  • Bert
  • word2vec
  • 자연어처리
  • gdsc
  • 개발도서
  • Python
  • GDSC Sookmyung
  • 회고
  • Pandas
  • 구글BERT의정석
  • 민트하임스터디

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
morijwana

수로그

Development/Swift

[Swift]Swift가 제공하는 연산자들 - Operators in Swift (1)

2020. 7. 15. 14:28

산술 연산자 - Arithmetic Operators

Swift는 데이터 타입에 굉장히 민감한 언어이므로, 연산이 이루어지기 전에 두 피연산자의 데이터 타입 통일이 이루어져야 한다.(형식 안전성 - Type Safety)

산술 연산자 설명 사용 예시
+ 덧셈 a + b
- 뺄셈 a - b
/ 나눗셈 a / b
% 나머지(정수 간 연산만 가능) a % b

실수 간의 나머지 연산은 truncatingRemainder() 메소드를 사용해야 한다.

let c = 12.0
let d = 5.0
c.truncatingRemainder(dividingBy: d)  // 2

 

오버플로우 연산자 - Overflow Operators

다른 C 계열 언어와는 다르게, Swift에서는 오버플로우를 에러로 판단한다.
예를 들어, C에서는 char num = 127; num++; 에서 덧셈 연산 이후 num의 값은 -128이 되지만, Swift에서는 이것을 에러로 보고 컴파일하지 않는다.

하지만 문제 해결 과정에서 오버플로우를 일부러 일으키는 경우도 빈번히 있기 때문에, Swift에서도 오버플로우 연산자를 통해 오버플로우를 발생시킬 수 있다.

Swift의 오버플로우 연산자는 총 3가지(오버플로우 덧셈 연산자, 오버플로우 뺄셈 연산자, 오버플로우 곱셈 연산자)다.
사용법은 간단하게도 나눗셈과 나머지 연산자를 제외한 산술 연산자 앞에 &(앰퍼샌드)를 붙여주기만 하면 된다.

  • 오버플로우 덧셈 연산자 👉🏻 a &+ b
    let a: Int8 = Int8.max  // 127
    // let b: Int8 = a + 1  --> error(overflow)
    let b: Int8 = a &+ 1    // -128
  • 오버플로우 뺄셈 연산자 👉🏻 a &- b
    let c: Int8 = Int8.min  // -128
    // let d: Int8 = a - 1  --> error(overflow)
    let d: Int8 = a &- 1    // 127
  • 오버플로우 곱셈 연산자 👉🏻 a &* b
    let e: Int8 = Int8.max &* 2  // -2

    Int8.max * 2 = 127 * 2 = 254

    0 -> ... -> 127 -> -128 -> -127 -> ... -> -2

 

비교 연산자 - Comparison Operators

비교 후 참인 경우 true, 거짓인 경우 false를 리턴함. 문자열 비교도 가능하다.
비교하는 두 피연산자의 자료형이 같아야 한다.

비교 연산자 설명 사용 예시
> a가 b를 초과하는지 판단 a > b
< b가 a를 초과하는지 판단 a < b
>= a가 b 이상인지 판단 a >= b
<= b가 a 이상인지 판단 a <= b
== 두 값이 같은지 판단 a == b
!= 두 값이 다른지 판단 a != b

문자열을 비교하는 경우, 해당 문자열의 아스키 코드를 비교하여 더 큰 아스키 코드값을 가진 문자열을 크다고 판단한다.

example:
"swift" > "Swift" : true, s의 아스키 코드 값 : 115 / S의 아스키 코드 값 : 83

 

논리 연산자 - Logical Operators

논리 연산자 설명 사용 예시
! NOT 연산, Boolean 값 반전 !a, !(a > b)
&& AND 연산 a && b, (a > b) && (a > c)
|| OR 연산 a || b, (a > b) || (a > c))

&&와 || 연산을 사용할 때에는 Side effect에 주의해야 한다.

예를 들어, a와 b의 값을 각각 1 증가시키고 true를 리 턴하는 함수 func1, func2가 있다고 하자.

if(func1() || func2()) {
    ...
}

에서 func1이 이미 참이므로 func2는 실행되지 않으며, 이 때 a의 값만 1 증가하고, b의 값에는 변함이 없다.

이런 경우를 방지하기 위해서는

let val1 = func1()
let val2 = func2()
if(val1 || val2) {
    ...
}

이런 식으로 두 함수의 실행을 확실히 보장하는 코드를 작성하면 된다.

 

삼항 연산자 - Ternary Conditional Operators

👉🏻 condition ? expr1 : expr2

condition의 값이 참이면 expr1을, 거짓이면 expr2를 실행한다.

func isEvenNumber(num: Int) -> Bool {
  let result = (num % 2 == 0) ? true : false
  return result
}
저작자표시 (새창열림)

'Development > Swift' 카테고리의 다른 글

[Swift]연산자 메소드 - Operator Method  (0) 2020.07.15
[Swift]Swift가 제공하는 연산자들 - Operators in Swift (2)  (0) 2020.07.15
[Swift]이름 정의 규칙 - Camel Case  (0) 2020.03.03
    'Development/Swift' 카테고리의 다른 글
    • [Swift]연산자 메소드 - Operator Method
    • [Swift]Swift가 제공하는 연산자들 - Operators in Swift (2)
    • [Swift]이름 정의 규칙 - Camel Case
    morijwana
    morijwana
    행복한 휴학생의 devlog

    티스토리툴바