05. Java 기초 2 / 20230418

2023. 4. 18. 23:24
🧑🏻‍💻 연산자, 콘솔 입출력, 제어문-조건문

 

💡 연산자(Operator)

➡️ 하나의 값 또는 여러 개의 값을 피연산자로 하여 새로운 값을 만들어내는 기호

  • 산술 연산자 
    → 사칙연산에서 사용되는 연산자( +, -, *, / ) 와 나머지 연산자(%)
    → 우리가 알고있는 일반적인 수학 연산과 거의 동일
int num1 = 1;
int num2 = num1 + 2; // num2 -> 3
int num3 = num2 - 1; // num3 -> 2
int num4 = num3 * 3; // num4 -> 9
int num5 = num4 / 2; // num5 -> 4
int num6 = num5 % 3; // num6 -> 1

📍 나눗셈 연산자와 나머지 연산자를 사용할 때는 우항에 0이 위치할 수 없음, 즉 어떤 수를 0으로 나눌 수 x

int    num1 = 9 / 0;   // 에러
double num2 = 9.0 / 0; // Infinity

int    num3 = 9 % 0;   // 에러
double num4 = 9.0 % 0; // 에러

📍 나눗셈 연산자를 사용할 때, 좌항과 우항이 모두 int 형이면 그 결과도 int형 소수점 이하의 값은 버려지고 오직 몫만 결과로 반환

📍 좌항과 우항 중 하나라도 실수 타입의 값이 존재한다면 실수 타입이 아닌 값도 실수 타입으로 자동 형변환되어 계산
     → 실수 간의 나눗셈 연산이 되어 소수점이 버려지지 않은 온전한 값 결과값으로 반환

double num1 = 9 / 2;   // 4.0
int    num2 = 9 / 2;   // 4
double num3 = 9.0 / 2; // 4.5

 

  • 증감 연산자
    → 변수의 값을 1씩 증가시키거나 감소시키는 연산자
num1 = num1 + 1; // num1의 값은 2가 됩니다. 
num2 = num2 - 1; // num2의 값은 0이 됩니다.

//위 코드를 아래와 같이 줄일 수 있다.

num1++; // num1 = num1 + 1;과 같습니다.
++num1; // num1 = num1 + 1;과 같습니다.

num2--; // num2 = num2 - 1;과 같습니다.
--num2; // num2 = num2 - 1;과 같습니다.

⭐️ 증감연산자의 연산 순서가 증감 연산자의 위치에 따라 달라질 수 있음
증감 연산자가 피연산자 앞에 있으면 전위형 증감 연산자, 뒤에 있으면 후위형 증감 연산자

nt num1 = 1;
int prefix = ++num1;

int num2 = 1;
int postfix = num2++;
  • 전위형 증감 연산자 : 증감 연산 먼저 수행 후 그 결과값 적용
    • num1에 전위형 증감 연산자 ++ 를 사용했으므로, num1 의 값이 1만큼 먼저 증가한 다음 그 결과값이 prefix에 할당
      ⇒ num1도 2, prefix도 2
  • 후위형 증감 연산자 : 기존의 값을 먼저 적용하고 그 다음에 증감 연산 수행
    • num2에 후위형 증감연산자 ++을 사용했으므로 num2의 값이 먼저 postfix에 할당된 다음 num2의 값이 1 증가
      ⇒ num2 는 2, postfix는 1

 

  • 복합 대입 연산자
    → 위에서 본 것처럼 1씩 증가시키거나 감소시키고자 하는 상황에서는 증감연산자 사용 가능
         하지만 2 혹은 3씩 증가시키거나 감소시키고 싶을 때는 증감 연산자 사용 불가 
num1 = num1 + 2;
num2 = num2 - 2;

//복합 대입 연산자 사용하여 간략하게 표현하기

num1 += 2;
num2 -= 2;

// num1~5의 값을 모두 10이라고 한다면,
num1 += 3; // num1 -> 13
num2 -= 3; // num2 -> 7
num3 *= 3; // num3 -> 30
num4 /= 3; // num4 -> 3
num5 %= 3; // num5 -> 1

⭐️ 모든 사직 연산자 및 나머지 연산자와 대입 연산자를 결합해서 복합 대입 연산자로 사용 가능

 

  • 비교 연산자
    → boolean 타입으로 평가될 수 있는 조건식에 사용, 대소 비교(>, <, ≤, ≥)와 연산자 등가 비교(==, ≠)로 분류
     🔎 대소 비교 연산자
    → boolean을 제외한 나머지 기본 타입에 모두 사용 가능

⭐️ 비교 연산자를 사용할 때 주의할 점은 이항 비교만 가능하다는 것! 
⭐️ “x가 1보다 크고 5보다 작다”를 표현할 때 1 < x <5 가 아니라, 1 < x && x < 5 논리연산자 사용해야함

 

🔎 등가 비교 연산자
→ 모든 타입에 사용할 수 있는 연산자, 두 항의 값이 동등한 지의 여부를 판단할 때 사용
기본 타입과 참조 타입 간에는 등가 비교 연산자를 사용할 수 없음 기본은 기본끼리, 참조는 참조끼리 가능

기본 타입은 값을 저장하고 참조 타입은 객체의 주소를 저장하기 때문에 등가 비교 연산자를 사용하여 둘을 비교하는 것은 의미가 없음

 

  • 논리 연산자 
    → AND 연산자 &&, OR 연산자 ||, NOT 연산자 ! 를 포함하며, 공통으로 boolean 타입 반환

🔎 AND연산자(&&) : 피연산자 두 개가 모두 true일 때 true를 반환하며 피연산자 두 개 중 하나라도 true가 아니면 false

🔎 OR연산자(||) : 피연산자 두 개중 하나라도 true이면 true 피연산자가 모두 false인 경우에만 false

🔎 NOT연산자( ! ) : true와 false를 반대로 바꾸는 연산자

// 아래의 비교 연산 결과는 모두 true입니다. 
!true == false 
!false == true
!!true == true

 

💡 연산자 우선순위


💡 콘솔 입출력(I/O)

  • 콘솔 출력 : 프로그래밍하면서 변수에 담긴 값을 확인해야 할 필요가 있을 떄 콘솔에 출력할 수 있음
    1. 출력하기 : System.out.println()
      ⇒ 단순히 출력만 하고 줄 바꿈을 하지 않음
System.out.print("Hello JAVA");
System.out.print("Kim" + "Coding");
System.out.print(3+6);
System.out.print(2022 + "year");

print() 출력

           2. 출력하고 줄 바꾸기 : System.out.prinln()
                ⇒ 소괄호 안의 내용을 콘솔에 출력하고 줄 바꿈, print 뒤에 붙은 ln 은 Line을 의미 

System.out.println("Hello JAVA");
System.out.println("Kim" + "Coding");
System.out.println(3+6);
System.out.println(2022 + "year");

println() 출력

           3. 형식대로 출력하기 : System.out.printf()
                 ⇒ 지시자(specifier, 형식 지정자)를 이용해 변수의 값을 여러 형식으로 출력해 주는 메서드 

지시자란? 
👉🏻 이름 그대로 값을 어떤 형식으로 출력할 것인지를 지정하기 위해 사용 
f 는 formatted의 약자 
지시자는 실제 출력되는 값이 아니며, 값을 변환해 자신의 위치에 출력해주는 기능              
System.out.printf("%s%n", "Hello JAVA!");
System.out.printf("%s%n", "Kim" + "Coding");
System.out.printf("%d%n",3+6);
System.out.printf("지금은 %s입니다.%n", 2023 + "year"); //자동 타입 변환
System.out.printf("나는 %c%s입니다.", '김', "코딩"); // 여러 개 인자 넣기

System.out.printf("나는 %d살 %s입니다.", 29, "김코딩");

printf() 출력

 

  • 콘솔 입력
import java.util.Scanner;                 // Scanner 클래스를 가져옵니다.

Scanner scanner = new Scanner(System.in); // Scanner 클래스의 인스턴스를 생성합니다.
String inputValue = scanner.nextLine();   // 입력한 내용이 inputValue에 저장됩니다.

System.out.println(inputValue);           // 입력한 문자열이 출력됩니다.
  1. import java.util.Scanner;
    → 데이터를 입력받는 기능을 작은 프로그램으로 만들어둔 것이 Scanner
    Scanner는 java.util 에 저장되어 있는데 이것을 사용하기 위해서는 소스 코드 안으로 불러와야 함
    즉, ‘java.util에 있는 Scanner를 이 소스 코드로 불러와라’
  2. Scanner scanner = new Scanner(System.in);
    → Scanner 클래스를 new 연산자를 통해 인스턴스 생성하고, 생성된 인스턴스를 변수 scanner에 할당하는 것
    📍 System.in 은 자바 표준 입력 스트림을 나타내는 객체, Scanner 클래스와 함께 사용되어 사용자로부터 입력을 받는데 사용
  3. String inputValue = scanner.nextLine();
    → nextLine() 메서드는 콘솔을 통해 문자열 데이터를 입력받는 기능 수행
    입력받은 문자열은 inputValue라는 변수에 할당되어 저장됨
💡 scanner 의 문자열을 입력받는 nextLine()뿐만 아니라, 정수형을 입력받을 수 있는 nextInt(), 실수형을 입력받을 수 있는 nextFloat() 등의 메서드도 존재! 

여러가지를 다시 보고 알아가는 건 재밌지만 역시 조건문이 나오는 순간 쉽지 않은 걸 느낀다. 뭔가 머릿속으로는 된 것 같은데 막상 키보드에 손을 올리면 코드가 제대로 나오질 않는다. 페어 분과 프로그래밍을 할 때도 한 문제를 가지고 몇 분을 끙끙거렸는지 모른다. 그만큼 힘들기도 하지만 문제를 맞추거나 어떻게든 풀고 나면 보람을 느낀다. 아마 이 기분 때문에 계속 하고 싶어지는 거겠지. 오늘도 한 단계 더 성장한 기분을 느낀다.  조건문에 대해서는 다른 카테고리에 기록할 예정! 

'SEB_BE_45 > 공부 정리' 카테고리의 다른 글

07. Java 기초 4 / 20230420  (0) 2023.04.20
06. Java 기초 3 / 20230419  (0) 2023.04.20
04. Java 기초 1 / 20230417  (1) 2023.04.17
03 Git 기초/20230414  (0) 2023.04.14
02 Linux 기초 / 20230413  (0) 2023.04.14

BELATED ARTICLES

more