05. Java 기초 2 / 20230418
🧑🏻💻 연산자, 콘솔 입출력, 제어문-조건문
💡 연산자(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
- num1에 전위형 증감 연산자 ++ 를 사용했으므로, num1 의 값이 1만큼 먼저 증가한 다음 그 결과값이 prefix에 할당
- 후위형 증감 연산자 : 기존의 값을 먼저 적용하고 그 다음에 증감 연산 수행
- num2에 후위형 증감연산자 ++을 사용했으므로 num2의 값이 먼저 postfix에 할당된 다음 num2의 값이 1 증가
⇒ num2 는 2, postfix는 1
- num2에 후위형 증감연산자 ++을 사용했으므로 num2의 값이 먼저 postfix에 할당된 다음 num2의 값이 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)
- 콘솔 출력 : 프로그래밍하면서 변수에 담긴 값을 확인해야 할 필요가 있을 떄 콘솔에 출력할 수 있음
- 출력하기 : System.out.println()
⇒ 단순히 출력만 하고 줄 바꿈을 하지 않음
- 출력하기 : System.out.println()
System.out.print("Hello JAVA");
System.out.print("Kim" + "Coding");
System.out.print(3+6);
System.out.print(2022 + "year");
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");
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, "김코딩");
- 콘솔 입력
import java.util.Scanner; // Scanner 클래스를 가져옵니다.
Scanner scanner = new Scanner(System.in); // Scanner 클래스의 인스턴스를 생성합니다.
String inputValue = scanner.nextLine(); // 입력한 내용이 inputValue에 저장됩니다.
System.out.println(inputValue); // 입력한 문자열이 출력됩니다.
- import java.util.Scanner;
→ 데이터를 입력받는 기능을 작은 프로그램으로 만들어둔 것이 Scanner
Scanner는 java.util 에 저장되어 있는데 이것을 사용하기 위해서는 소스 코드 안으로 불러와야 함
즉, ‘java.util에 있는 Scanner를 이 소스 코드로 불러와라’ - Scanner scanner = new Scanner(System.in);
→ Scanner 클래스를 new 연산자를 통해 인스턴스 생성하고, 생성된 인스턴스를 변수 scanner에 할당하는 것
📍 System.in 은 자바 표준 입력 스트림을 나타내는 객체, Scanner 클래스와 함께 사용되어 사용자로부터 입력을 받는데 사용 - 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 |