프로그래밍 공부

2025.01.14 java 공부

3452 2025. 1. 14. 17:58

연산자

 

산술 연산자

 

종류 연산자 설명
산술연산자 + - * / % 사칙연산 및 나머지 연산
단항연산자 - 부호 연산자
! 논리 부정 연산자
++ -- 증감 연산자
비교 연산자 > < >= <= == != 양 변을 비교하는 연산
논리 연산자 && || AND, OR, XOR 연산
쉬프트 연산자 << >> >>> 비트를 이동하는 연산
기타 연산자 (조건) ? 참 : 거짓 삼항 연산자
= += -= *= /= %= 대입 연산자

 

산술연산자 + - * /는 사칙연산을 의미하고, %는 /와 같은 나누기이지만, 값이 아닌 나머지를 취한다.

 

단항연산자의 증감 연산자는 int a = 1; a = a + 1;과 a = a - 1;의 축약형이다.

 

System.out.println(++a); // a의 값을 출력하기 전에 a에 1을 더한 후 출력하게 된다. 출력값 : 2

 

System.out.println(a++); // a의 값을 먼저 출력하고 ++를 적용한다. 출력값 : 2, 출력후 a 값 : 3

 

int a = 1;

a++; // a = 2

a++; // a = 3

++a; // a = 4

int s = a++ // s = 4, 이후 a = 5

System.out.println(s); // 출력값 : 4 s를 불러와서 출력하기 때문에 불러올 당시의 4를 출력한다.

 

 

연산자 우선순위는 () []와 같은 괄호가 1순위이고, =와 같은 대입 연산자가 8순위이다.

 

int a = 10; // a는 10이다.

char b = (char) (a++); // a의 값이 먼저 char에 의해 수동형변환이 이루어져 b는 줄바꿈문자(10)이 되고, a는 11이 된다.

 

이를 통해 알수 있는 사실은 괄호가 최우선 적용되어 a의 값을 char로 형변환 시키고, 그 후 8순위인 대입연산이 이루어져 b에 11이 아닌 10이 대입이 됐으며, 이 후에 a가 11이 되었다는점이다.

 

이로써 변수 뒤에 붙는 ++는 8순위 대입 연산자 보다 낮은 우선순위가 적용된다는 사실을 알수있다.

 

 

논리연산자 && || 

 

&& : A와 B가 참이여야 참이다.

|| : A 또는 B가 참이면 참이다.

 

쉽게 이해하기 위해서 참은 1, 거짓은 0, &&은 *, ||은 +로 생각한다.

 

int a = 10;

int b = 5; 일때,

 

a > 5 && b < 7 이라고 가정하면, a>5는 참이기 때문에 1, &&은 *, b < 7도 참 이기 때문에 1이다.

 

따라서 1 * 1 = 1이 성립하여 결과는 참이 된다.

 

a > 15 && b < 10 이면, a > 15는 거짓이므로 0, &&은 *, b < 10은 참이므로 1이 된다.

 

따라서 0 * 1 = 0 이기 때문에 결과는 거짓이 된다.

 

a > 15 || b < 10 이면, a >15는 거짓, ||는 +, b < 10은 참이기 때문에

 

0 + 1 = 1 이므로 참이 된다.

 

 

 

부정 연산자

 

!는 참은 거짓으로, 거짓은 참으로 만든다.

 

boolean a = true;

boolean b = false; 일때

 

!a 는 false, !b는 true가 된다.

 

boolean의 경우 자바에서 제어문의 조건으로서 활용되기 때문에 !를 이용하여 조건에 적용할수있다.

 

 

비교 연산자

 

양변을 비교하여 true 또는 false를 반환한다.

 

마찬가지로 true 또는 false를 반환하기 때문에 제어문의 조건으로 주로 사용되며,

 

==의 경우 문자(char)에는 사용할수 있지만, 문자열(String)에는 적용할수 없다.

 

String은 데이터타입이 아닌 객체이기 때문이다.

 

String의 경우에는 == 대신에 .equals를 사용한다.

 

 

대입 연산자

 

값을 할당하는데 쓰이는 연산자이다.

 

해당 라인에서 가장 마지막에 수행되며, 연산자 기준 오른쪽의 값을 왼쪽에 대입하기 때문에

 

반드시 연산자 왼쪽에 변수가 와야하며, 대입시 타입이 다르면 수동형변환 시켜야한다.

 

대입 연산자에서 =은 저장의 의미를 가진다.

 

 

if

 

if(조건문) {//실행부분} 의 형태를 가지며, 조건문에 있는 값이 true가 되면 실행부분을 실행하고, false라면 무시한다.

 

if(조건문){//실행부분1} else{//실행부분2} if의 조건이 true면 if의 실행부분1을, false면 else의 실행부분2를 실행한다.

 

if(조건문1){//실행부분1} else if(조건문2){//실행부분2} else{//실행부분3} if의 조건이 참이면 실행부분1, 거짓이면 조건문 2를 보고 참이면 실행부분2를, 거짓이면 else의 실행부분3을 실행한다.

 

else if는 하나의 if문에서 여러번 사용할 수 있다.

 

if() {

} else if () {

} else if () {

} else if () {

} else {

}

 

위의 형태처럼 가능하다.

 

if문의 특징으로는 if의 조건문 안에 범위설정이 가능하다.

 

a > 10 && a < 50과 같은 범위설정 값을 조건문으로써 사용할수 있다.

 

 

switch

 

switch는 범위설정을 조건으로 둘수 없고, switch 변수에 대해서 정확히 값이 일치할때만 실행된다.

 

만약 switch 변수가 a라면, case에는 a의 정확한 값이 일치하면 실행되는 코드를 두고, case를 여러개 두어 a의 값에 따라 다른 동작을 하도록 한다. 

 

해당하는 case에 지정된 값과 a값이 일치하지 않으면 default를 실행한다.

 

이후 break;를 이용해 switch문을 끝내버린다. 만약 break;를 사용하지 않는다면, switch 변수는 case의 조건이 충족됨에도 불구하고 모든 case의 조건과 비교하게 된다.

 

 

 

for

 

for(초기화; 조건식; 증감식){//조건식이 참일때 실행되는 부분} 의 형태를 가지며 특정한 행동을 특정한 횟수동안 반복하고 싶을 때 사용한다.

 

for(int i = 0; i < 10; i++){Sytem.out.println("안녕하세요")} 라는 코드가 있다고 가정하면

 

최초 1번 i는 0이 된다. 그후 조건식으로 i 의 값을 10과 비교한다. 조건식이 참이면 "안녕하세요"를 출력하고, i 값에 1을 더한다.

 

이 다음 부터는 i는 0이 되지않고, 조건식 비교, 출력, i값 증가를 조건식이 거짓이 될때까지 반복한다.

 

위의 코드의 경우에는 i는 0부터 9까지 코드를 출력하고, 증가식에 의해 i는 10이 되어 조건식이 거짓이 되어 끝나며,

 

최종적으로 "안녕하세요"를 10번 출력하게 된다.