TIL(Today I Learned)/java

[내일배움캠프/2주차] JAVA 문법종합반 2주차 강의 1

jy3574 2024. 10. 12. 23:37

<목차>

1. 다양한 연산자에 대해 학습&사용

2. 조건문과 반복문을 통해 프로그램의 문맥 구성


연산자
변수, 상수 계산

-변수 상수를 계산하기 위해 연산자를 사용

 

<연산자와 피연산자>

-연산자 : 덧셈, 뺄셈처럼 계산할 기호

-피연산자 : 연산자로 인해 계산되는 숫자

---계산할 때 계산의 대상이 되는 것이 피연산자, 계산의 목적이 되는 것이 연산자

 

<연산자 종류>

산술 연산자 +, -, *, /, %, <<, >> 사칙연산과 비트연산
비교 연산자 >, <, >=, <=, ==, != 크고 작음과 같고 다름을 비교
논리 연산자 &&, ||, ! 그리고(And)와 또는(or)으로 조건을 연결
대입 연산자 =, ++, -- 우변의 값을 좌변에 저장, 연산 복합 대입
기타 연산자 (type), ? :, instance of 형변환 연산자, 삼항연삼자, instance of 연산자

 

*산술 연산자

-사칙 연산 및 비트 연산을 포함

-사칙 연산을 계산한 결과값을 응답

- +(덧셈), -(뺄셈), /(나눗셈, 몫), *(곱), %(나눗셈의 나머지)

 

*비교 연산자

-값이 크다/작다를 비교하거나 같다/ 다르다 를 비교하여 참(true)/ 거짓(false) 값인 boolean 값을 출력

- >(크다), <(작다), >=(크거나 같다), <=(작거나 같다), ==(같다), !=(다르다)

 

*논리 연산자

-비교 연산의 결과값으로 받을 수 있는 boolean 값을 연결하는 연산자

-조건을 연결하였을 때의 boolean 값들을 조합하여 참(true)/ 거짓(false) 값인 boolean 값을 출력

- &&(And = 피연산자 모두 참), ||(OR = 피연산자 둘 중 하나라도 참), !(피연산자의 반대 boolean 값)

 

*대입 연산자

-변수를 바로 연산해서 그 자리에서 저장하는 연산자

-기본 대입 연산자인 =와 다른 연산을 함께 쓰는 복합 대입 연산자가 있다.

- +=, -=, *=, ...

-복합 대입 연산자는 기본 대입 연산자를 심플하게 작성해주는 것이지 기능은 같다.

-추가로 += 1 은 ++와 동일(피연산자에 1 더해주기)

 

*대입 연산자 중 증감 연산자 쓸 때 주의할 점*

연산자 연산자 위치 기능 연산 예
++ ++ 피연산자 연산 전에 피연산자에 1 더해준다 val = ++num;
num+1 = val
++ 피연산자 ++ 연산 후에 피연산자에 1 더해준다 val = num++;
num=val ->num+1
-- -- 피연산자 연산 전에 피연산자에 1 빼준다 val = --num;
num-1 = val
-- 피연산자 -- 연산 후에 피연산자에 1 빼준다 val = num--;
num=val -> num-1

 

*기타 연산자

1. 형변환 연산자

-괄호 안에 변환할 타입을 넣으면 피연산자의 타입이 변경

int intNumber = 93 + (int)98.8;

 

2. 삼항 연산자

-비교 연산의 결과값에 따라 응답할 값을 직접 지정할 수 있는 연산자

-삼항 연산자는 3가지 피연산자가 존재하여 삼항 연산자라고 함

-3가지 피연산자 : 조건, 참결과, 거짓결과

(조건) ? (참결과) : (거짓결과)
int x = 1;
int y = 9;

boolean b = (x == y) ? true : false;

 

3. instance of 연산자

-class 관련 내용, 3주차에 배움

-피연산자가 조건에 명시된 클래스의 객체인지 비교하여 참/ 거짓을 응답해주는 연산자

(객체명) instance of (클래스명)

 

 

<연산자 우선순위>

-산술 > 비교> 논리> 대입

-연산자 여러개가 함께 있는 연산을 계산할때는 우선순위가 있음

-우선순위에 따라 최종적인 응답 값이 결정

-단, 괄호로 감싸주면 괄호 안의 연산이 최우선 순위로 계산됨

int x = 2;
int y = 9;
int z = 10;

boolean result = x<y && y<z;//true && true
System.out.println(result);


result = x + 2 * 3 > y;
System.out.println(result);

 

<산술 변환>

-연산 전에 피연산자의 타입을 일치시키는 것

-두 피연산자의 타입을 같게 일치시킨다

-피연산자의 타입이 int 보다 작은 short 타입이면 int로 변환

-피연산자의 타입이 long 보다 작은 int, short 타입이면 long으로 변환

-피연산자의 타입이 float 보다 작은 long, int, short 타입이면 float으로 변환

-피연산자의 타입이 double 보다 작은 float, long, int, short 타입이면 double으로 변환

-변수 여러개를 연산했을 때 결과값은 피연산자 중 표현범위가 가장 큰 변수 타입을 가지게 된다.

 

<비트연산>
-Byte를 8등분한게 Bit
-Bit는 0,1 둘 중의 하나의 값만을 저장하는 컴퓨터가 저장(표현) 가능한 가장 작은 단위
-컴퓨터의 가장 작은 단위인 bit이기 때문에 연산 중에서 bit 연산이 제일 빠름
-이전에 배운대로 0,1 값으로 산술연산을 하거나, 비교연산을 할 수 있지만 비트 연산을 통해 자리수를 옮길 수도 있음
-이처럼 bit 자리수를 옮기는 것을 비트연산이라고 함
- '<<'(왼쪽으로 자리수 옮기기), '>>'(오른쪽으로 자리수 옮기기)
-0,1 은 2진수 값이기 때문에,
---자리수를 왼쪽으로 옮기는 횟수만큼 2의 배수로 곱셈이 연산되는것과 동일
---자리수를 오른쪽으로 옮기는 횟수만큼 2의 배수로 나눗셈이 연산되는 것과 동일
-1010 -> 0101  10->5

 

 

문맥 만들기
조건문, 반복문

 

<조건문: 만약에 - if, switch>

-java 프로그래밍에서 특정 조건에 따라 다른 연산을 수행하고 싶을 때 사용

-조건이 만족하면 연산을 수행해라

 

1. if 문

*if(조건)

-특정 조건에 따라 다른 연산을 수행하고 싶을 때 사용하는 문맥

-기본적인 조건에 따른 연산을 수행하기 위해 사용

if(조건){
    연산;
}

-if의 (소괄호)안의 조건이 boolean 값 true를 만족하면 {중괄호} 안의 연산을 수행

 

*if(조건)-else

-if문 조건이 거짓일 경우에 다른 연산을 수행하기 위해 사용

if(조건){
    연산;
} else {
    연산;
}

-if의 (소괄호) 안의 조건이 boolean 값 false를 만족하면 else의 {중괄호} 안의 연산을 수행

 

*if(조건)-else if(조건)

-if문 조건이 거짓일 경우에 다시 한번 다른 조건으로 체크해서 참일 경우에 연산을 수행하기 위해 사용

if(조건){
    연산;
} else if(조건2){
    연산;
} else{
    연산;
}

-else if 의 (소괄호) 안의 조건이 boolean 값 true를 만족하면 else if의 {중괄호} 안의 연산을 수행

 

*중첩 if(조건)

-if 문에 else, else if 로 해결할 수 없는 복잡한 조건이 있을 때 사용

-중첩해서 if 문 또는 else if 문 또는 else 문 안에 if문을 넣을 수 있음

if(조건1){
    if(조건2){
        연산;
    } else if(조건3){
        연산;
    }
} else {
    if(조건2) {
        연산;
    } else if(조건3) {
        연산;
    }
}

 

2. switch-case 문

-switch(피연산자)/ case(조건)

-switch 문은 case 문과 함께 사용하며, if문 보다 가독성이 좋은 조건문 표현식

switch(피연산자) {
    case(조건): 연산
}

-switch 피연산자가 case 조건을 만족하면 case: 뒤에 명시되어 있는 연산을 수행

-case(조건) : 연산은 여러개 설정 가능

switch(피연산자) {
    case 1 : 연산;
        break;
    case 2 : 연산;
        break;
    case 3 : 연산;
        break;
......
    case  : 연산;
        break;
    default (조건) : 연산; //생략가능
}

---단, 각 case의 연산문 마지막에는 break;를 꼭 넣어줘야함

---break; 문은 해당 case의 연산문이 끝났다는 것을 알려줘 switch 문을 종료시켜줌

---만약, case의 연산문 마지막에 break;를 넣지 않는다면, case의 연산문이 안끝났기 때문에 switch 문 블럭이 끝날때까지 전부 실행

 

-swich문 중괄호 안의 제일 마지막에 default:(연산)을 명시해주어 case 조건들이 모두 만족하지 않을 때 수행할 연산을 정해줘야함

---default: (연산)은 아무것도 만족하지 않을 때 수행하는 것이라, 없다면 생략 가능

 

*if문 vs switch문

차이점1. 복합 조건

-if문은 복합 조건을 지원

---복합조건: 괄호 안에 조건 여러개를 지정하여 조건문을 수행할 수 있음

-switch 문은 피연산자 한개에 대한 조건만 지원

 

차이점2. 코드 중복

-if문은 상대적으로 코드 중복이 많음

-switch문은 코드 중복이 적음

 

 

<반복문: 계속 - for, while, do-while>

-java 프로그래밍에서 특정 조건에 따라 반복해서 동일한 연산을 수행하고 싶을 때 사용

-조건이 만족할 동안 연산을 반복해라

-반복= 끊지 않을때까지 계속 -> 잘못되면 영원히 무한루프! 주의해야함

 

1. for 문

-특정 조건에 따라 연산을 반복해서 수행하고 싶을 때 사용하는 문맥

for (초기값; 조건문; 증가연산) {
    연산;
}

-특정 조건은 초기값과 조건문을 통해서 정의

-반복할 때 마다 값을 증가시키려면 증가연산을 정의

-초기값이 조건문을 만족할 때까지 연산을 수행하면서 회차마다 증가연산을 수행

 

2. 향상된 for 문

-for 소괄호 안에 값이 3개나 들어가기 때문에 이걸 2개로 줄여주는 방법이 향상된 for 문

-향상된 for 문은 연속된 변수 목록을 출력할 때 쓰임

for (변수타입 변수명 : 목록변수) {
    연산;
}

-변수 타입과 변수 명은 for문 안에서 연산을 수행할 변수를 정의

-목록변수는 값 여러개를 하나의 변수로 저장하고 싶을 때 사용

---목록 변수는 "배열"이라고 부름

3. while 문, do-while 문

-for문과 동일하게 특정 조건에 따라 연산을 반복해서 수행하고 싶을 때 사용하는 문맥

---단, 초기값 없이 조건문만 명시하여 반복

while(조건문) {
    연산;
}

-while 문으로 사용하면 조건문을 만족해야지만 연산이 반복 수행됨

-한번 반복할 때마다 조건문을 체크해서 조건문이 불만족(false)이면 반복을 중단

 

*do-while문

do {
    연산;
} while(조건문);

-do-while문으로 사용하면 최초 1회 연산 수행 후 조건문을 체크하여 더 반복할지 결정

---반복하게 된다면 그 이후에는 한번 반복할때마다 조건문을 체크해서 조건문이 불만족(false)이면 반복을 중단

 

4. break 명령

-break; 명령을 호출하면 가장 가까운 블럭의 for문 또는 while 문, switch문 을 중단

-반복문 안에서 break; 형태로 사용

 

출력

i:0   //바깥 반복문부터 수행 시작

j:0.  //안쪽 반복문 1회차 수행

j:1

j:2.  //j가 2일때 안쪽 반복문 종료

i:1  //바깥 반복문은 아직 조건 만족이 안되서 break; 호출이 되지않았기 때문에 다음 반복 수행

j:0

j:1

j:2  //j가 2일때 안쪽 반복문 종료

i:2  //i=2일때 바깥 반복문도 break; 호출되어 종료

 

5. continue 명령

-for문 또는 while문에서 해당 순서를 패스하고 싶을때 사용

-반복문 안에서 continue; 형태로 사용

 

출력

1출력!

3출력!