JAVA

증감 연산자 (선행 연산자 & 후행 연산자)

태로미 2023. 2. 5. 21:16

 

 

 

 

 

▶▶   증감연산자 ( ++    -- )

–  단항연산자
–  수치데이터타입의 피연산자의 앞(좌측) 또는 뒤(우측)에 붙어, 해당 피연산자의 값을 1만큼 증가 또는 감소 시킴.
–  다른 연산과 결합하여 사용될 때 위치에 따라 결과가 다름.

 

 

 

 

 

 

 

▶   선행연산자 (전위연산자)

–  피연산자 앞(좌측)에 위치하여 값을 1만큼 증가 또는 감소시킴.
   이 때, 다른 연산과 결합하여 사용하는 경우, 먼저 피연산자의 값을 1 증가 또는 감소한 후 다른 연산에 참여함.
   ex ) ++a,   --a

 

 

 

 

 

▶   후행연산자 (후위연산자)

–  피연산자 뒤(우측)에 위치하여 값을 1만큼 증가 또는 감소시킴.
   이 때, 다른 연산과 결합하여 사용하는 경우, 먼저 다른 연산에 참여시킨 후 피연산자의 값을 1 증가 또는 감소시킴.
   ex ) a++,   a--


EX1   )   정수 a의 값을 1만큼 증가시키는 방법

byte a = 10;

→   byte타입의 변수 선언함.

 

1 )  일반적인 산술연산자와 대입연산자 사용

a = a+1;			// 오류 발생!

→   컴파일 에러 발생 (byte + int = int 저장 불가)

a = (byte)(a+1);

→   int타입을 byte타입으로 강제 형변환 함.

 

2 )  확장 대입연산자 사용

a += 1;

→   형변환 불필요 (연산 과정에서 자동 형변환 일어나지 않음)

 

3 )  증감연산자 사용

a++;

→   형변환 불필요 (연산 과정에서 자동 형변환 일어나지 않음)

 

 

EX2   )   선행연산자 & 후행연산자 사용

int b = 5;
		
b++;	
System.out.println(b);

→   변수b의 값을 1만큼 증가시킴, 5에서 6으로 증가
   b = 6

 

++b;	
System.out.println(b);

→   변수b의 값을 1만큼 증가시킴, 6에서 7로 증가
   b = 7

 

b--;
System.out.println(b);

→   변수b의 값을 1만큼 감소시킴, 7에서 6으로 감소
   b = 6

 

--b;	
System.out.println(b);

→   변수b의 값을 1만큼 감소시킴, 6에서5로 감소
   b = 5

 

 

EX3   )   증감연산자 위치에 따른 연산 과정의 차이

int x1 = 5;
int y1 = ++x1;		// 선행연산자

→   변수x1의 값을 먼저 1만큼 증가시킨 후, 대입연산자를 통해 x1값을 y1에 대입 (저장)
→   x1의 값이 5에서 6으로 증가된 후, y1에 증가된 값 6이 저장됨.
   x1 = 6, y1 = 6

 

int x2 = 5;
int y2 = x2++;		// 후행연산자

→   변수x2의 값을 먼저 y2에 대입한 후, 증감연산자를 통해 y2값을 1만큼 증가시킴.
→   x2의 값이 y2에 저장된 후, x2의 값이 5에서 6으로 증가
   x2 = 6, y2 = 5

 

 

EX4   )   대입연산자와 결합 대신 출력문에서 사용 가능

x2 = 5;
System.out.println(++x2);

→   출력문에 x2값을 전달하기 전에 먼저 증감연산자가 사용됨.
  x2의 값을 먼저 +1 증가시킨 후  '6'이 출력됨.

 

System.out.println(x2++);

→   x2의 값을 먼저 출력한 후, +1 증가시킴.
✓   '6'이 출력됨.

 

System.out.println(x2);

→   위의 과정에서 6이 출력된 후 +1 증가시켜 6에서 7이 됨. 
✓   '7'이 출력됨.

 

 

EX5   )    char타입에 증감연산자 사용하기

char ch = 'A';				// 문자 'A'는 65의 정수값을 가짐.
System.out.println(ch + 1);

→   ch+1 == (char)+(int)=int == 65+1 == 66
✓   결과값 66이 출력됨.

 

ch를 출력해보면,

System.out.println(ch);

→   ch값을 직접 변경하지 않았으므로 ch변수에는 여전히 'A'가 들어있음.

 

후행연산자 사용으로 ch값 직접 변경해보기!

System.out.println(ch++);

→   출력 먼저 하고, +1 증가시킨 뒤 ch변수에 저장함.

 

System.out.println(ch);

   위의 과정에서 +1 증가된 값이 적용되었으므로 'B'가 출력됨.

 

System.out.println(++ch);
System.out.println(ch);

   ch값을 먼저 +1, 그 다음이 출력이므로 'C'가 나옴.
   ch변수에도 C가 저장되어 출력됨.

 

 

EX6   )

int x = 10;
int y = 20;
int z = ++x + y--;
		
System.out.println(x);		// 11
System.out.println(y);		// 19
System.out.println(z);		// 31

→   첫 번째 출력문 : 변수 z에 ++x가 선행연산자로 쓰여서 x는 먼저 +1 증가된 뒤에 출력됨.

   x = 11

→    두 번째 출력문 : 변수 z에 y--가 후행연산자로 쓰여서 y는 변수 z의 연산에 먼저 참여한 뒤, -1 감소됨.

   y = 19

→   세 번째 출력문 : 변수 z에는 선행연산자로 이미 +1 증가한 x값(11), 후행연산자로 아직 -1되지 않은 y값(20)이 존재함.

   z = 31

 

 

 

 

 


 

 

 

Comment

선행연산자 후행연산자 이해했다가도 다시 보면 헷갈리고 난리다ㅎ
계속해서 예제 찾아보고 문제 풀어보고 했더니
어느덧 으쓱한 새벽이네ㅠㅠㅠ
머릿속에서 +기호와 -기호가 정처없이 떠도는 이 새벽...
나중에 현란하게 쓰일 때를 대비해서 조금만 더 보고 자야겠다!