javaboiii 2024. 7. 14. 14:14

JAVA

1. 연산

연산이란 데이터를 처리하고 결과를 산출하는 작업을 말하며 연산은 항(operand)과 연산자(operator)로

이루어 지는데, 항(또는 피여난자)은 연산에 사용되는 값을 말하며, 연산자는 기호를 의미합니다.

항과 연산자를 이용해 연산 과정을 나열한 것을 연산식(experssion)이라고 합니다.

 

기본 연산자의 종류

  • 단항 연산자 : 피연산자 개수가 1개인 연산자
  • 이항 연산자 : 피연산자 개수가 2개인 연산자
  • 삼항 연산자 : 피연산자 개수가 3개인 연산자

자바에서 제공하는 연산자의 종류

연산자 분류 종류 연산자 기능
단항 부호 +, -, *, /, % 사칙연산, 나머지 연산
증감 ++, -- 음수, 양수 부호
논리 ! 논리 부정
이항 논리 &, |, &&, || 논리곱, 논리합
문자열 + 문자열 연결
대입 =, +=, -=, *=, /=, %= 우변의 값을 좌변에 대입
비교 ==, !=, >, <, >=, <=,
instanceof
값 비교
삼항 조건식 조건식? A : B 조건식 결과에 따라 A, B 선택

 

2. 연산자 우선순위와 연산 방향

사칙연산 외에도 자바에서 사용하는 다양한연산자들이 연산 방향과 우선순위가 정해져 있습니다.

하나의 연산식에 여러 종류의 연산자가 있을 경우 우선순위가 높은 연산자를 먼저 처리합니다.

우선순위가 같은 연산자들은 연산의 방향에 따라 순서가 정해집니다.

 

우선순위 종류 연산자 연산방향
높음
^
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

낮음
최우선 연산자 괄호( (), [] ) 다양 ==>
단항 연산자 증감(++, --), 부호(+,-), 비트(~), 논리(!) 단항 <==
산술 연산자 산술(*, /, %) 이항 ==>
산술(+, -) ==>
쉬프트(>>, <<, >>>) ==>
비교 연산자 비교(<, >, <=, >=, instanceof) 이항 ==>
비교(==, !=) ==>
논리 연산자 비교 논리(&, ^, |), 논리(&&, ||) 단항/이항 ==>
삼항 연산자 조건(?, :) 삼항 ==>
대입 연산자 대입(=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=,
>>>=)
이항 <==
콤마 연산자 콤마(,)   ==>

 

복잡한 수식은 먼저 처리해야 할 연산식을 괄호()를 사용해 묶어서 표시하는 것이 좋습니다

괄호() 안에 있는 연산은 최우선 순위를 가지므로 다른 연산자보다 우선 처리됩니다.

 

복잡한 표현식에 중복되지만 명확한 괄호를 추가하면 나중에 혼동을 방지할 수 있고 가독성을 높여줍니다.

 

연산자 우선순위 정리

- 단항, 이항, 삼항, 연산자 순으로 우선순위를 가짐

- 이항 연산자는 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 가짐

- 단항과 대입 연산자를 제외한 모든 연산의 진행 방향은 왼쪽에서 오른쪽

- 복잡한 연산식은 괄호()를 사용해 우선순위를 정함

 

3. 단항 연산자

부호 연산자

부호 연산자는 말 그대로 부호를 나타내는 연산자이며

문자형 char와 논리형 boolean을 제외한 기본 자료형에서 사용할 수 있습니다.

 

증감 연산자

증감 연산자는 피연산자의 값을 1씩 증가 또는 감소 시키는 연산자 입니다.

++ 증가 / -- 감소

 

피연산자가 선언된 후, 피연산자가 사용되는 어디에서도 증감 연산자를 사용할 수 있지만

피연산자는 반드시 초기화된 상태여야 합니다.

 

연산자 순서 내용
증감 연산자가 피연산자 앞에 위치(전위형)
ex) ++num, --num
1이 먼저 증감되고 코드에 즉시 반영되어 실행
증감 연산자가 피연산자 뒤에 위치(후위형)
ex) num++, num--
코드가 먼저 실행되고 1이 증감
즉, 다음 코드부터 증감된 값을 반영

 

논리 부정 연산자 !

논리 부정 연산자(!)는 논리 연산자 중에서 유일한 단항 연산자입니다.

boolean 값을 가지는 피연산자의 앞에 !를 붙여 값을 반대로 바꾸는 역할을 합니다

즉, true는 false로 false는 true로 바꿔줍니다.

 

주의할 점은, 논리 부정 연산자를 사용하더라도 그 사용한 곳에서만 적용될 뿐 진짜 변수의 값이 반대로

바뀌어 저장되는 것은 아닙니다

 

4. 이항 연산자

이항 연산자는 피연산자가 2개인 연산자를 말합니다. 일반적으로 연산자를 중심으로

피연산자가 왼쪽, 오른쪽에 위치합니다.

 

산술 연산자

산술연산자는 우리가 실행활에서 사용하는 산술 연산과 동일한 역할을 하는 연산자 입니다.

연산자 연산 작업 사용 방법 설명
+ 덧셈 a + b a와 b를 더한다
- 뺄셈 a - b a에서 b를 뺀다
*
(프로그래밍에서는 곱셈을
X가 아닌 *으로 표현합니다)
곱셈 a * b a와 b를 곱한다
/ 나눗셈 몫 a / b a를 b로 나눈다
% 나눗셈 나머지 a % b a를 b로 나눈 나머지 값

 

  • 피연산자의 자료형이 일치하는 않을 경우 크기가 큰 자료형으로 자동 형 변환이 일어난 후 연산을 수행합니다.
  • 연산의 결과값이 산출 자료형의 표현 범위 안에 있어야 합니다. 그렇지 않으면 오버플로우가 발생하거나 쓰레기 값이 입력됩니다.

 

대입 연산자

대입 연산자는 변수에 값 또는 연산 결과를 저장하는데 사용됩니다.

다른 연산자와 결합하여 사용하는 복합 대입 연산자는 반드시 두 연산자 사이에 공백이 없어야합니다.

연산자 연산 내용
= 왼쪽 피연산자에 오른쪽 피연산자의 값을 대입
ex) int x =10, String str = "apple"
+= 왼쪽 피연산자에 오른쪽 피연산자를 더한 결과값을 대입
ex) int y = 19;
y += 1; // y = y + 1과 같은 의미 20이 출력됨
-= 왼쪽 피연산자에 오른쪽 피연산자를 뺀 결과값을 대입
*= 왼쪽 피연산자에 오른쪽 피연산자를 곱한 값을 대입
/= 왼쪽 피연산자에 오른쪽 피연산자를 나눈 몫을 대입
%= 왼쪽 피연산자에 오른쪽 피연산자를 나눈 나머지를 대입

 

대입 연산자는 우선순위가 가장 낮은 연산자로 가장 마지막에 수행합니다.

 

관계 연산자

피연산자를 비교하여 그 부호 관계가 true인지 false인지 판별하는 연산자로 비교 연산자라고도 합니다.

관계 연산자 의미
대소 연산자 a > b a가 b보다 크면 true, 아니면 false
a >= b a가 b보다 크거나 같으면 true, 아니면 false
a < b a가 b보다 작으면 true, 아니면 false
a <= b a가 b보다 작거나 같으면 true, 아니면 false
등가 연산자 a == b a와 b가 같으면 true, 아니면 false
a != b a와 b가 다르면 true, 아니면 false

 

대소 연산자는 boolean형을 제외한 기본 자료형에서 사용할 수 있으며,

등가 연산자는 모든 자료형에서 사용할 수 있습니다.

 

  • 관계 연산자는 2개 이상 연속으로 사용할 수 없습니다
  • 관계 연산자의 연산 방향은 왼쪽에서 오른쪽입니다. 기본 형태 자체가 관계 연산자를 기준으로 왼쪽 오른쪽의 피연산자를 비교한 후 결과값을 반환하는 것입니다. 만약, A <= B == C와 같이 연속으로 작성하게 되면, A <= B의 연산에 대한 결과를 확인하고 바로 결과값을 반환해 버리기 때문에 C는 연산의 대상조차 될 수 없습니다.

논리 연산자

논리 연산자는 피연산자로 이항을 가지며, 논리식의 결과가 true인지 false인지 반환하는 연산자입니다.

논리 연산자는 피연산로 boolean형만 사용할 수 있습니다.

 

연산자 논리식 연산 내용
&& 또는 & 논리곱(AND) 두 항이 모두 true일 때만 true, 나머지는 false
|| 또는 | 논리합(OR) 두 항 중 하나라도 true면 true, 모두 false면 false
^ 베타적 논리합(XOR) 두 항이 다른 값이라면 true, 같으면 false
! NOT 논리식이 true면 false로, false면 true로 바꿔서 출력

 

비트 논리 연산자의 모든 동작의 결과 진리표

A B A | B(OR) A & B(AND) A ^ B(XOR) !A(NOT)
true true true true false false
true false true false true false
false true true false true true
false false false false false true

 

5. 삼항 연산자

삼항 연산자는 피연산자가 3개인 연산자를 말하며 조건 연산자라고도 합니다.

삼항 연산자의 피연산자는 조건으로 사용되는 조건문과 그 조건의 결과에 따라 선택될 피연산자 2개로 구성됩니다.

 

대표적인 삼항 연산자의 형태

조건식 ? 피연산자1 : 피연산자2

조건식의 연산 결과가 true이면 '피연산자1'이 실행되며, false이면 '피연산자2'가 실행됩니다

 

public static void main(String[] args){
	int num = (7 > 1) ? 1 : 2;
    System.out.println(num);
}
실행 결과 : 1

 괄호() 안의 조건식이 true이기 때문에 1과 2중 ④이 선택되어 num에 저장됩니다.

삼항 연산자는 '제어문' if문과 구조가 같아서 서로 대체해 사용할 수 있습니다.

 

응용문제

1. 다음 문장이 맞으면 O표, 틀리면 X표하세요

① 피연산자의 개수에 따라 연산자를 단항/이항/삼항으로 구분합니다(  )

② 연산자는 우선순위가 존재합니다 (  )

③ 연산의 결과로 하나 이상의 값이 출력될 수 있습니다 (  )

④ 논리 연산의 결과는 boolean으로 출력됩니다 (  )

정답 : O O X O

2. 다음 코드를 실행 했을 때 콘솔창에 출력되는 결과는 무엇입니까 ?

 

package section03;

public class PRACTICE_03_02{
	public static void main(String[] args){
    	int x = 613;
        
        System.out.println(++x);
        System.out.println(++x);
        System.out.println(x++);
        System.out.println(--x);
    }
}
실행 결과 : 
614
615
615
615

3. 2개의 피연산자를 부호로 비교하여 그 부호 관계가 true인지 false인지 판별하는 연산자로 비교 연산자라고도 불리는 연산자는 무엇입니까 ?

① 부호 연산자          ② 증감 연산자           ③ 관계 연산자           ④ 대입 연산자

 

정답 : 관계 연산자

4. 다음과 같은 결과가 나오도록 코드를 수정해 보세요

package section03;

public class PRACTICE_03_04{
	public static void main(String[] args){
    	int a = 300;
        int b = 150;
        
        System.out.println(b/a);
    }
}
실행 결과 : 0.5

 

정답

인가 ?

package section03;

public class PRACTICE_03_04{
	public static void main(String[] args){
    	int a = 300;
        int b = 150;
        
        System.out.println(b/a);
    }
}
실행 결과 : 0.5


1. a 또는 b를 double타입으로 수정하여 선언한다
OR
2. 8번 라인에서 연산된 결과를 double타입으로 형 변환 한다

5. 다음 코드를 실행했을 때 콘솔창에 출력되는 결과는 무엇입니까 ?

package section03;

public class PRACTICE_03_04{
	public static void main(String[] args){
    	String a = (7 > 9)? "apple" : "banana";
        a += " juice";
        
        System.out.println(a);
    }
}
실행 결과 : banana juice