-
안녕하세요. 그린입니다!
이번 포스팅에서는 연산자에 대해 다뤄보겠습니다. 이전 포스팅까지하여 기본적인 데이터 타입과
선언, 생성등에 대해 알아봤었죠~! 오늘은 그 데이터들을 가지고 연산하는 학습을 하겠습니다.
만약 이 포스팅을 읽기 앞서 데이터 타입에 대해 헷갈리신다면 이전 포스팅을 꼭 참고하고 오시길 바랍니다 :-)
1. 할당 연산자
값을 할당할 때 사용하는 연산자
A = B (A에 B에 값을 할당하며 서로 다른 데이터 타입일 시 오류가 발생)
2. 산술 연산자
대체로 수학에서 쓰이는 연산자와 같은 역할을 수행
1) 더하기 연산자 : A + B (더한 값을 반환)
2) 빼기 연산자 : A - B (뺀 값을 반환)
3) 곱하기 연산자 : A * B (곱한 값을 반환)
4) 나누기 연산자 : A / B (나눈 값을 반환)
5) 나머지 연산자 : A % B (나눈 나머지 값을 반환)
-. 스위프트에서는 부동소수점 타입의 나머지 연산까지 지원
3. 비교 연산자
두 값을 비교할 때 사용하며 불리언 값을 반환
1) 같다 : A == B
2) 크거나 같다 : A >= B
3) 작거나 같다 : A <= B
4) 크다 : A > B
5) 작다 : A < B
6) 같지 않다 : A != B
7) 참조가 같다 : A ===B (A와 B가 참조(래퍼런스) 타입일 때, 같은 인스턴스를 가르키는지 비교)
8) 참조가 같지 않다 : A !==B
9) 패턴 매치 : A ~= B
-. 참조 비교 연산자(===, !==)는 스위프트의 유일한 참조 타입인 클래스의 인스턴스에서만 사용
4. 삼항 조건 연산자
피연산자가 세 개인 삼항 조건 연산자
Question ? A : B (Question이 참이면 A, 거짓이면 B를 반환)
5. 범위 연산자
값(수)의 범위를 나타내고자 할 때 사용
1) 폐쇄 범위 연산자 : A...B (A이상 B이하)
2) 반폐쇄 범위 연산자 : A..<B (A이상 B미만)
3) 단방향 범위 연산자 : A... (A이상) , ...A (A이하), ..<A (A미만)
6. 부울 연산자
불리언 값의 논리 연산할 때 사용
1) NOT(부정) 부울 연산자 : !A (A의 불리언 값의 참,거짓을 반전)
2) AND 부울 연산자 : A && B (A와 B의 불리언 AND 연산)
3) OR 부울 연산자 : A || B (A와 B의 불리언 OR 연산)
7. 비트 연산자
값의 비트 논리 연산
1) NOT(부정) 비트 연산자 : ~A (A의 비트를 반전)
2) AND 비트 연산자 : A & B (A와 B의 AND 논리 연산)
3) OR 비트 연산자 : A | B (A와 B의 OR 논리 연산)
4) XOR 비트 연산자 : A ^ B (A와 B의 XOR 논리 연산)
5) 비트 이동 연산자(시프트 연산자) : A >> B , A << B (A의 비트를 B만큼 비트를 시프트(이동))
-. 비트 시프트(이동) 시 빈 자리는 0으로 채워지며, 범위를 벗어난 비트는 버려집니다.
8. 복합 할당 연산자
할당 연산자와 다른 연산자가 하는 일을 한 번에 할 수 있도록 연산자를 결합한 연산자
1) A += B : 합을 A에 할당
2) A -= B : 차를 A에 할당
3) A *= B : 곱을 A에 할당
4) A /= B : 나눈 값을 A에 할당
5) A %= B : 나머지를 A에 할당
6) A <<= N : N만큼 왼쪽 비트 시프트 값 A에 할당
7) A >>= N : N만큼 오른쪽 비트 시프트 값 A에 할당
8) A &= B : AND 연산 A에 할당
9) A |= B : OR 연산 A에 할당
10) A ^= B : XOR 연산 A에 할당
9. 오버플로 연산자
스위프트는 기본 연산자를 통해 오버플로에 대비 할 수 있도록 되어있습니다.
1) 오버플로 더하기 연산 : &+
2) 오버플로 빼기 연산 : &-
3) 오버플로 곱하기 연산 : &*
10. 기타 연산자
1) nil 병합 연산자 : A ?? B
2) 부호변경 연산자 : -A
3) 옵셔널 강제 추출 연산자 : A!
4) 옵셔널 연산자 : A?
-. 옵셔널 강제추출 연산자 사용은 지양하는것이 좋음
11. 우선순위와 결합방향
-. 같은 우선순위 일 시 결합방향은 왼쪽
-. 스위프트 표준 라이브러리에는 다양한 연산자 우선순위 그룹 존재-. 연산자 우선순위는 절대치가 아닌 상대적인 수치
-. 우선순위가 높을수록 같은 라인의 연산자 중 먼저 처리
12. 사용자 정의 연산자
연산자 역할을 사용자가 부여할 수 있습니다. 존재하지 않던 연산자 기호를 만들어 추가할 수 있습니다.
1) 전위 연산자 정의 및 구현
prefix operator ** (전위 연산자 정의)
prefix func ** () (전위 연산자 기능 함수 구현)
2) 후위 연산자 정의 및 구현
postfix operator **
3) 중위 연산자 정의 및 구현
infix operator **
-. 전위/후위 같은 라인 존재 시 후위 연산자 먼저 처리
4) 연산자 우선순위 그룹 정의
precedencegroup 우선순위 그룹 이름 {
higherThan: 더 낮은 우선순위 그룹 이름
lowerThan : 더 높은 우선순위 그룹 이름
associativity : 결합방향 (left / right / none)
assignment : 할당방향 사용 (true / false)
}
-.중위 연산자를 정의할 때 우선순위 그룹을 명시해주지 않는다면 우선순위가 가장 높은 DefaultPrecedence 그룹을 우선순위로 가짐
이번 포스팅에서는 이렇게 연산자의 종류와 사용하는 방법들에 대해 다뤄봤습니다.
조금 어렵고 생소하게 느껴질 수도 있는 연산자들도 있지만 그런 연산자들을 많이 접하고 다뤄봄으로써 더 풍부한 코딩을 할 수 있습니다.
다음 포스팅에서는 흐름제어 즉, 조건문과 반복문에 대해 다뤄보겠습니다.
어떻게 보면 다음 포스팅부터 실제로 이전까지 배운 데이터와 연산자를 가지고 결과를 도출하는 하나의 함수를 만들어볼 예정입니다.
감사합니다 :D
'Swift' 카테고리의 다른 글
함수 (0) 2020.11.02 흐름제어 (0) 2020.11.01 데이터 타입 (고급) (0) 2020.10.30 데이터 타입 (기본) (0) 2020.10.30 스위프트 프로그래밍 규칙 (0) 2020.10.29