초록꼬마의 devlog
article thumbnail

2021.10.15(금)

1. 🌿 강제 형 변환

<code />
// 강제/명시적 형 변환 : 큰 바이트 -> 작은 바이트 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. 🌿 연산자

(헷갈릴 만한 내용 위주 정리, 특별 학습 필요 = ✅)

2.1. 🌱 2항 연산자

  • 산술 연산자
    • 문자열 + 기본 자료형 = 문자열
    • 정수 나눗셈 주의!
  • 비교/관계 연산자
    • 비교 연산의 결과는 true/false
  • 논리 연산자
<code />
/* 진리표 * &&: 개의 조건이 모두 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 }

 

2.2. 🌱 단항 연산자

  • 논리부정 연산자
  • 증감 연산자 ✅
<code />
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 } }

 

2.3. 🌱 복합(산술)대입 연산자

  • 다른 산술연산자(+ - * / %)와 대입연산자(=)가 결합한 것
  • 이항 연산자
  • 자기 자신과 해당 산술연산 후에 그 결과를 자기 자신에게 덮어씌우는 것

 

2.4. 🌱 3항 연산자

조건식 ? 조건이 true일 경우의 결과값 : 조건이 false일 경우의 결과값

2.5.  

2.6. 🌱 연산자 우선 순위 ✅

<code />
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

3. 📗 소감

  • 앞으로 기본이 되는 내용이니 숨쉬듯이 익숙하게 하자!

📗 homework: 변수

  1. 키보드로 정수 두 개를 입력 받아 두 수의 합, 차, 곱, 나누기한 몫을 출력하세요.
  2. 키보드로 가로, 세로 값을 실수형으로 입력 받아 사각형의 면적과 둘레를 계산하여 출력하세요.
  3. 영어 알파벳 문자열 값을 키보드로 입력 받아 문자에서 앞에서 세 개를 출력하세요.
  4. 키보드로 입력 받은 값들을 변수에 기록하고 저장된 변수 값을 화면에 출력하여 확인하세요.