AI/JAVA 프로그래밍 기초

JAVA 프로그래밍 기초 04 연산자, 수식, 문장

Ayel 2025. 10. 11. 20:52

 

 

연산자

 

 

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); // 출력, 함수호출
    }
}