# TypeScript - 연산자

안녕하세요, 미래의 프로그래머 여러분! 오늘 우리는 TypeScript 연산자의 세계로 흥미로운 여행을 떠납니다. 여러분의 친절한 이웃 컴퓨터 교사로서, 저는 이 모험을 단계별로 안내해드리겠습니다. 그럼 벨트를 고정하고 함께 뛰어보겠습니다!

## 연산자는 무엇인가요?

TypeScript 연산자의 오디세이를 시작하기 전에, 연산자가 무엇인지 이해해보겠습니다. 연산자는 컴퓨터에 특정 수학적 또는 논리적 연산을 수행하도록 지시하는 특별한 기호라고 생각해보세요. 프로그래밍의 마법의 지팡이처럼, 데이터를 다양한 방법으로 변환하고 결합합니다.

예를 들어, 코드에서 "+" 기호를 보면, 그저 화려한 장식이 아닙니다. 그것은 컴퓨터에게 것들을 더하도록 지시하는 연산자입니다. 멋지죠?

## 산술 연산자

우선 산술 연산자로 시작해보겠습니다. 이 연산자들은 수학 수업에서 사용한 것과 비슷하므로 익숙할 것입니다.

TypeScript의 산술 연산자 표입니다:

| 연산자 | 설명 | 예제 |
|---------|-------------|---------|
| +       | 덧셈 | 5 + 3   |
| -       | 뺄셈 | 7 - 2   |
| *       | 곱셈 | 4 * 6 |
| /       | 나눗셈 | 8 / 2   |
| %       | 나머지 | 9 % 4 |
| ++      | 증가 | let x = 5; x++; |
| --      | 감소 | let y = 3; y--; |

이제 이들을 실제로 사용해보겠습니다:

```typescript
let a: number = 10;
let b: number = 5;

console.log(a + b);  // 출력: 15
console.log(a - b);  // 출력: 5
console.log(a * b);  // 출력: 50
console.log(a / b);  // 출력: 2
console.log(a % b);  // 출력: 0

let c: number = 7;
c++;
console.log(c);  // 출력: 8

let d: number = 3;
d--;
console.log(d);  // 출력: 2

이 예제에서 우리는 변수들에 다양한 산술 연산을 수행하고 있습니다. 나머지 연산자 (%)는 일부분에게 새로운 것일 수 있습니다. 나머지 연산자는 나눗셈 후 남는 나머지를 제공합니다. 따라서 10 % 5는 0입니다. 10을 5로 나누면 나머지가 없습니다.

TypeScript - Operators

관계 연산자

다음으로 관계 연산자를 다룹니다. 이 연산자들은 값을 비교하고 비교 결과를 참이나 거짓으로 반환합니다.

관계 연산자 표입니다:

연산자 설명 예제
== 같다 5 == 5
!= 다르다 5 != 3
> 크다 7 > 3
< 작다 2 < 8
>= 크거나 같다 5 >= 5
<= 작거나 같다 4 <= 4

이제 이들을 사용해보겠습니다:

let x: number = 5;
let y: number = 10;

console.log(x == y);  // 출력: false
console.log(x != y);  // 출력: true
console.log(x > y);   // 출력: false
console.log(x < y);   // 출력: true
console.log(x >= 5);  // 출력: true
console.log(y <= 10); // 출력: true

이 연산자들은 코드에서 값을 비교하여 결정을 내리는 데 매우 유용합니다.

논리 연산자

논리 연산자는 변수나 값 간의 논리를 결정하는 데 사용됩니다. 프로그래밍의 셜록 홈즈처럼, 여러 조건에서 진실을 유추해줍니다.

논리 연산자 표입니다:

연산자 설명 예제
&& 논리 AND true && false
|| 논리 OR true || false
! 논리 NOT !true

이제 이들을 사용해보겠습니다:

let isRaining: boolean = true;
let isWarm: boolean = false;

console.log(isRaining && isWarm);  // 출력: false
console.log(isRaining || isWarm);  // 출력: true
console.log(!isRaining);           // 출력: false

이 예제에서 &&는 두 조건 모두 참이면 참을 반환합니다. ||는 적어도 하나의 조건이 참이면 참을 반환합니다. !는 브루트 값을 반전시킵니다.

비트 연산자

이제 더 복잡한 영역으로 진입합니다. 비트 연산자는 수의 이진 표현을 연산합니다. 복잡해 보일 수 있지만, 차근차근 설명드리겠습니다!

비트 연산자 표입니다:

연산자 설명 예제
& 비트 AND 5 & 3
| 비트 OR 5 | 3
^ 비트 XOR 5 ^ 3
~ 비트 NOT ~5
<< 왼쪽 이동 5 << 1
>> 오른쪽 이동 5 >> 1

이제 예제를 보겠습니다:

let a: number = 5;  // 이진: 0101
let b: number = 3;  // 이진: 0011

console.log(a & b);  // 출력: 1 (이진: 0001)
console.log(a \| b);  // 출력: 7 (이진: 0111)
console.log(a ^ b);  // 출력: 6 (이진: 0110)
console.log(~a);     // 출력: -6 (이진: 1010의 이진 보수)
console.log(a << 1); // 출력: 10 (이진: 1010)
console.log(a >> 1); // 출력: 2 (이진: 0010)

이 연산자들은 이진 표현의 수를 연산합니다. 저-level 프로그래밍과 특정 알고리즘에서 매우 유용합니다.

할당 연산자

할당 연산자는 변수에 값을 할당하는 데 사용됩니다. 프로그래밍의 이사업자처럼, 값을 적절한 자리(변수)에 배치합니다.

할당 연산자 표입니다:

연산자 설명 예제
= 할당 x = 5
+= 덧셈 후 할당 x += 3
-= 뺄셈 후 할당 x -= 2
*= 곱셈 후 할당 x *= 4
/= 나눗셈 후 할당 x /= 2
%= 나머지 후 할당 x %= 3

이제 이들을 사용해보겠습니다:

let x: number = 10;

x += 5;  // 동일한 것: x = x + 5
console.log(x);  // 출력: 15

x -= 3;  // 동일한 것: x = x - 3
console.log(x);  // 출력: 12

x *= 2;  // 동일한 것: x = x * 2
console.log(x);  // 출력: 24

x /= 4;  // 동일한 것: x = x / 4
console.log(x);  // 출력: 6

x %= 4;  // 동일한 것: x = x % 4
console.log(x);  // 출력: 2

이 연산자들은 코드를 더 간결하고 가독성 있게 만듭니다.

기타 연산자

TypeScript는 몇 가지 기타 연산자도 제공합니다.

기타 연산자 표입니다:

연산자 설명 예제
?: 조건 (ternary) condition ? expr1 : expr2
, 쉼표 let x = (1, 2, 3)
delete 속성 제거 delete obj.property
typeof 변수 타입 typeof x
void 표현식 평가 후 undefined 반환 void(0)

이제 조건 연산자의 예제를 보겠습니다:

let age: number = 20;
let canVote: string = age >= 18 ? "Yes" : "No";
console.log(canVote);  // 출력: "Yes"

이는 if-else 문을 간결하게 작성하는 방법입니다. 조건 (age >= 18)이 참이면 "Yes"를 반환하고, 그렇지 않으면 "No"를 반환합니다.

타입 연산자

마지막으로 TypeScript에 특화된 타입 연산자를 살펴보겠습니다. 이 연산자들은 타입을 다루는 데 도움이 됩니다.

타입 연산자 표입니다:

연산자 설명 예제
typeof 변수 타입 typeof x
instanceof 객체가 클래스의 인스턴스인지 확인 obj instanceof Class
as 타입断정 (someValue as string).toUpperCase()
타입断정 (대체 문법) (someValue).toUpperCase()

이제 예제를 보겠습니다:

let x: any = "Hello, TypeScript!";
let length: number = (x as string).length;
console.log(length);  // 출력: 20

class Animal {}
class Dog extends Animal {}

let myPet = new Dog();
console.log(myPet instanceof Animal);  // 출력: true

이 예제에서 우리는 TypeScript에게 x가 문자열임을 알리는 타입断정을 사용하고 있습니다. 또한 myPetAnimal 클래스의 인스턴스인지 확인하고 있습니다.

이제 TypeScript 연산자의 세계를 탐험한 것입니다. 연습이 완벽함을 기억하며, 이 연산자들을 자신의 코드에서 실험해보세요. 행복한 코딩을 기원합니다!

Credits: Image by storyset