지난 시간 복습
- 증감 연산자
- 비교 연산자
타입 변환(type conversion)
하나의 타입을 다른 타입으로 바꾸는 것을 타입 변환(type conversion)이라고 합니다.
자바에서 다른 타입끼리의 연산은 우선 피연산자들을 모두 같은 타입으로 만든 후에 수행됩니다.
예)
int a = 3, double b = 1.2;
double c = a+b; // 연산시 a는 double로 변환 후 계산된다.
메모리에 할당받은 바이트의 크기가 상대적으로 작은 타입에서 큰 타입으로의 타입 변환은 생략할 수 있습니다.
* 크기 순서
byte형 → short형 → int형 → long형 → float형 → double형
char형 ↗
표현 범위
byte : -128 ~ 127
short : -32768 ~ 32767
int : -2147483648 ~ 2147483647
long : -9223372036854775808 ~ 9223372036854775807
float : -3.4x10^38 ~ 3.4x10^38
double : -1.7x10^308 ~ 1.7x10^308
// OK byte형 변수에 표현 범위가 더 큰 int형 데이터를 대입하고 있음
byte num1 = 100;
// Type mismatch
// byte형 변수가 표현할 수 있는 범위를 벗어난 int형 데이터는
// 타입 변환되지 못하고, 오류를 발생시킬 것입니다.
byte num2 = 200;
//num3은 int형 리터럴이 표현할 수 있는 최대 범위인 2,147,483,647을 초과하는 정수형 리터럴을 사용했다.
int num3 = 9876543210; // Out of range
long num4 = 9876543210; // Out of range
//이렇게 int형 리터럴보다 더 큰 정수를 사용하기 위해서는 다음 예제처럼 리터럴의 마지막에 L이나 l 접미사를 추가하여 long형 리터럴로 명시해야만 합니다.
int num3 = 9876543210L; // Type mismatch
long num4 = 9876543210L; // OK
// Type mismatch
// float형 변수가 표현할 수 있는 범위를 벗어난 double형 데이터를 대입
// 오류발생
float num5 = 3.14;
* 타입 변환의 종류
자바에서 타입 변환은 크게 다음과 같이 두 가지 방식으로 나뉩니다.
1. 묵시적 타입 변환(자동 타입 변환)
- 연산이나 산술 연산에서 컴파일러가 자동으로 수행해주는 타입 변환을 가리킵니다.
2. 명시적 타입 변환(강제 타입 변환)
- 타입 캐스트 연산자(())를 사용하여 강제적으로 수행하는 타입 변환을 가리킵니다.
문법
(변환할타입) 변환할데이터
int num1 = 1, num2 = 4;
double result1 = num1 / num2;
double result2 = (double) num1 / num2;
System.out.println(result1);
System.out.println(result2);
result1은 나눗셈 연산의 결과로 0이 반환됩니다.
int형 데이터끼리의 산술 연산에 대한 결괏값은 언제나 int형 데이터의 결과로 나오게 된다.
나누기 4의 결과로는 0.25가 반환되지만, int형으로 자동 타입 변환되어 0이 반환되게 된다.
double형 변수에 그 결과가 대입될 때, double형으로 자동 타입 변환되어 0.0이라는 결과가 출력되게 된다.
따라서 정확한 결과를 얻고자 한다면
result2 라인처럼 피연산자 중 하나의 타입을 double형으로 강제 타입 변환해야 한다.
이렇게 피연산자 중 하나의 타입이 double형이 되면,
나눗셈 연산을 위해 나머지 하나의 피연산자도 double형으로 자동 타입 변환됩니다.
따라서 그 결과 또한 double형인 0.25가 될 것이며, 이 결과가 double형 변수에 제대로 대입된다.
제어문
1.if 문
2.if / else 문
3. if / else if / else 문
4. switch 문
if문을 여러번 쓰는것과
if else문을 사용하는 것은 차이가 있다.
반복문(iteration statements)
반복문이란 프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 명령문입니다.
프로그램이 처리하는 대부분의 코드는 반복적인 형태가 많으므로, 가장 많이 사용되는 제어문 중 하나입니다.
자바에서 사용되는 대표적인 반복문의 형태는 다음과 같습니다.
1. while 문
2. do / while 문
3. for 문
4. Enhanced for 문
while 문
while 문은 특정 조건을 만족할 때까지 계속해서 주어진 명령문을 반복 실행합니다.
while (조건식) {
조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
}
while 문은 우선 조건식이 참(true)인지를 판단하여, 참이면 내부의 명령문을 실행합니다.
내부의 명령문을 전부 실행하고 나면, 다시 조건식으로 돌아와 또 한 번 참인지를 판단하게 됩니다.
이렇게 조건식의 검사를 통해 반복해서 실행되는 반복문을 루프(loop)라고 합니다.
* if(a==5){ break; //반복문 } 을 넣어 break 할 수 있다.
int i = 0;
while (i < 5) {
System.out.println("while 문이 " + (i + 1) + "번째 반복 실행중입니다.");
i++; // 이 부분을 삭제하면 무한 루프에 빠지게 됨.
}
System.out.println("while 문이 종료된 후 변수 i의 값은 " + i + "입니다.");
while 문 내부에 조건식의 결과를 변경하는 명령문이 존재하지 않을 때는 프로그램이 영원히 반복되게 됩니다.
이것을 무한 루프(infinite loop)에 빠졌다고 하며, 무한 루프에 빠진 프로그램은 영원히 종료되지 않습니다.
무한 루프는 특별히 의도한 경우가 아니라면 반드시 피해야 하는 상황입니다.
따라서 while 문을 작성할 때는 조건식의 결과가 어느 순간 거짓(false)을 갖도록 조건식의 결과를 변경하는 명령문을 반드시 포함시켜야 합니다.
do / while 문
while 문은 루프에 진입하기 전에 먼저 조건식부터 검사합니다.
하지만 do / while 문은 먼저 루프를 한 번 실행한 후에 조건식을 검사합니다.
즉, do / while 문은 조건식의 결과와 상관없이 무조건 한 번은 루프를 실행합니다.
do {
조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
} while (조건식);
예제
int i = 1, j = 1;
do {
System.out.println("do / while 문이 " + i++ + "번째 반복 실행중입니다.");
j++; // 이 부분을 삭제하면 무한 루프에 빠지게 됨.
} while (j < 5);
System.out.println("do / while 문이 종료된 후 변수 j의 값은 " + j + "입니다.");
while 의 조건이 만족되는 동안 do 블럭의 코드가 반복해서 실행되고
while 의 조건이 만족되지 않으면 while 블럭의 코드가 실행된다.
For문
for (초기식; 조건식; 증감식) {
조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
}
연습문제!)
지니는 K은행에 500원을 입금했다.
하루에 이자가 10원씩 붙는다. 5일 후 지니의 잔액은 얼마가 되어있을까?
(for문 사용)
S은행은 하루에 이자가 25원씩 붙는다.
은행은 고객편의성을 위해 돈을 입금하고 일정기간이 있으면
얼마의 이자가 붙을지 확인할 수 있는 프로그램을 만들어 달라고 요청했다.
(for문 사용)
커피 주문 받기
String menu = "*** 커피 메뉴 ***\n";
menu += "1. 아메리카노 2000원\n";
menu += "2. 카페라떼 3500원\n";
menu += "3. 카라멜 마끼아또 5000원\n";
menu += "4. 자바칩 프라프치노 6500원\n";
menu += "5. 프로그램 종료\n";
int sum = 0;
int exit = 0;
String bill = "*** 영수증 ***\n";
while(true) {
int choice = Integer.parseInt(JOptionPane.showInputDialog(menu + "커피를 선택하세요."));
switch (choice) {
case 1:
sum += 2000;
bill += "아메리카노 2000원\n";
break;
case 2:
sum += 3500;
bill += "카페라떼 3500원\n";
break;
case 3:
sum += 5000;
bill += "카라멜 마끼아또 5000원\n";
break;
case 4:
sum += 6500;
bill += "자바칩 프라프치노 6500원\n";
break;
case 5:
exit = -1;
break;
default:
JOptionPane.showMessageDialog(null, "잘못된 입력입니다.");
} // switch
if (exit == -1) {
JOptionPane.showMessageDialog(null, "프로그램 종료");
break;
}
} // while
JOptionPane.showMessageDialog(null, bill + sum+"원");
}
JOptionPane
메소드는 4가지 종류가 있다.
showConfirmDialog
showMessageDialog
showInputDialog
showOptionDialog
- Component parentComponent
이 값은 null 이 될 수 있습니다. 부모 컴포넌트를 지정하는데. 이 경우 선택된 컴포넌트는 다이어로그가 닫히기 전까지
활성화 될 수 없습니다. 예를들어 이곳에 프레임을 주고 다이어로그를 띄우면 다이어로그가 끝날 때 까지
프레임을 활성화 할 수는 없죠
또한 이 메소들이 같은 종류가 여러개 오버라이드 되어 있는데.
그 파라미터로 가는 값에 대해서 알아봅시다.
- Object message
표시될 내용입니다.
- String title
타이틀 입니다.
- int messageType
메세지의 타입을 지정합니다. JOptionPane 클래스에 정의된 정적 상수들의 값을 넣습니다.
ERROR_MESSAGE : 메세지가 에러 메세지로 표시됩니다.
INFORMATION_MESSAGE : 정보 메시지로 '!' 아이콘이 뜹니다.
WARNING_MESSAGE : 경고 메세지입니다.
QUESTION_MESSAGE : 질문하는 '?'아이콘이 생기는 메세지입니다.
PLAIN_MESSAGE : 아무것도 없는 일반적인 메세지 입니다.
'JAVA 강의 ( 초급)' 카테고리의 다른 글
| AJAX 기초 수업 개념 정리!! (0) | 2021.02.18 |
|---|---|
| SpringBoot Ajax 사용하기! (0) | 2021.02.18 |
| JSON 에 대해서 알아봅시다. (0) | 2021.02.17 |
| 자바 2강! (0) | 2020.09.26 |