오늘의 공부내용은!!!
Java ( 연산자, 조건문과 반복문(if,switch/case,for 문) )
연산자는 일단 피연산자 수에따라 단항, 이항, 삼항 연산자로 구분!
연산의 방향
우리가 주로 계산을 할 때, 덧셈 뺄셈 연산자 보다 곱셈 나눗셈 연산자를 먼저 계산 하듯이 자바의 연산자 또한 동일하다!
a + b * c
하지만!
단항연산자, 부호연산자, 대입연산자의 경우 오른쪽에서 왼쪽으로 연산된다.
a = b = c = 5;
c=5, b=c, a=b 순으로 실행된다. 오 > 왼 순으로!
연산의 우선순위
| 1. 단항, 이항, 삼항 연산자 순으로 우선순위를 가진다. 2. 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 가진다. 3. 단항과 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽(->)이다. 4. 복잡한 연산식에는 괄호()를 사용해서 우선순위를 정해준다. |

Quiz. 다음 코드를 실행 했을 때 처리되는 result 연산식의 순서는 어떻게 될까요?
int var1 = 1;
int var2 = 3;
int var3 = 2;
int result = var1 + var2 * var3;
> 이 경우, 우선순위에 의해 * → + → = 순으로 계산하면? 7의 결과값이 나올 것이다!
단항연산자
부호 연산자 ( +,- )
int i1 = +100;
int i2 = -100;
double d1 = +3.14;
double d2 = -10.5;
부호 연산자는 양수나 음수를 표시하는 +, - 존재한다.
( 변수값의 부호를 유지하거나 바꾸기 위해 사용하기도 한다! )
증감 연산자 ( ++,- - )
-변수 값을 1증가(++) 하거나 감소( - - ) 시키는 연산자
* boolean 타입 제외한 모든 기본타입의 피연산자에 사용가능 *
public static void main(String[] args) {
int x = 10;
int y = 10;
int z;
System.out.println("----------------------");
x++; //11
++x; //12
System.out.println("x=" + x); //12
System.out.println("----------------------");
y--; //9
--y; //8
System.out.println("y=" + y); //8
System.out.println("----------------------");
z = x++; //12
System.out.println("z=" + z); //12
System.out.println("x=" + x); //13
System.out.println("----------------------");
z = ++x; //14
System.out.println("z=" + z); //14
System.out.println("x=" + x); //14
System.out.println("----------------------");
z = ++x + y++; //23
System.out.println("z=" + z); //23
System.out.println("x=" + x); //15
System.out.println("y=" + y); //9
}
x++ 이니 아직 증가 전인 10 > ++x 는 1 증가한 다음 업데이트된 값이 사용 작업 후 12 결과값은 12
이렇게 x ++ 처럼 후위형으로 올 경우, 현재 값이 사용된 다음 1 씩 증가한다.
논리 연산자 ( ! )
- true 를 false 로! false를 true로 변경!
그럼 당연히 true false 값이 존재해야하므로 boolean 타입에만 사용가능!
public static void main(String[] args) {
boolean play = true;
System.out.println(play); //true
play = !play;
System.out.println(play); //false
play = !play;
System.out.println(play); //true
}
처음은 true > ! 을 사용하여 false > ! 을 사용하여 다시 true로 변경된다.
이항연산자
- 피연산자가 두개인 연산자
산술 연산자 ( +, -, *, /, % )
int a = 10;
int b = 3;
System.out.println(a + b); // 13
System.out.println(a - b); // 7
System.out.println(a * b); // 30
System.out.println(a / b); // 3
System.out.println(a % b); // 1
우리가 항상 사용하는 산술 연산자 ㅎㅎㅎ + % 은 나머지 연산자! 10 나누기 3은 나머지가 1이므로 1 !!
만약, 피연산자들의 타입이 동일하지 않다면?
타입 변환!!!!
이항 연산자 특징 : 표현범위가 큰 타입 변환 / 정수 + 실수의 경우 실수가 이김!!
public static void main(String[] args) {
float a = 45f;
int b =123;
float sum = a+b;
System.out.println(sum);
}
이렇게 float 와 int 타입이 다를 경우,
저장 공간이 큰 float을 따라 float로 변환됩니다.
또한 long + float일경우, 정수 + 실수는 실수를 따라 float로 변환되고
float + double 인 실수 + 실수 일경우 저장공간이 높은 double 을 따라 변환됩니다!
이리하여 이항연산자의 특징은?

이항연산자의 특징은
| 이항 연산자 특징 1. 피연산자의 타입을 일치시킴 2. 표현범위가 큰 타입 변환 ( 큰 저장공간을 따라감 ) |
오버플로우
int a = 1000000;
int b = 1000000;
int c = a * b;
System.out.println(c); // -727379968
이렇게 실행 결과, -727379968 이라는 이상한 값이 나왔는데, 이것은
int 의 저장공간범위를 초과해서 쓰레기값이 나왔다.!
그럼 int타입을 long 타입으로 수정하면 해결 가능하다.
NaN, Infinity
double a = 10;
double b = 0;
System.out.println(a / b); // Infinity
System.out.println(a % b); // NaN
0으로 나누었을 경우, 당연히 결과값은 무한대로 나올 것이다.
NaN은 Not a Number을 의미하고 Infinity는 무한대임을 의미한다.
* NaN, Infinity 결과가 나올 시, 다음연산을 수행해서는 안되므로,
isInfinite, isNaN 로 확인하자!
비교 연산자 (<, <=, >, >=, ==, !=)
- 피연산자들을 비교하여 boolean 타입인 true 와 false를 산출한다.
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
논리 연산자 & 비트 연산자 ( &, |, ^ )
- 데이터를 비트 단위로 연산할 때 사용
public static void main(String[] args) {
i는 2의 배수 또는 3의 배수
int i =13;
boolean result = (i % 2 == 0 ) || ( i % 3 == 0)
i는 78보다 작거나 45보다 크다
int i = 13;
boolean result = ( i < 78 ) & ( i > 45)
}
AND(&) 는 모두 true 일 경우에만 결과가 true
OR ( | ) 하나만 true 이면 결과는 true
흠......
논리 연산자 && || 과 비트연산자의 차이점을 아직 이해를 많이 못한듯하다..
내친구 GPT한테 물어봐야겠당 ㅋㅋㅋㅎㅎ
삼항연산자
- 세 개의 피연산자가 있는 연산자

조건식 ? 뒤는 true 일때 : 뒤는 false 일때! 이것을 조건 연산식이라고 한다!
public static void main(String[] args) {
int score = 95;
char grade = (score > 90) ? 'A' : 'B';
System.out.println("당신의 학점은 : " + grade);
//if 조건절
if(score > 90){
grade = "A";
}else {
grade ="B";
}
System.out.println("당신의 학점은 : " + grade);
}
스코어가 90점 이상일때 ? A 아닐경우 B
결과는 당신의 학점은 A 라고 나올 것이다.
이것을 if문으로 사용하면, 위와 같이 코드 작성이 가능하다!
길어지면 if 가 더 가독성이 좋을 거같다!
강사님께서 내주신 간단 퀴즈! ㅋㅋㅋㅎㅎ
삼항연산자 퀴즈 80점 이상일 때 A 70이상~ 80점 미만 일 때, B 70점 미만 C
public static void main(String[] args) {
int score = 60;
char result = (score >= 80) ? 'A' : ((score >= 70) ? 'B' : 'c');
System.out.println("당신의 학점은 : " + grade);
}
이렇게 작성하였는데, 확실히 범위가 많아지면
if 문을 활용하는게 가독성이 좋을 거같다는생각이 들어요! 저렇게 보면
뭐가 뭔지 지금은 한줄이지만 길어지면 헷갈리겠어요 ㅠ ㅋㅋ!!!!
if문

만약 돈이 있다면? true 일때 택시를 타고 false 일때 걸어간다!
이렇게 조건에 따른 선택을 하는것이 if문!
public static void main(String[] args) {
int score = 93;
if (score >= 90) {
System.out.println("등급은 A입니다");
} else if (score >= 80 && score < 90) {
System.out.println("등급은 B입니다");
} else if (score >= 70 && score < 80) {
System.out.println("등급은 C입니다");
} else {
System.out.println("등급은 D입니다");
}
}
스코어는 93이고, 만약 90이상 이라면 A , else if 만약 80점이상이라면 B, 70점 이상이라면 C, 나머지 D
이렇게 작성하지요! 이건 자바 스크립트랑 동일하네요 ㅎㅎㅎ
switch/case문
- if문처럼 블록 내부 실행이아니라 어떤 값을 갖느냐에 따라 실행문 선택
public static void main(String[] args) {
int month = 3;
String monthString;
switch (month) {
case 1:
monthString = "January";
break;
case 2:
monthString = "February";
break;
case 3:
monthString = "March";
break;
case 4:
monthString = "April";
break;
case 5:
monthString = "May";
break;
case 6:
monthString = "June";
break;
case 7:
monthString = "July";
break;
case 8:
monthString = "August";
break;
case 9:
monthString = "September";
break;
case 10:
monthString = "October";
break;
case 11:
monthString = "November";
break;
case 12:
monthString = "December";
break;
default:
monthString = "Invalid month"; // 유효하지 않은 범위의 값을 입력받았을 때 예외처리
break;
}
System.out.println(monthString);
}
이렇게 3월을 입력했을 때, case 3으로 가 March를 출력합니다!
그럼 여기서 break를 제외 하면?
멈추지않고 case 4로가 April을 출력하게 됩니다!
배열
< 초기화 >
String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
자료형의 집합을 배열이라고 한다.
public static void main(String[] args) {
System.out.println(args.length); //길이 즉 args 에 몇개가 들어있는지 !
length은 길이 즉 args에 몇개가 들어있는지를 의미합니다!

String[] weeks2 = new String[3]; // 선언과 동시에 사이즈 결정, 초기값 없이 배열변수를 만들 시 길이 지정
초기값 없이 배열변수를 만들 시, 길이를 반드시 지정하여야 한다.
public static void main(String[] args) {
String[] weeks = {"월", "화", "수", "목", "금", "토", "일"}; //배열형태에서 add 복잡 - 복제해야함
// 값을 바로 할당하는 초기화 방법
System.out.println(weeks[2]); //수 -인덱스를 이용하여 값으로 접근
String[] weeks2 = new String[3]; // 선언과 동시에 사이즈 결정, 초기값 없이 배열변수를 만들 시 길이 지정
weeks2[0] = "월요일";
weeks2[1] = "화요일";
weeks2[2] = "수요일";
}
인덱스를 이용하여 배열의 값을 출력합니다.
2를 입력하게 되면 수요일이 출력되는식!!!
public static void main(String[] args) {
String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
System.out.println(weeks.length);
// System.out.println(weeks[7]); //배열의 전체 범위를 벗어났을 때, ArrayIndexOutOfBoundsException 발생
for(int i = 0; i < weeks.length; i++){
System.out.print(weeks[i]); // print println 띄워짐차이
}
}
만약 아래와 같이 배열의 전체범위를 넘어갔을 시, ArrayIndexOutOfBoundsException 발생한다.
System.out.println(weeks[7]); //배열의 전체 범위를 벗어났을 때, ArrayIndexOutOfBoundsException 발생
for(int i = 0; i < weeks.length; i++){
System.out.print(weeks[i]); // print println 띄워짐차이
for문에 배열을 사용할 때는 배열의 길이를 알아야하기때문에 length을 사용하여 길이 구하기!
오늘도 이렇게 자바에 대해서 공부했습니다!!!
오늘은 저번주 오토박싱보다는 재밌었던거같아요! ㅋㅋㅋㅎㅎ
나름 배울수록 재밌더라구요 ㅋㅋ 초반이라그렇겠죠? ㅎㅎ
오늘도 열심히 공부했구!
내일도 파이팅!!!!!!!!!!!!!!

'[4기] 백엔드 개발자 부트캠프 "오르미" ~ing > [4기] 백엔드 개발자 부트캠프 오르미 수업 복습' 카테고리의 다른 글
| [4기] 30일차 Java ( class의 구성 : 필드, 생성자, 메소드 ) (0) | 2024.01.31 |
|---|---|
| [4기] 29일차 Java ( 반복문(for, while 문),class란? ) (4) | 2024.01.30 |
| [4기] 25일차 Java ( 변수, 타입 및 변환, 자료형, 오토박싱) (2) | 2024.01.26 |
| [4기] 24일차 Java ( Java란? , 객체지향? ) (4) | 2024.01.25 |
| [4기] 22일차 FE프로젝트 -호두 홈페이지 만들기5 -최종! (2) | 2024.01.23 |