1주차에서는 래퍼 클래스와 참조형 변수부분이 잘 이해가 되지 않는다!
5주차까지 달리고 복습을 여러번 하는게 나을 것 같다.
1. 연산자
연산자의 종류
산술 연산자나 비교연산자는 굳이 정리하지 않아도, 기본적인 연산자 개념이라 정리하지 않겠다
논리연산자
- 논리연산자는 비교 연산의 결괏값으로 받을 수 있는 boolean 값을 연결하는 연산자다.
- 조건을 연결했을때 true/false 값인 boolean 값을 출력한다.
- && ( AND) : 피연산자 모두 참
- || ( OR ) : 피연산자 둘 중 하나라도 참
- ! (반대 ) : 피연산자의 반대 boolean 값
대입연산자
- 변수를 바로 연산해서 그 자리에서 저장하는 연산자
- 기본 대입 연산자 =
- 복합 대입 연산자 +=, -=, *= ...
- 증감/감소 연산자
- 전위형 : ++{피연산자}, --{피연산자}
- 연산 전에 피연산자에 1을 더해준다.
- 후위형 : {피연산자}++, {피연산자}--
- 연산 후에 피연산자에 1 빼준다.
- 전위형 : ++{피연산자}, --{피연산자}
삼항 연산자
- 비교 연산의 결과값에 따라 응답할 값을 직접 지정할 수 있는 연산자
- 3가지 피연산자가 존재 ( 조건 / 참결과 / 거짓결과 )
- 기본 구조 : (조건) ? (참 결과) : (거짓 결과)
예시를 들어보자
명확한 참과 거짓의 값과 조건이 있으면 삼항연산자가 더 깔끔하고 좋은 것 같다.
연산자 우선 순위
연산자가 여러개가 있을 때, 우선 순위이다. 괄호가 있다면 괄호 안의 연산이 최우선 순위로 계산된다.
산술 > 비교 > 논리 > 대입
산술 변환
연산 전에 피연산자의 타입을 일치시키는 것
( 저장 공간 크기가 더 큰 타입으로 일치 )
예를 2가지를 들어보자
- 피연산자의 타입이 long보다 작은 int, short 타입이면 long으로 변환
- 피연산자의 타입이 float보다 작은 long, int, short, 타입이면 float으로 변환
비트 연산
- Bit의 자릿수를 옮기는 것
- Byte를 8등분 한 게 Bit
- Bit는 0,1 둘 중의 하나의 값만을 저장하는 컴퓨터가 저장(표현) 가능한 가장 작은 단위
- 연산중에서 Bit 연산이 제일 빠름
- <<(왼쪽으로 자릿수옮기기), >>(오른쪽으로 자릿수옮기기)
3의 이진수값은 11(2) 입니다. 12의 이진수값은 1100(2)
(2) 표기는 이 숫자가 이진수값이라는 표식
System.out.println(3 << 2);
3의 이진수값인 11(2) 에서 왼쪽으로 2번 옮겨져서 1100(2) 인 12값이 된다.
System.out.println(3 >> 1);
3의 이진수값인 11(2) 에서 오른쪽으로 1번 옮겨져서 1(2) 인 1 값이 된다.
비트 연산은 아직 이해를 못하고있다 .. bit와 byte에 대한 내용을 적응해야 이해할 듯 하다!
조건문
조건문은 문법만 알면 이해하기는 쉬워, 문법 정리 + 예시 위주로 정리했다.
if문
if (조건식) {
// 조건식이 참(true)일 때
}
if-else문
if (조건식) {
// 조건식이 참(true)일 때
} else {
// 조건식이 거짓(false)일 때
}
if-else if문
if(조건식1) {
// 조건식1의 연산결과가 참일 때
} else if (조건식2) {
// 조건식2의 연산결과가 참일 때
} else if (조건식3) {
// 여러 개의 else if를 사용할 수 있다.
// 조건식3의 연산결과가 참일 때
} else {
// 거짓일 때
}
중첩 if문
if (조건식1) {
// 조건식1의 연산결과가 true일 때
if(조건식2) {
// 조건식1과 조건식2가 모두 true일때
} else {
// 조건식1이 true이고, 조건식2가 false일 때
}
} else {
// 조건식1이 false일 때
여기서 기본 if문과 if else, if - else if문은 문법을 거의 외운 느낌으로 알고있어서(문법 형식만) 중첩 if문 위주로 예시를 들어보겠다!
중첩 if문 활용하여 가위바위보 승자를 알려주는 프로그램
- 입력 : A유저와 B유저가 낸 가위바위보를 입력해야하므로 2개가 있어야한다,
- 출력 : A, B 유저 중에 누가 이겼는지
- 값을 비교하는 Obects.equals() 메서드 사용

조건은 A를 기준으로 잡았다.
A가 입력값을 넣었을 때 가위/바위/보 3가지라서 조건은 3가지로 잡았다.
또한 A가 가위를 입력했을 때, B가 할 수있는 조건의 수는 4가지였다
가위/바위/보 중 하나를 입력하거나, 엉뚱한 값을 입력하거나!
그래서 A가 가위를 입력했을 때라는 조건은 고정이고 B의 조건만 바꿔주었다.
그렇게 하나의 중첩 if문(가위를 입력했을 때의 결괏값)이 완성되었고, 바위랑 보를 입력했을 때도 사실 가위랑 별 다른게 없어서 값만 비교하여 누가 이기고 졌는지를 넣어주었다.
switch문
switch문은 처리해야 하는 경우의 수가 많을 때 유용한 조건문이다.
경우의 수가 많은 경우 if-else if문을 사용해도 되지만, 가독성 좋은 switch문이 유리하다.
기본 형식을 알아보자.
switch( 변수 ){
case 1:
실행문1;
break;
case 2:
실행문2;
break;
default:
}
- switch(피연산자) { case(조건): (연산) }
- case(조건): (연산) 은 여러 개를 설정 가능
- case의 연산문 마지막에는 break;를 꼭 넣어야 함
- break; 문은 해당 case의 연산문이 끝났다는 것 -> switch 문 종료
- switch문 중괄호 안 제일 마지막에 default: (연산) 을 명시해 주어 case 조건들이 모두 만족하지 않을 때 수행할 연산을 정해야함
- default: (연산) 은 아무것도 만족하지 않을 때 수행하는 것, 만약 없다면 생략가능
그렇다면 switch문은 어떤 순서로 흘러갈까?
예시 이미지를 보고 순서대로 정리해봤다!
- 조건식을 계산한다.
- month의 값을 가져온다
- 조건식의 결과와 일치하는 case문으로 이동한다.
- month는 8이므로 case 8:로 이동한다.
- break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.
- 이후의 문장들을 수행한다.
- monthString 값을 출력한다.
if문과 switch문 차이점
1. 복합 조건
- if문은 복합 조건을 지원함(괄호 안에 조건 여러 개 지정)
- switch 문은 피연산자 한 개에 대한 조건만 지원
2. 코드 중복
- if 문은 상대적으로 코드 중복이 많음
- switch 문은 코드 중복이 적음(가독성이 좋다)
반복문
내가 제일 못하는 반복문이다.. 반복문의 흐름을 이해는 하는데 응용이 잘 되지않는다
문제 자체를 이해 못하는 문해력 이슈도 있지만, 반복문 자체가 너무 복잡해서 항상 주석으로 하나하나 적으면서 공부하고있다. 코드트리도 지금 반복문에서 한달넘게 멈춰있다 .. 기초문제인데도 항상 반복문에서 막힌다. ㅜㅠ ..
for
for(초기화; 조건식; 증감식){
// 조건식이 참일 때 수행될 문장들을 적는다.
}
- 초기화 : 반복문에 사용될 변수를 초기화 하는 부분, 처음에 한번만 수행
- 조건식 : 조건식의 값이 참(true)이면, 반복을 계속하고, 거짓(false)이면 반복을 중단하고 for문을 벗어난다.
- 증감식 : 반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식
- for문의 조건식은 생략 가능 - (; ;)
- 조건식이 항상 참일때는 True를 넣어도 됨
for문을 가장 많이 연습한 방법은 구구단인 것 같다! 구구단이랑 *입력하는 걸로 연습을 했었는데, 이번에도 구구단 for문을 한번 해보았다
구구단 생성기
- 입력 : 1~9까지의 '단'과 1~9까지 '값'
- 출력 : 2 x 9 = 18 << 이런 식으로
- 중첩 for문 사용 = 2개의 값을 입력해서 반복해야하니까

int i 는 1에서 9단까지 반복하는데, int i가 1일때 j 반복문이 실행된다.
그렇다면 어떤식으로 흐름을 잡아야할까?
int i가 1이면, int j가 1부터 9까지 반복하며 출력값을 나타내고, 다시 int i로 돌아가 1증감된 2로 실행된다
이런식으로 반복해서 돌고돌아 i x j = i*j의 값이 출력되는것 :)
향상된 for문
for (변수타입 변수명 : 배열 또는 컬렉션) {
// 반복할 문장
}
- 연속된 변수 목록을 출력할 때 쓰임
- 예시를 들어보자
int[] numbers라는 변수에 2,3,6,8,10의 값이 저장되어 있다.
int number: numbers << 이 부분이 뭔지 찾아보니 간단하게 생각해서 int number : 2,3,6,8,10이라고 생각하면 된다고 한다.
for는 반복문이니까 int number에 값 하나씩 돌아간다 생각하면 될 것같다.
그러므로 2,3,6,8,10 순서대로 나오는 것 같다.
while
for문이랑 동일하게 특정 조건에 따라 연산을 반복해서 수행하고 싶을 때 사용하면된다.
초기값 없이 조건문만 명시하여 반복이 가능하다.
while (조건식) {
// 조건식의 연산결과가 참(true)인 동안, 반복될 문장들을 적는다.
}
- while문의 조건식은 생략불가
- 조건문을 만족해야 연산이 반복 수행
- 반복할 대마다 조건문 체크, 조건문 불만족시 반복 중단
do - while
do {
// 조건식의 연산결과가 참일 때 수행될 문장들을 적는다.
} while (조건식); // 끝에 ';'을 잊지 않도록 주의
- 최초 1회 연산 수행 후 조건문 체크하여 반복할지 결정
이렇게만 봤을 때는 후에 다시 공부할려고 정리된 내용을 봤을 때, while문이랑 do-while문의 차이점을 모를 것 같다.
두가지의 예시를 들어보자!
조건은 number의 값이 3보다 작을 때 반복한다.
int number는 0으로 초기화가 되었으니, 3보다 작다
조건식이 성립하니 반복될 문장을 보면, number의 값을 1씩 증가시켜주고 number + "출력"을 합쳐서 출력한다.
그럼 출력값은 1출력 2출력 3출력이 나올 것이다.
여기서 왜 0출력이 나오지 않냐라고 생각한다면, number의 값이 0이라 조건식이 참으로 반복이 진행되는데
number++ 증감식이 바로 나왔기 때문에 number의 값이 1 증가한 후 출력이 되기 때문이다!!
int number의 값은 4로 while 조건에 해당하지는 않는다. 하지만 do 구조에서 한번 출력이 된 이후 조건문으로 넘어가기 때문에 출력값은 4출력이 나온다!
조건문에 해당하더라도 출력값이 없어서? 어 ? 오류가 뜰려나? 생각했는데, 따로 찾아보니 출력은 사용자에게 정보를 전달하기 위한 수단일 뿐 반드시 출력을 해야하는 것은 아니다 라고 적혀있었다 :)
결과를 보면 do - while문은 조건이 성립하지 않더라도 출력값은 있는 구조!
break / continue 문
- break : 명령을 호출하면 가장 가까운 블럭의 for 문 또는 while 문을 중단 (또는 switch)
- 반복문 안에서 break; 형태로 사용
- continue : for 문 또는 while 문에서 해당 순서를 패스하고 싶을 때 사용
- 반복문 안에서 continue; 형태로 사용
'❤️ JAVA > Basic' 카테고리의 다른 글
[JAVA] 객체 지향 프로그래밍(OOP)과 클래스 (2) | 2024.10.15 |
---|---|
[JAVA] JAVA 2주차(컬렉션) (0) | 2024.10.10 |
[JAVA] JAVA 2주차(배열) (0) | 2024.10.10 |
[JAVA] JAVA 1주차 (0) | 2024.10.08 |
[JAVA] JVM이란? (0) | 2024.10.08 |