728x90
SMALL
'자바의 정석 3rd Edition'을 공부하며 정리한 내용입니다.
제어문
- 프로그램의 흐름(flow)을 바꾸는 역할을 하는 문장들
- 조건문과 반복문이 있음
- 조건문: 조건에 따라 다른 문장이 수행
- 반복문: 특정 문장들을 반복해서 수행
1. 조건문 - if, switch
- 조건식과 문장을 포함하는 블럭{}으로 구성
- 조건식의 연산결과에 따라 실행할 문장이 달라져 프로그램의 실행흐름을 변경할 수 있음
- if문과 switch문이 있으며 if문이 많이 사용됨
- 처리할 경우의 수가 많을 때는 switch문이 효율적이지만 if문보다 제약이 많음
1.1 if문
- 조건식이 true이면 괄호{} 안의 문장들을 수행하고 false일 경우 수행하지 않음
if (조건식) { // 조건식이 true일 때 수행될 문장들 }
조건식
- 등가비교 연산자 '==' 대신 대입 연산자 '='를 사용하지 않도록 조심
- 조건식의 결과는 반드시 true 또는 false이어야 함. 그렇지 않을 경우 에러 발생
if (x=0) {...} // x에 0이 저장되고, 결과는 0이 됨 if (0) {...} // 에러 발생
블럭{}
블럭(block): 괄호{}를 이요해 여러 문장을 하나의 단위로 묶은 것
'}' 다음에 ';'를 붙이지 않음
블럭 내 문장들은 탭으로 들여쓰기(indentation)를 해서 블럭 안에 속한 문장이라는 것을 알기 쉽게 해주는 것이 좋음
블럭 내의 문장이 하나뿐일 경우 괄호를 생략할 수 있으나 써주는 것이 좋음
if (score > 60) System.out.println("합격"); or if (score > 60) System.out.println("합격");
괄호를 생략한 경우 새로운 문장이 추가되면 괄호로 문장을 감싸주어야 함
if (score > 60) System.out.println("합격"); // if문에 속한 문장 System.out.println("축하드립니다"); // if문에 속하지 않은 문장 if (score > 60) { System.out.println("합격"); // if문에 속한 문장 System.out.println("축하드립니다"); // if문에 속한 문장 }
1.2 if-else문
- else는 조건식의 결과가 false일 때 수행
if (조건식) {
// 조건식이 true일 때 수행될 문장들
} else {
// 조건식이 false일 때 수행될 문장들
}
- 조건식에 따라 두 개의 블럭 중 어느 한 블럭의 내용이 수행되고 전체 if문을 벗어남
- 두 블럭의 내용이 모두 수행되거나 모두 수행되지 않는 경우는 없음
1.3 if-else if문
- 여러 개의 조건식을 쓸 수 있음
if (조건식1) {
// 조건식1이 true일 때 수행될 문장들
} else if (조건식2){
// 조건식2이 true일 때 수행될 문장들
} else if (조건식3){
// 조건식3이 true일 때 수행될 문장들
}
else { // 마지막에는 보통 else 블럭으로 끝나며, 생략 가능
// 위의 어느 조건식도 만족하지 않을 때 수행될 문장들을 적음
}
else 블럭이 생략되었을 경우 if-else문은 어떤 블럭도 수행되지 않을 수 있음
if-else if문 수행 과정
- 결과가 참인 조건식을 만날 때까지 첫 번째 조건식부터 순서대로 평가
- 참인 조건식을 만나면, 해당 블럭의 문장들을 수행
- if-else if문 전체를 빠져나옴
if-else if문은 여러 개의 if문을 합쳐놓은 것이지만 조건식을 바꾸지 않고 여러 개의 if문으로 쪼개놓으면 전혀 다른 코드가 됨
# 1. if (score >= 90){ ... } else if (score >= 80){ ... } # 2. if (score >= 90){ ... } if (score >= 80){ ... } # 3. if (score >= 90){ ... } if (score < 90 && score >= 80){ ... }
1번과 3번은 같은 의미의 코드이지만 1번과 2번은 전혀 다른 의미의 코드
1.4 중첩 if문
- if문의 블럭 내에 또 다른 if문을 포함시키는 것. 횟수 제한 없음
if (조건식1) { // 조건식1이 true일 때 수행될 문장들 if (조건식2) { // 조건식1과 조건식2가 모두 true일 때 수행될 문장들 } else { // 조건식1이 true이고 조건식2가 false일 때 수행될 문장들 } } else { // 조건식1이 false일 때 수행될 문장들 }
1.5 switch문
하나의 조건식으로 많은 경우의 수를 처리할 수 있고 표현이 간결
switch (조건식) { case 값1 : // 조건식의 결과가 값1과 같을 경우 수행될 문장들 break; case 값2 : // 조건식의 결과가 값2와 같을 경우 수행될 문장들 break; // ... default: // 조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들 }
switch문 수행 과정
- 조건식을 계산
- 조건식의 결과와 일치하는 case문으로 이동
- 이후의 문장들을 수행
- break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나감
- 조건식의 결과와 일치하는 case문이 하나도 없는 경우 default문으로 이동
break문
- 각 case문의 영역을 구분하는 역할
- 생략할 경우 case문 사이의 구분이 없어져 다른 break문을 만나거나 switch문 블럭의 끝을 만날 때까지 나오는 모든 문장들을 수행
switch문의 제약조건
- switch문의 조건식 결과는 정수 또는 문자열이어야 함
- case문의 값은 정수 상수만 가능하며, 중복되지 않아야 함
switch문의 중첩
- switch문도 중첩이 가능
- break문을 빼먹지 않도록 주의
2. 반복문 - for, while, do-while
반복문
- 어떤 작업이 반복적으로 수행되도록 할 때 사용
- for, while, do-while문이 있음
- for문, while문에 속한 문장은 조건에 따라 한 번도 수행되지 않을 수 있지만 do-while문에 속한 문장은 무조건 최소한 한 번은 수행될 것이 보장됨
- 주어진 조건을 만족하는 동안 주어진 문장들을 반복적으로 수행하므로 조건식을 포함
- for문과 while문은 구조와 기능이 유사해 서로 변환이 가능하므로 반복문을 작성해야할 때 어느 쪽을 선택해도 좋음
- 주로 for문은 반복 횟수를 알고 있을 때 사용
2.1 for문
- 반복 횟수를 알고 있을 때 적합
- 중첩 for문: for문 안에 또 다른 for문을 포함시키는 것도 가능 (횟수 제한 없음)
1. 구조와 실행 순서
for (초기화;조건식;증감식) {
// 조건식이 참일 때 수행될 문장들
}
- 초기화 수행
- 조건식이 참인 동안 '조건식 -> 수행될 문장 -> 증감식'의 순서로 계속 반복
- 조건식이 거짓이 되면 for문 전체를 빠져나감
2. 초기화, 조건식, 증감식
- 초기화: 반복문에 사용될 변수를 초기화하는 부분
- 처음에 한번만 수행
- 둘 이상의 변수가 필요할 때 ','를 구분자로 변수를 초기화 (두 변수의 타입은 같아야 함)
- 조건식
- 조건식 값이 참이면 바복을 계속하고, 거짓이면 반복을 중단하고 for문을 벗어남
- 조건식을 잘못 작성하면 블럭 내의 문장이 한 번도 수행되지 않거나 무한반복에 빠지기 쉬움
- 증감식: 반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식
- 매 반복마다 변수의 값이 증감식에 의해 점진적으로 변하다 조건식이 거짓이 되어 for문을 벗어남
- 증감식도 ','를 이용해 두 문장 이상을 하나로 연결해서 쓸 수 있음
- 세 가지 요소는 필요하지 않으면 생략할 수 있으며 모두 생략도 가능
for(;;) {...}
- 조건식이 생략된 경우 참으로 간주되어 무한 반복문이 됨
- 블럭 안에 if문을 넣어 특정 조건을 만족하면 for문을 빠져 나오게 해야 함
3. 향상된 for문(enhanced for statement)
- JDK 1.5부터 배열과 컬렉션에 저장된 요소에 접근할 때 기존보다 편리한 방법으로 처리할 수 있도록 for문의 새로운 문법이 추가됨
for (타입 변수명 : 배열 또는 컬렉션) { // 반복할 문장 }
- 타입은 배열 또는 컬렉션의 요소의 타입이어야 함
- 배열 또는 컬렉션에 저장된 값이 매 반복마다 하나씩 순서대로 읽혀서 변수에 저장됨
- 반복문의 괄호{} 내에서는 이 변수를 사용해서 코드를 작성
- ex) 배열의 모든 요소를 출력하는 for문
int [] arr = [10, 20, 30, 40, 50]; for (int tmp : arr) { System.out.println(tmp); }
- 향상된 for문은 일반적인 for문과 달리 배열이나 컬렉션에 저장된 요소들을 읽어오는 용도로만 사용 가능
2.2 while문
- 조건식이 참인 동안, 즉 조건식이 거짓이 될 때까지 블럭 내의 문장을 반복
while (조건식) { // 조건식의 연산 결과가 참인 동안 반복될 문장들 }
- while문 실행 과정
- 조건식이 참이면 블럭안으로 들어가고, 거짓이면 while문을 벗어남
- 블럭의 문장을 수행하고 다시 조건식으로 돌아감
- 초기화나 증감식이 필요하지 않은 경우 while문이 더 적합
while문의 조건식은 생략 불가
- for문과 달리 while문의 조건식은 생략 불가
while () {...} // 에러 발생
- while문의 조건식이 항상 참이 되도록 하려면 반드시 true를 넣어야 함 => 무한 반복문
while(true) {...}
- 무한 반복문은 반드시 즐럭 안에 조건문을 넣어서 특정 조건을 만족하면 무한 반복문을 벗어나도록 해야 함
2.3 do-while문
do {
// 조건식의 연산결과가 참일 때 수행될 문장들
} while (조건식);
- 기본적인 구조는 while문과 같으나 조건식과 블럭의 순서를 바꿔놓은 것
- while문과 반대로 블럭을 먼저 수행한 후에 조건식을 평가
- while문은 조건식의 결과에 따라 블럭이 한 번도 수행되지 않을 수 이ㅉ시만, do-while문은 최소한 한번은 수행될 것을 보장
- 반복적으로 사용자의 입력을 받아서 처리할 때 유용
2.4 break문
- 자신이 포함된 가장 가까운 반복문을 벗어남
- 주로 if문과 함께 사용되어 특정 조건을 만족하면 반복문을 벗어나도록 함
- 무한 반복문에는 조건문과 break문이 항상 같이 사용. 그렇지 않으면 무한히 반복되기 때문에 프로그램이 종료되지 않음
2.5 continue문
- 반복문 내에서만 사용될 수 있으며, 반복이 진행되는 도중에 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어감
- for문의 경우 증감식으로 이동
- while, do-while문의 경우 조건식으로 이동
- 반복문 전체를 벗어나지 않고 다음 반복을 계속 수행한다는 점이 break문과의 차이점
- if문과 함께 사용되어 특정 조건을 만족하는 경우에 continue문 이후의 문장들을 수행하지 않고 다음 반복으로 넘어가서 계속 진행하도록 함
- 전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용
2.6 이름 붙은 반복문
- break문은 근접한 단 하나의 반복문만 벗어날 수 있기 때문에, 여러 개의 반복문이 중첨된 경우에는 break문으로 중첩 반복문을 완전히 벗어날 수 없음
- 중첩 반복문 앞에 이름을 붙이고 break와 continue문에 이름을 지정해 줌으로써 하나 이상의 반복문을 벗어나거나 반복을 건너뛸 수 있음
Chapter 4 끝!!!
728x90
LIST
'Book > Java의 정석' 카테고리의 다른 글
[Chapter 6] 객체지향 프로그래밍 1_1 (0) | 2022.04.01 |
---|---|
[Chapter 5] 배열 (Array) (0) | 2022.04.01 |
[Chapter 3] 연산자(Operator) (0) | 2022.04.01 |
[Chapter 2] 변수 (0) | 2022.04.01 |
[Chapter 1] 자바를 시작하기 전에 (0) | 2022.04.01 |
댓글