연산자
1. 연산자(operator)
- 특정 연산을 수행하기 위한 기호
- 연산을 수행한 결과를 반환
- 연산의 대상이 되는 데이터: 피연산자(operand)
- 피연산자 개수에 따라 단항, 이항, 삼항 연산자 존재
- 이항 연산자는 두 항의 자료형을 일치시키고 연산을 수행
- 수식을 계산할 때 우선순위가 높은 연산자부터 계산
- 우선순위가 같은 경우 대입연산자를 제외하고 모든 이항 연산자는 왼쪽부터 계산
- 대입 연산자는 오른쪽부터 계산
2. 연산자의 종류
구분 | 연산자 |
산술 | + - * / % 단항+ 단항- ++ -- |
비교 | > >= < <= == != instanceof |
논리 | && || ! 삼항?: & | ^ |
비트 | & | ^ ~ << >> >>> |
대입 | = += -= *= /= %= &= ^= |= >>= <<= >>>= |
형변환 | (type) |
기타 | [] () . new |
3. 연산자 우선순위
(연산 우선순위 높은 순->낮은 순)
연산자 | 적용방향 | |
[] () . 변수++ 변수-- |
후위 연산자 | >>> |
+변수 -변수 ++변수 --변수 ~ ! | 단항 | <<< |
new (type) | <<< | |
* / % | 곱셈, 나눗셈, 나머지 | >>> |
+ - | 덧셈, 뺄셈 | >>> |
<< >> >>> | 시프트 | >>> |
< > <= >= instanceof | 대소 비교 | |
== != | 동등 비교 | >>> |
& | 비트 AND | >>> |
^ | 비트 XOR | >>> |
| | 비트 OR | >>> |
&& | 논리 AND | >>> |
|| | 논리 OR | >>> |
? : | 삼항 조건 연산자 | <<< |
= += -= *= /= %= &= ^= |= <<= >>= >>>= | 대입 | <<< |
- 주요 우선순위: 산술 > 비교 > 논리 > 대입
4. 대입 연산자
1) 기본 대입 연산자 =
- 연산자 오른쪽 수식값을 왼쪽 변수에 저장
eg. sum = i+j;
- 대입연산자는 우선순위가 가장 낮음
2) 복합/축약 대입 연산자
연산자 | 사용 예 | 의미 |
+= | x += 5; | x = x + 5; |
-= | x -= 5; | x = x - 5; |
*= | x *= 5; | x = x * 5; |
/= | x /= 5; | x = x / 5; |
%= | x %= 5; | x = x % 5; |
2) 단항연산자
+a | 부호를 바꾸지 않음 | |
-a | 부호를 반대로 바꿈 | |
b = ++a | 전위 증가 연산자 | a의 값을 1 증가시켜 그 결과값을 b에 저장 |
b = --a | 전위 감소 연산자 | a의 값을 1 감소시키고 그 결과를 b에 저장 |
b = a++ | 후위 증가 연산자 | a의 값을 b에 저장하고 값을 1 증가 |
b = a-- | 후위 감소 연산자 | a의 값을 b에 저장하고 값을 1 감소 |
3) 이항연산자
a + b | a와 b를 더함 |
a - b | a에서 b를 뺌 |
a * b | a와 b를 곱함 |
a / b | a를 b로 나눈 몫 |
a % b | 모듈로 연산으로 a를 b로 나눌 때의 나머지 |
4) 연습문제
class Test {
public static void main(String[] args) {
int i = 3;
i++; // 4
System.out.println(i); // 4 출력
++i; // 5
System.out.println(i); // 5 출력
System.out.println(++i); //6 출력
System.out.println(i++); // 6 출력 후 7로 증가
System.out.println(i); // 7 출력
int x = 5, y = 10;
System.out.println(++X*Y--);
// 1) 10을 사용 후 9로 감소
// 2) 5를 6으로 증가 후 사용
// 3) 6*10 = 60 출력
}
}
5. 비교 연산자
- 대소비교는 숫자 자료형에 대해 적용 가능
- 동등비교는 어떤 자료형이든 적용 가능
- 결과값 유형은 boolean형
연산자 | 사용 예 | 해설 | 결과 |
> | 5 > 3 | true | |
>= | 3.0 >= 4.0-1.0 | 3.0 >= 3.0 | true |
< | 3*2 < 4 | 6 < 4 | false |
<= | 3 <= 3 | true | |
== | 'A' == 'a' | 동등 비교 | false |
!= | 3%2 != 2 | 1.5 != 2 | true |
instanceof | c instanceof Circle | 타입 비교 연산자로 c가 Circle의 인스턴스인가? |
6. 논리 연산자
- 논리 연산자는 boolean형에 대해 적용 가능
사용 예 | 의미 |
a && b | a, b가 모두 true -> true 그 외 -> false 만일 a가 false이면 b를 참조하지 않는다 |
a || b | a, b가 모두 false -> false 그 외 -> true 만일 a가 true이면 b를 참조하지 않는다 |
a & b | a, b가 모두 true -> true 그 외 -> false 항상 a와 b를 참조 |
a | b | a, b가 모두 false -> false 그 외 -> true 항상 a와 b를 참조 |
a ^ b | a와 b가 다르면 true, 같으면 false (XOR) |
!a | a가 true이면 false, false이면 true |
a ? (수식1) : (수식2) | a가 true이면 수식 1을 계산, false이면 수식2를 계싼 |
7. 비트 연산자
- 비트 연산자는 정수 타입에 대해서만 적용
- 비트별로 적용: 1은 true 0은 false
1) 비트 논리 연산자
연산자 | 기능 | 사용 예 | 비고 |
a & b | bitwise AND | 9 & 5 | 1001 & 0101 = 0001 = 1 |
a | b | bitwise OR | 9 | 5 | 1001 | 0101 = 1101 = 13 |
a ^ b | bitwise XOR a와 b가 다르면 true, 같으면 false |
9 ^ 5 | 1001 ^ 0101 = 1100 = 12 |
~a | bitwise NOT(complement) 1의 보수(0은 1로, 1은 0으로) |
~9 | ~0000 1001 = 1111 0110 =-10 |
2) 비트 이동 연산자
연산자 | 사용 예 |
a << b | a의 비트를 b만큼 왼쪽으로 이동 오른쪽을 0으로 채움 |
a >> b | a의 비트를 b만큼 오른쪽으로 이동 왼쪽을 부호비트로 채움(양수는 0, 음수는 1) |
a >>> b | a >>> b와 동일하나 왼쪽을 0으로 채움 |
* a가 양수인 경우 >>와 >>>의 결과는 같음
8. 연산자 사용 예
public class OpTest {
public static void main(String[] args) {
boolean c = false
System.out.println(!c && c); // false
System.out.println(3/2); // 1 // int값 나누기 int값이므로 답도 int가 되어야 함
System.out.println(3/2.0); // 1.5
int i = 3, j;
System.out.println(j=5); // 5
System.out.println(i++); // 3 출력 후 4로 증가
System.out.println(++j); // 6
System.out.println( (i>=j) ? i : j); // j 출력 = 6
int a = 0b0011_1100; // 2진수로 표현 = 십진수 60
int b = 0b0000_1101; // 0b: 2진수로 표현 = 십진수 13
System.out.println(a^b); // 0011_0001 = 49
System.out.println(a&b); // 0000_1100 = 12
System.out.println(~a); // 1100_0011 = -61
System.out.println(a<<2); // 1111_0000 = 240
System.out.println(a>>2); // 0000_1111 = 15
System.out.println(a>>>2); // 0000_1111 = 15
}
}
수식
1. 수식의 구성
- 변수, 리터럴, 연산자(operator), 메소드 호출 등으로 구성
- 복합 수식 가능
- 수식은 1개의 결과값을 가짐
ex.
10
count++
height * Math.sqrt(2)
1 / 2 * 3
x + y / 100
(x + y) / 100
result = 1+2
2. 수식의 계산
1) 계산 법칙
- 연산을 하기 전에 피연산자를 먼저 계산
- 이항 연산자에서 왼쪽 피연산자를 먼저 계산
- 괄호와 연산자 우선순위를 고려해 계산
- 메소드의 인자는 왼쪽부터 계산
3. 수식의 결과
- 수식은 반드시 1개의 결과값을 리턴
- 결과의 자료형은 수식의 구성 요소에 의해 결정
- 연산자의 종류와 피연산자의 자료형 등에 따라 정해짐
- 이항 연산에서 두 피연산자의 자료형이 같으면 결과도 같은 자료형
- 자료형이 다르면 큰 타입으로 묵시적 형변환
ex.
3 / 2 = 1
2 + 3 / 6.0 = 2.5
"Java" + 2 = Java2
sum = 1 + 2 -> 결과값은 sum = 3
4. 수식의 예
public class SimpleExpr {
public static void main(String[] args) {
int i = 1;
int j = i + 1, k = 3;
System.out.println("i+j= " + (i + j)); // i+j= 3
System.out.println("i+j= " + i + j); // i+j= 12
System.out.println(i / j / k); // i/j=1/2=0.5 -> 정수값이 되어야 하므로 0
System.out.println(i = 5); // 5
System.out.println(i++); // 5 출력 후 6으로 증가
System.out.println("Hello World");
Circle c = new Circle(i); // = new Circle(6)
System.out.println(c.getArea()); // 반지름 6인 원의 넓이를 계산해 출력
// 6*6*3.14=113.04
}
}
문장
1. 문장의 종류
- 문장(statement)은 명령 수행의 단위
- 수식문, 변수 선언문, 제어문
- 블록문, 레이블문, 예외처리문, 동기화블록
2. 수식문
- 의미 있는 수식만이 문장이 될 수 있음
- 수식에 세미콜론;을 붙이면 문장이 됨
1) 대입문
i=3;
j+=100;
2) 증가/감소문
++i;
j++;
3) 메소드 호출문
System.out.print("Hello World!");
4) 객체 생성문
Circle c = new Circle(10);
3. 변수 선언문
- 변수나 상수를 선언하는 문장
ex.
int i;
static final double PI=3.14;
static int count;
protected String name;
String s1 = "Java', s2 = "Language";
Circle c = new Circle(10);
4. 제어문
- 실행 순서를 제어하는 문장
1) 선택문
- if, switch
2) 반복문
- for, while, do-while
3) 점프문
- return, break, continue
5. 기타
1) 블록문
ex. { ... }
2) 레이블문
ex. 레이블이름: 문장
3) 예외처리문
- try catch
4) 동기화블록
- synchronized 블록
6. 문장 예제
public class StmtTest {
static int sum(int max) {
int total = 0; // 변수선언문
for(int i=1; i<=max; i++) // 반복문
total += i;
return total; // 메소드의 최종 결과값을 반환하며 메소드 종료
}
public static void main(String[] args) {
int result; // 변수선언
result = StmtTest.sum(10); // 대입문
System.out.println(result); // 출력, 함수호출
}
}
'AI > JAVA 프로그래밍 기초' 카테고리의 다른 글
JAVA 프로그래밍 기초 03 Java 기본 문법(2) (0) | 2025.10.11 |
---|---|
JAVA 프로그래밍 기초 02 Java 기본 문법(1) (0) | 2025.10.11 |
JAVA 프로그래밍 기초 01 Java 개요 (0) | 2025.10.11 |
JAVA 프로그래밍 기초 00 자바 Oracle Java SE + JDK 설치 및 환경설정 (0) | 2025.10.11 |