리터럴 : 프로그램에서 사용하는 모든 숫자, 값, 논리 값
예)10,3.14,'A',true
리터럴에 해당되는 값은 특정 메모리 공간인 상수 풀(constant pool)에 있음
필요한 경우 상수 풀에서 가져와서 사용
상수 풀에 저장 할 때 정수는 int로 실수는 double로 저장
따라서 long 이나 float 값으로 저장해야 하는 경우 식별자 (L,I,F,f)를 명시
형 변환(Type conversion)
자료형은 각각 사용하는 메모리 크기와 방식이 다름
서로 다른 자료형의 값이 대입되는 경우 형 변환이 일어남
- 묵시적 형변환 : 작은 수에서 큰 수로, 덜 정밀한 수에서 더 정밀한 수로 대입되는 경우
ex) long num = 3; Int 값에서 long으로 자동 형 변환 >> L,l을 명시하지 않아도 됨- 명시적 형변환 : 묵시정 형 변환의 반대의 경우, 변환되는 자료 형을 명시해야 함. 자료의 손실 방지를 위해서
ex) double dNum = 3.14;
int num = (int)dNum; //자료형 명시!
묵시적 형 변환(ImplicitConversion)
package variable_lecture; public class ImplicitConversion { public static void main(String[] args) { // 묵시적 형 변환 byte bNum = 10; int num = bNum; System.out.println(num); // 10출력 long lNum = 10; float fNum = lNum; System.out.println(fNum); // 10.0출력 double dNum = fNum + num; // num이 float로 먼저 형 변환이 일어나고, 계산된 후 double로 형 변환돼어서 최종 type은 double System.out.println(dNum); // 즉, 적은 수 -> 큰 수, 덜 정밀 -> 더 정밀한 수 로 형 병환은 묵시적으로 일어날 수 있다. } }
명시적 형 변환(ExplicitConversion)
package variable_lecture; public class ExplicitConversion { public static void main(String[] args) { // 명시적 형 변환 int iNum = 1000; // byte bNum = iNum; >> 오류난다. byte bNum = (byte) iNum; // System.out.println(iNum); // System.out.println(bNum); // 1000이 byte형에 들어가니깐 bNum을 출력해보면 , 1000이 아니고 -24가 출력이 된다.byte(-128~127까지) // 기존 int 였던 1000의 4바이트 중 1바이트만 가져와서 변수에 넣기 때문에 저렇게 출력(데이터 유실) double dNum = 3.14; iNum = (int) dNum; // System.out.println(iNum); // 3이 출력이되는데 double type이 명시적으로 int로 바꾸게 되면 소숫점 이하가 없어짐 // 이렇게 날리고 싶을 때는 사용하면 된다. float fNum = 0.9F; int num1 = (int) dNum + (int) fNum; int num2 = (int) (dNum + fNum); System.out.println(num1); System.err.println(num2); // truncate된다고 하고 , 유실된다고도 한다. } }
- 항(operand) : 연산에 사용되는 값
- 연산자(operator) : 항을 이용하여 연산하는 기호
항의 개수에 따른 연산자 구분
연산자 | 설명 | 연산 예 |
---|---|---|
단항 연산자 | 항이 한 개인 연산자 | ++num |
이항 연산자 | 항이 두 개인 연산자 | num1+num2; |
삼항 연산자 | 항이 세 개인 연산자 | (5>3)?1:0; |
관계 연산자
이항 연산자
연산의 결과가 true(참) or false(거짓)으로 반환
연산자 | 기능 | 연산 예 |
---|---|---|
> | 왼쪽 항이 크면 참을 아니면 거짓을 반환 | num>3; |
< | 왼쪽 항이 작으면 참, 아니면 거짓을 반환 | num<3; |
>= | 왼쪽 항이 오른쪽 항보다 크거나 같으면 참, 아니면 거짓 | num>=3; |
<= | 왼쪽 항이 오른쪽 항보다 작거나 닽으면 참, 아니면 거짓 | num<=3; |
== | 두 개의 항의 값이 같으면 참, 아니면 거짓 | num==3; |
!= | 두 개의 항이 다르면 참, 아니면 거짓 | num!=3; |
변수에 값을 대입 하는 연산자
연산의 결과를 변수에 대입
우선 순위가 가장 낮은 연산자
왼쪽 변수(lvalue)에 오른쪽 변수(값)(rvalue)를 대입
ex)
int age = 24;
// age변수에 24를 대입
totalScore = mathScore + engScore
// mathScore 값과 영어 점수 engScore를 더하여 총점을 의미하는 totalScore 변수에 더한 값을 대입
사칙연산에 사용되는 연산자
연산자 | 기능 | 연산 예 |
---|---|---|
+ | 두 항을 더합니다 | 5+3 |
- | 앞에 있는 항에서 뒤에 있는 항을 뺍니다. | 5-3 |
* | 두 항을 곱합니다. | 5*3 |
/ | 앞에 있는 항에서 뒤에 있는 항을 나누어 몫을 구합니다 | 5/3 |
% | 앞에 있는 항에서 뒤에 있는 항을 나누어 나머지를 구합니다 | 5%3 |
%는 나머지를 구하는 연산자
-> 숫자 n의 나머지는 0~n-1 범위의 수
-> 특정 범위 안의 수를 구할 때 존종 사용
단항 연산자
1만큼 더하거나 1만큼 뺄 때 사용하는 연산자
하으이 앞/뒤 위치에 따라 연산의 결과가 달라짐에 유의
연산자 | 기능 | 연산 예 |
---|---|---|
++ | 항의 값에 1을 더합니다 | val = ++num;//먼저 num 값이 1증가한 후 val 변수에 대입 |
val = num++;//val 변수에 기존 num값을 먼더 대입한 후 num값 1 증가 | ||
-- | 항의 값에서 1을 뺍니다 | val = --num;//먼저 num 값이 1감소한 후 val 변수에 대입 |
val = num--;//val 변수에 기존 num값을 먼더 대입한 후 num값 1 감소 |
논리 곱(&&)==AND 은 두 항이 모두 true일 때만 결과가 true
=>앞의 항이 false면 뒤 항의 결과를 평가하지 않아도 false
논리 합(||)==OR 은 두 항이 모두 false일 때만 결과가 false
=> 앞의 항이 true면 뒤 항의 결과를 평가하지 않아도 true
삼항 연산자
조건 식의 결과가 true(참) 인 경우와 false(거짓)인 경우에 따라 다른 식이나 결과가 수행됨
제어문 중 조건문을 간단히 표현할 때 사용할 수 있음
연산자 | 기능 | 연산예 |
---|---|---|
조건식 ? 결과1:결과2 ; | 조건식이 참이면 결과1, 조건식이 거짓이면 결과2가 선택 | int num=(5>3)? 10:20; |
if문
if(조건식){ 수행문 }
if(age>=8){ System.out.println("학교에 다닙니다."); }
if-else문
if(조건식){ 수행문1;} else {수행문2;}
package assignment_lecture; public class ifExample1 { public static void main(String[] args) { int age = 10; if (age >= 8) { System.out.println("학교에 다닙니다."); } else { System.out.println("학교에 다니지 않습니다."); } // 만약 수행문이 하나면 중괄호 쓸 필요가 없다. // 가독성을 위해서는 수행문이 1개라도 중괄호를 해주면 좋다. } }
if-else if-else 문
하나의 경우에 조건이 여러 개에 해당하는 경우if(조건 1){ 문장1; } else if(조건 2){ 문장2; } else if(조건 3){ 문장3; } else{ 문장4; }
예제
package assignment_lecture; public class ifExample2 { public static void main(String[] args) { int age = 20; int charge; if (age < 8) { charge = 1000; System.out.println("미취학 아동입니다."); } else if (age < 14) { charge = 2000; System.out.println("초등학생입니다."); } else if (age < 20) { charge = 2500; System.out.println("중,고등학생입니다."); } else { charge = 3000; System.out.println("일반인 입니다."); } System.out.println("입장료는" + charge + "원 입니다."); } }
결과
if-else 조건문은 조건 연산자로 구현 가능
if-else문
if(a>b) max = a; else{ max = b; }
이거를 조건 연산자로 구현
max = (a>b) ? a:b;
switch-case 문
조건식의 결과가 정수 또는 문자열의 값이고 그 값에 따라 수행문이 결정될 때
if-else if-else문을 대신하여 switch-case문을 사용할 수 있다.
if(rank==1){
medalColor = "G";
}
else if(rank == 2){
medalColor = "S";
}
else if(rank == 3){
medalColor = "B";
}
else {
medalColor = "A";
}
이것을, switch- case구문으로
//중괄호는 한번만
package assignment_lecture;
public class SwitchCase {
public static void main(String[] args) {
//switch-case
int rank = 1;
char medalColor;
switch (rank) {
case 1:
medalColor = 'G';
break;
case 2:
medalColor = 'S';
break;
case 3:
medalColor = 'B';
break;
default:
medalColor = 'A';
}
;
System.out.println(rank + "등 메달의 색은" + medalColor + "입니다.");
}
}
주어진 조건이 만족 할 때까지 수행문을 반복적으로 수행함
while, do-while, for 문이 있음
조건의 만족과 반복 가능 여부에 대해 정확한 코딩을 해야 함
while 문
while(조건식){ 수행문1; } // 조건식이 참인 동안 반복 수행 수행문 2; ....
예)
package loop_lecture; public class WhileExample { public static void main(String[] args) { int num = 1; int sum = 0; while (num <= 10) { sum += num; num++; } System.out.println("1부터 10까지의 합은" + sum + "입니다."); } }
결과)
do-while 문
package loop_lecture; public class WhileExample { public static void main(String[] args) { int num = 1; int sum = 0; do { sum += num; num++; } while (num <= 10); System.out.println("1부터 10까지의 합은" + sum + "입니다."); } }
do-while문의 조건문은 아래 while에 적으면 된다.
do-while문은 언제 사용하냐면, 일반적인 while문은 조건문이 true가 아니면 안의 수행문이 수행되지않는데, do-while문은 먼저 한번의 수행문이 수행되고 while의 조건이 체크된다.
그래서 한 번의 수행이 일어나고 조건이 체크되는 로직에서 사용하면 된다.
for문
반복문 중 가장 많이 사용하는 반복문
주로 조건이 횟수인 경우에 사용
초기화식, 조건식, 증감식
을 한꺼번에 작성for(초기화식;조건식;증감식){ 수행문; }
int num; for(num = 1; num <= 5; num++){ System.out.println(num); }
- 1 초기화는 한번만 수행
- 조건식이 만족하면 수행문이 수행
- 증감식이 수행
- 조건식이 만족하는지 체크하고 만족하면 수행문 수행
- 조건식이 만족하지 않으면 for 반복문 escape!
예제. 1~10 까지 더하는 for 반복문
package loop_lecture; public class ForExample { public static void main(String[] args) { int num; int sum = 0; for (num = 1; num <= 10; num++) { sum += num; } System.out.println("1~10까지의 합은" + sum + "입니다."); } }
결과
정리
각 반복문의 쓰임
- while문
- 하나의 조건에 대해 반복수행이 이루어질때 사용
- 조건이 맞지 않으면 수행문이 수행되지 않음
- 주로 조건식이 true,false로 나타남
- do-while문
- 하나의 조건에 대해 반복수행이 이루어질 때 사용
- 단, 수행문이 반드시 한번 이상 수행됨
- for문
- 가장 많이 사용
- 수의 특정 범위, 횟수와 관련한 반복수행에서 주로 사용
- 조건문 안에
초기화,조건식,증감식
이 다 들어가는게 특징!
무한 반복
while(true){ 수행문 }
do{ 수행문; }while(true);
for(;;){ 수행문; }
중첩된 반복문
반복문 내부에 또 반복문이 사용 됨
ex)구구단//2단 ~ 9단 int dan; int times; for(dan = 2; dan <=9; dan++){ for(times = 1; times <=9; times++){ System.out.println(dan + "X" + times + "=" + dan*times); } System.out.println();//한 줄 띄워서 출력 === \n(개행) }
결과
.....
continue문
반복문과 함께 쓰이며, 반복문 내부 continue문을 만나면, 이후 반복되는 부분을 수행하지 않고 조건식이나 증감식을 수행함 1부터 100까지 중 홀수만 더하는 예
package loop_lecture;
public class ContinueExample {
public static void main(String[] args) {
int total = 0;
int num;
for (num = 1; num <= 100; num++) { // 100까지 반복
if (num % 2 == 0){ // num 값이 짝수인 경우
continue; }// 이후 수행을 생략하고 num++ 수행
total += num; // num 값이 홀수인 경우에만 수행
}
System.out.println("1부터 100까지의 홀수의 합은:" + total + "입니다.");
}
}
결과
break문
반복문에서 break문을 만나면 더 이상 반복을 수행하지 않고 반복문을 빠져 나옴
중첩된 반복문 내부에 있는 경우 가장 가까운 반복문 하나만 빠져 나옴
아래의 경우 내부 반복문만 빠져 나옴//이중 loop while(조건식){ // 외부 반복문 while(조건식2){ // 내부 반복문 if(조건식) // 조건에 해당하는 경우 break // 내부 반복문만 빠져나옴 } }
//합이 100보다 클 때, break걸어서 반복문 escape package loop_lecture; public class BreakExample { public static void main(String[] args) { int sum = 0; int num = 1; while (true) { sum += num; if (sum > 100) { break; } num++; } System.out.println(sum); System.out.println(num); } }
Inflearn Do it ! 자바 프로그래밍 입문 with 은종쌤 강의