2021.10.15(금)
🌿 강제 형 변환
// 강제/명시적 형 변환 : 큰 바이트 -> 작은 바이트
public void forceCasting() {
// (바꿀 자료형)값
// 1. double(8bytes) -> float(4bytes)
float f1 = 4.0f;
double d2 = 8.0;
float f2 = (float)d2; // double형을 float형으로 저장하려면 강제형변환 필요
System.out.println(f2);
// 2. double(8bytes) -> int(4bytes)
double d3 = 10.89;
int i3 = (int)d3; // double형을 int형으로 저장하려면 강제형변환 필요
System.out.println(i3); // 10 출력; 소수점 아래 부분(0.89)이 절삭됨 -> 데이터 손실됨
int iNum = 10;
double dNum = 8.89;
System.out.println(iNum + dNum); // iNum + dNum 덧셈 결과는 double로 자동형변환(작은 -> 더 큰 자료형으로); 18.89 출력
int result = iNum +(int)dNum; // int형 값을 저장할 메모리 공간을 할당받고, 그 이름을 result라는 식별자로 하겠다(=변수 선언) -> 대입연산자를 통해 우항의 int값(literal; 18)이 공간에 저장됨; 영역{} 안에서 계속 존재하며 사용됨
System.out.println(result);
result = (int)(iNum + dNum); // 130행과 연산 결과는 같으나, 연산하고자 하는 바를 나타내는 데에 조금 더 명확하고 좋은 표기 방법
// 새로운 int형 저장 공간 마련하는 대신, 130행에서 만들어/선언해둔 공간/변수("result")를 사용함
System.out.println(result);
}
🌿 연산자
(헷갈릴 만한 내용 위주 정리, 특별 학습 필요 = ✅)
🌱 2항 연산자
- 산술 연산자
- 문자열 + 기본 자료형 = 문자열
- 정수 나눗셈 주의!
- 비교/관계 연산자
- 비교 연산의 결과는 true/false
- 논리 연산자
/* 진리표
* &&: 두 개의 조건이 모두 true일 때 결과가 true
* true && true -> true
* true && false -> false
* false && true -> false
* false && false -> false
*
* ||: 두 개의 조건 중 하나라도 true이면 결과가 true
* true || true -> true
* true || false -> true
* false || true -> true
* false || false -> false
*/
public void method4() {
int num = 10;
boolean result = false && (num > 0); // Java의 shortcut 연산; "dead code" 경고msg
// 첫번째 피연산자가 false니까 뒤의 비교 연산 구문(dead code)을 굳이 실행하지 않음
// dead code: 실행 오류는 나지 않지만, 결과값이 false일텐데 굳이 왜 쓰지? -> 굳이 쓸 필요 없는 codes -> 안 좋은 codes
}
🌱 단항 연산자
- 논리부정 연산자
- 증감 연산자 ✅
public class B_InDecrease {
/* 증감연산자: 단항연산자; 한 번에 1씩 증가/더하거나 감소하는/빼는 연산을 함
* -> 먼저 증감을 할건지, 나중에 증감을 할건지 연산자의 위치(피연산자의 앞 또는 뒤)에 따라 달라짐
*
* 표현법
* ++: 값을 1씩만 증가시키는 연산자
* --: 값을 1씩만 감소시키는 연산자
*
* 연산자의 위치
* 전위 연산: ++값, --값 -> 먼저 값을 증감하고 그 값을 처리
* 후위 연산: 값++, 값-- -> 값을 먼저 처리하고 나서 증가/감소함
*/
// 후위 연산
public void method1() {
int num = 10;
System.out.println("num : " + num);
num++; // line by line 처리 -> 세미콜론; = 논리적인 한 구절이 끝남 = ☆처리★; 여기까지 num = 10
// -> 그 후에 'num 변수의 literal 값에 1을 증가시키겠다'; num + 1 -> 여기부터 num = 11
System.out.println("☆처리★ num : " + num); // num = 11
num--; // 세미콜론 = ☆처리★; 세미콜론까지는 num = 11
// -> 그 후에 num - 1; num = 10
System.out.println("☆처리★ num : " + num); // num = 10
System.out.println("num : " + num++); // 세미콜론 ☆처리★ 전까지 num = 10
// -> 그 후에 num + 1; num = 11
System.out.println("num : " + num); // 11
}
public void method2() {
int a = 10; // step1) 오른쪽의 '값'을 왼쪽(공간)에 넣음 -> 10을 a에 직접 대입
int b = a++; // step2) 오른쪽의 '값'(a에 저장되어 있는 값 = 10)을 왼쪽(공간, b라는 변수)에 넣음/대입(= '대입'이라는 ☆처리★ 완료) -> 세미콜론;
// -> step3) 그 다음/세미콜론 지나고 a의 값을 1만큼 증가시킴(a = 10 -> 11)
System.out.println("a : " + a); // 11
System.out.println("b : " + b); // 10
int c = 20; // step1) 20 값을 변수/공간 c에 대입/저장
int d = c--; // step2) c에 저장되어 있는 값(20)을 d에 대입하는 처리를 먼저 수행
// -> step3) 그 다음 c의 값을 1만큼 감소시킴(c = 20 -> 19)
System.out.println("c : " + c); // 19
System.out.println("d : " + d); // 20
}
// 전위 연산
public void method3() {
int a = 10; // step1) 값 10을 변수 a에 저장
int b = ++a; // step2) a의 값 1만큼 증가 연산 먼저 함( a = 10 -> 11)
// -> step3) 그 다음 a의 값을 b에 저장/대입하는 처리 수행
System.out.println("a : " + a); // 11
System.out.println("b : " + b); // 11
System.out.println("a : " + --a); // a의 값을 1만큼 감소시킴 -> a = 11 -> 10
}
public void method4() {
// 후위 연산자
int num1 = 20; // step1) 값 20을 변수 num1에 저장
int result1 = num1++*3; // 처리 후 num1의 값을 1만큼 증가시킴 -> step2) 첫번째 처리 = num1에 3 곱함 = 60 -> step3) 60을 result에 대입
// -> step4) 그 다음 num1의 값을 1만큼 증가시킴(num1 = 20 -> 21)
System.out.println("num1 : " + num1); // 21
System.out.println("result1 : " + result1); // 60
// 전위 연산자
int num2 = 20;
int result2 = ++num2*3;
System.out.println("num2 : " + num2); // 21
System.out.println("result2 : " + result2); // 63
}
}
🌱 복합(산술)대입 연산자
- 다른 산술연산자(+ - * / %)와 대입연산자(=)가 결합한 것
- 이항 연산자
- 자기 자신과 해당 산술연산 후에 그 결과를 자기 자신에게 덮어씌우는 것
🌱 3항 연산자
조건식 ? 조건이 true일 경우의 결과값 : 조건이 false일 경우의 결과값
🌱 연산자 우선 순위 ✅
int a = 5; // 5 -> 6 -> 7
int b = 10; // 10 -> 9
int c = (++a) + b; // 6 + 10 = 16 -> 15
int d = c / a; // 16 / 6 = 2 -> 1
int e = c % a; // 16 % 6 = 4 -> 5 -> 6
int f = e++; // 4
int g = (--b) + (d--); // 9 + 2 = 11 -> 10
int h = 2; // 2
int i = a++ + b / (--c / f) * (g-- - d) % (++e + h); // 연산자와 피연산자 띄어쓰기 -> 가독성 향상
// = 6 + 9 / (15 / 4) * (11 - 1) % (6 + 2)
// = 6 + 9 / 3 * 10 % 8
// = 6 + 30 % 8
// = 6 + 6
// = 12
📗 소감
- 앞으로 기본이 되는 내용이니 숨쉬듯이 익숙하게 하자!
📗 homework: 변수
- 키보드로 정수 두 개를 입력 받아 두 수의 합, 차, 곱, 나누기한 몫을 출력하세요.
- 키보드로 가로, 세로 값을 실수형으로 입력 받아 사각형의 면적과 둘레를 계산하여 출력하세요.
- 영어 알파벳 문자열 값을 키보드로 입력 받아 문자에서 앞에서 세 개를 출력하세요.
- 키보드로 입력 받은 값들을 변수에 기록하고 저장된 변수 값을 화면에 출력하여 확인하세요.
'back-end dev > Java' 카테고리의 다른 글
[KH정보교육원] 6일차_조건문 (0) | 2021.11.07 |
---|---|
[KH정보교육원] 5일차_조건문 (0) | 2021.11.07 |
[KH정보교육원] 3일차_출력문, 입력, 형변환 (0) | 2021.11.07 |
[KH정보교육원] 2일차_Java 프로그래밍 시작, 변수 (0) | 2021.11.07 |
[KH정보교육원] 1일차_환경 설정 (0) | 2021.11.07 |