주인장의 프로그래밍 개발 공부방

[Chapter 2 연산자] 9. 대입 연산자 (Assignment Operator) 본문

프로그래밍 기본 지식/Chapter 2 연산자

[Chapter 2 연산자] 9. 대입 연산자 (Assignment Operator)

거신 2019. 5. 23. 10:11

드디어 연산자의 끝이 보이기 시작한다.

오늘은 직접 다루진 않았지만 너무나도 자주 만났던 녀석에 대해서 알아보려고 한다.

바로 대입 연산자이다.

 

목표 : 대입 연산자의 정의와 종류를 이해하고 직접 필요한 곳에 사용할 수 있다.

 

1. 대입 연산자란?

 

우리는 대입 연산자라는 이름을 처음 들어볼 수도 있고 모르고 있다고 대답할 수도 있다.

하지만 정말 놀랍게도 우리가 변수라는 것을 배울 때부터 이미 쓰고 있던 연산자이다.

대입 연산자는 바로

 

=

 

이 녀석이다.

우리가 변수를 선언할 때

 

int i = 0;

 

이라고 지겹도록 썼을텐데 바로 여기에 들어가 있는

 

=

 

이 녀석이 대입 연산자이다.

무의식 중에 계속해서 대입 연산자를 쓰고 있었던 것이다.

그렇다면 이 녀석은 어떤 녀석이냐하면

간단하게 말해서 =(대입 연산자) 오른쪽에 있는 피연산자(값)

=(대입 연산자) 왼쪽에 있는 피연산자(변수, 대상)에 "저장"하는 것이다.

말을 풀어 썼기 때문에 조금 이해가 안되는 부분이 있을 수도 있으니

우리가 이해하기 내용으로 순화해서 한 번 더 알아보자.

 

2. 대입 연산자의 의미

 

일반적으로 우리가 알고 있는 =(대입 연산자)의 의미

왼쪽에 있는 식을 계산한 값은 오른쪽의 결과와 '같다'라는 소리이다.

간단하게 예시를 들어보면

 

3 + 5 = 8

 

이건 너무나도 당연한 얘기라고 생각할 것이다.

작성자가 이 글을 읽고 있는 사람을 무시하는 것이냐!라고 화가 날 수도 있겠지만

그런 목적이 아니라는 점을 일단 알아두길 바란다.

그런데 보통 우리들이 =(대입 연산자)라고 한다면 "같다"라는 말에 굉장히 무게를 두고 있는게 사실이다.

앞의 예제를 보더라도 결과와 "같다"처럼

=기호는 그냥 같다가 아니냐라고 생각할 수도 있는데

프로그래밍에서는 "같다"라는 의미가 아니라는 것을 먼저 알았으면 좋겠다.

 

"같다"라는 의미를 가진 연산자는 이미 비교 연산자에서 만났던

=이 2개가 붙은 ==이 "같다"의 의미를 가지고 있다.

(기억이 안난다면 이전의 비교 연산자를 한 번 읽어보자)

 

프로그래밍에서는 "같다"가 아니라 "값을 넣는다"라고 생각해야 정확하다.

그렇다면 "뭐를 어디에 넣는 것이냐?"라고 질문이 생길 수 있다.

아니 그렇게 질문을 해야겠지.

 

프로그래밍에서 대입 연산자=(대입 연산자)의 오른쪽에 있는 값(리터럴)

=(대입 연산자)의 왼쪽에 있는 공간(변수)에 넣는 것으로 의미한다.

다시 말해,

 

int i = 0;

 

이라고 적었다면 =(대입 연산자) 오른쪽에 있는 0이라는 값을

=(대입 연산자) 왼쪽에 있는 i라는 변수에 저장한다라고 해석할 수 있는 것이다.

우리가 그렇게 앞에서 지겹도록 썼던게 바로 이런 뜻을 지니고 있다는 것을

다시 한 번 상기시킬 수 있었으면 좋겠다.

왜냐하면 이미 변수 선언 방법에서 배웠으니까.

 

3. 복합대입 연산자

 

뜬금없이 복합대입 연산자라고 말하는가 궁금하겠지만

대입 연산자는 =말고도 다양한 기호들이 존재하고 있다.

양이 많기 때문에 외워야할게 많다고 생각하겠지만

양만 많지 신기하게도 개념과 뜻이 하나로 다 통일이 되기 때문에

정말 정말 어렵지 않다는 것을 미리 알려둔다.

 

일단 기본적으로 알고 있어야 하는 것은 바로

=(대입 연산자)는 당연하게도 = 혼자만으로도 쓸 수 있고

그리고 다른 연산자 기호를 =앞에 붙여서

 

+=

 

이런 형태로도 사용이 가능하다는 점을 미리 알아두자.

이렇게 연산자 2개를 붙여놓은 것을 우리는

복합대입 연산자라고 부른다.

대입 연산자에 다른 연산자를 섞었기 때문에 복합이라는 말이 붙게 되는 것이다.

그리고 형태는 무조건 =기호 앞에 다른 연산자를 붙여서 쓴다.

간단히 몇 가지만 예시를 들어보자면

 

예시)

+=

-=

 %=

<<=

&=

^=

 

등등이 있다.

물론 착각할 수도 있는데

 

<=

>=

!=

==

 

복합대입 연산자가 아니고 비교 연산자 그자체이기 때문에 헷갈려서는 안된다.

비교 연산자는 =앞에 새로운 기호를 붙인게 아니라

<=, ==와 같이 그 자체가 하나인 것이다.

절대로 헷갈리지 않도록 하자.

 

예시로 다시 돌아가보면 우리가 지금까지 배웠던 연산자들이 거의 다 들어있다.

산술, 비트논리, 시프트까지

거의 대부분 =앞에 붙일 수 있는 것을 볼 수 있다.

그런데 이 복합대입 연산자들을 하나하나 다 외우고 있어야할까?

아니 이 개념만 알고 있으면 뭐든지 읽어낼 수 있다.

직접 쓸 수도 있고

 

4. 복합대입 연산자의 의미

 

대입 연산자는 =앞에 다른 연산자를 붙여서

같이 쓸 수 있다고 했었는데 연산자를 2개를 붙인다고 해서

복합이라는 말이 붙는다고 했었다.

그렇다면 앞서 봤었던 복합대입 연산자들은 도대체 어떤 의미를 가지고 있는 것일까?

어디에 쓰이는 것일까?에 대한 의문을 풀어보도록 하자.

 

모든 복합대입 연산자의 근본적인 의미, 개념 자체는 모두 똑같다.

예시를 가져와서 알아보자

 

예시)

int a += b;

 

예시는 =(대입 연산자)앞에 +연산자가 붙은 형태이다.

이 복합 연산자는 보이는 그대로 +의 기능과 =의 기능을 다 가지고 있는 것이다.

그렇다면 어떻게 해석해야할까?

복합대입 연산자는 이렇게 풀어낼 수 있다.

다시 말해,

 

a += b;

 

라는 식은

 

a = a + b;

 

로 풀어낼 수 있다.

즉, 원래 우리가 잘 알고 있는 위의 공식

 

a = a + b;

a += b;

 

로 묶어버린 것이다.

그렇다면 다음 예시는 어떻게 풀어낼 수 있을까?

 

a &= b;

 

와 같이 되어 있다면 역시 똑같이

 

a = a & b;

 

이렇게 풀어낼 수 있다.

 

조금 디테일하게 설명을 하자면 복합대입 연산자는 

우리가 값을 연산해서 누적시켜야할 때 사용하는 연산자가 되겠다.

일단 결과가 저장되는 변수 a가 =뒤에 연산에도 포함되면서

결과 값에 또 연산을 하는 작업을 말하는 것이다.

이렇게 본다면 풀어져 있는 공식을 복합대입 연산자로 바꾸는 것은 어렵지 않을 것이다.

=앞에 뒤에 나오는 연산자(+, -, % 등등)를 붙여주면 끝이니까.

단, 연산된 결과에 계속해서 값을 누적해야되는 경우에만 사용한다는 것도 잊지말자

그래서 우리가 프로그램에서 많이 쓰이는 용도가 점수 합계를 낼 때인데

 

총 점수 += 획득한 점수;

 

과 같이 적는다면 이 코드가 실행될 때마다 총 점수에 획득한 점수들이 누적이 되는 것이다.

게임을 만들 때도 굉장히 유용하니 기억해두고 응용해보도록 하자.

 

5. 마무리

 

오늘은 대입 연산자에 대해서 알아봤다.

대입 연산자는 우리들이 무의식 중에 계속해서 사용하고 있던 연산자인데

그 뜻은 "같다"가 아니라

대입 연산자 오른쪽에 있는 "값"을 연산자 왼쪽에 있는 "변수"에 "저장"한다는 뜻이다.

그리고 대입 연산자 앞에 또다른 연산자들을 붙여서

+=와 같은 형태로 사용하는 연산자가 있는데 이를

복합대입 연산자라고 하며 이 연산자를 사용하는 경우에는

값이 계속해서 누적이 되는 경우에 사용한다는 것도 기억하고 있자.

Comments