JavaScript

웹 개발의 필수 언어

동적인 웹 페이지 구현을 위한 핵심 프로그래밍 언어.

Java

객체지향 프로그래밍

안정적이고 확장성 있는 백엔드 개발의 대표 언어.

HTML

웹의 기초

웹 페이지의 구조를 정의하는 마크업 언어.

React

현대적 UI 라이브러리

효율적인 사용자 인터페이스 구축을 위한 JavaScript 라이브러리.

CSS

웹 디자인의 핵심

웹 페이지의 시각적 표현을 담당하는 스타일 언어.

Spring

자바 웹 프레임워크

기업급 애플리케이션 개발을 위한 강력한 프레임워크.

Java/자바 학습

자바의 부호/증감 연산자

lamarcK 2025. 5. 19. 17:13

기본 이해

개념 정의

부호/증감 연산자는 변수의 값을 증가시키거나 감소시키는 단항 연산자다.

종류

  • 증가 연산자(++): 값을 1 증가
  • 감소 연산자(--): 값을 1 감소
  • 부호 연산자(+, -): 양수/음수 표현

작동 방식

int x = 5;
x++; // x = x + 1과 동일
x--; // x = x - 1과 동일

증가 연산자

++와 동일한 연산을 하는 방법이 2가지 더 있는데 작동 방식이 조금 다르다.

byte b = 127;
b = b + 1;    // 컴파일 에러
b += 1;       // 정상 작동 (-128이 됨)
b++;          // 정상 작동 (-128이 됨)

 

때문에 특수 상황에서 연산 후 결과 값도 달라진다.

b+1의 경우 b가 연산 시 자동으로 int로 승격(promotion)되고 1도 int 타입이라 연산 결과는 int (128)가 된다.
때문에 byte에 대입 시도 → 컴파일러가 거부 과정을 거쳐서 컴파일 오류가 발생하게 된다.

감소 연산자

byte b = -128;
b = b - 1;    // 컴파일 에러
b -= 1;       // 정상 작동 (127이 됨)
b--;          // 정상 작동 (127이 됨)

이 경우도 마찬가지로 작동한다.

부호 연산자

부호 연산자는 말그대로 부호를 바꾸는 연산자다. 기본적으로 + 형태이기 때문에 +를 붙여도 별도로 부호가 바뀌진 않는다. 그런데 실제로 +연산자와 - 연산자 모두 부호를 수정하는 작업을 실시한다.

때문에 이런 문제가 발생한다. 자바에선 기본적으로 연산시 int 타입으로 연산을 하기 때문에 부호연산자도 마찬가지로 값을 int 타입으로 자동 형변환한다.

byte b = 100;
byte result = -b;    // 컴파일 에러
byte result = +b;    // 컴파일 에러

전위 연산자와 후위 연산자

또한 ++와 --의 경우 피연산자의 앞에 오느냐 뒤에오느냐에 따라 연산 과정이 달라진다.

피연산자의 앞에 연산자가 오면 전위 연산자, 뒤에 오면 후위 연산자라고 한다.

int x = 10;

// 전위 증감 연산자 (prefix): 증감 먼저, 그 다음 다른 연산
++x;  // x를 즉시 증가
--x;  // x를 즉시 감소

// 후위 증감 연산자 (postfix): 다른 연산 먼저, 그 다음 증감
x++;  // 현재 x값 사용 후 증가
x--;  // 현재 x값 사용 후 감소

해당 줄의 모든 연산 전/후에 작동하기 때문에 상황에 맞게 값이 필요한 경우 사용할 수 있다.

///실제 계산되는 값
int a = 10;
System.out.println(++a);  // 11 출력 (증가 후 출력)
System.out.println(a);    // 11 출력

int b = 10;
System.out.println(b++);  // 10 출력 (출력 후 증가)
System.out.println(b);    // 11 출력

 

///예시 1: 변수에 할당할 때
int i = 0;
int a = ++i;  // i를 증가시킨 후 a에 할당: a=1, i=1
int b = i++;  // 현재 i값을 b에 할당 후 i 증가: b=1, i=2
///예시 2: 배열 인덱스로 사용할 때
int[] arr = {1, 2, 3};
int i = 0;
System.out.println(arr[++i]);  // arr[1] 출력: 2
System.out.println(arr[i++]);  // arr[1] 출력 후 i 증가
///예시 3: 계산식에서 사용할 때
int i = 5;
System.out.println(++i + 3);  // 9 출력 (6 + 3)
System.out.println(i++ + 3);  // 9 출력 후 i 증가 (6 + 3)

존재 이유와 목적

필요성

  • 코드의 간결성 향상
  • 반복문에서의 효율적인 카운터 관리
  • 수학적 연산의 직관적 표현

실제 개발 역할

  • 루프 제어
  • 카운터 관리
  • 증분/감분 연산의 간소화

주의사항과 일반적 오류

일반적 실수

  • 전위/후위 연산자의 혼동
  • 표현식 내에서의 복잡한 사용
  • 동일 문장에서 여러 번 사용
// 잘못된 예시
int i = 5;
System.out.println(i++ + ++i); // 예측하기 어려운 결과

비교 분석

구분 전위 연산자 후위 연산자
연산 시점 즉시 문장 실행 후
반환값 변경된 값 원래 값
사용 예 ++x x++
성능 약간 빠름 약간 느림

실무 활용

일반적 사용 사례

// 반복문에서의 활용
for(int i = 0; i < 10; i++) {
    // 코드
}

// 카운터 관리
int count = 0;
while(condition) {
    count++;
}

베스트 프랙티스

  1. 단순 증감은 별도 라인에서 수행
  2. 복잡한 표현식에서는 피하기
  3. 명확성이 필요한 경우 += 1, -= 1 사용

관련 개념

  • 이전 개념: 기본 연산자, 변수와 데이터 타입
  • 후속 개념: 비교 연산자, 논리 연산자

추가 학습 포인트

  • 연산자 우선순위
  • 비트 연산자
  • 복합 대입 연산자