도서/자바의 신

[도서/자바의 신] #6 제가 조건을 좀 따져요

yulee_to 2022. 12. 20. 22:14

자바의 신

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. 


도대체 얼마나 조건을 따지길래...

if문

if( boolean 값) 처리문장;

if 다음엔 반드시 소괄호를 열고 닫아야 하며, 소괄호 안에는 boolean 형태의 결과가 있어야 한다.

소괄호 안의 값이 true일 때 처리문장을 수행한다. 처리문장은 없어도 세미콜론만 찍어주면 컴파일하는데 문제는 없으며, 처리 문장을 다음 줄에다 써주고 세미콜론을 찍어줘도 된다. 

if else 문

if(boolean 값) 처리문장1;
else 처리문장2;

if의 소괄호 안의 값이 false이면 else에 해당하는 처리문장2를 수행한다.

if를 조금 더 다양하게 사용해보자

  • if 다음에 오는 처리문장은 중괄호로 묶으면 여러줄이 올 수 있다.
  • if의 조건을 여러개 쓸 때는 소괄호 안에 &&와 ||를 이용하면 여러 조건을 한번에 따질 수 있다.
  • 조건의 범위를 여러개 쓸 때는 if-else if-else 문을 사용하면 된다. else if다음에는 if문과 마찬가지로 boolean값이 들어가는 소괄호와 처리문장이 나온다.
if( boolean 값1 && boolean값2 ) {
    처리문장1;
    처리문장2;
    ...
}
else if( boolean 값3) {
    처리문장1;
    처리문장2; 
    ....
}
else if( boolean 값4) {
   ....
}
else {
   ...
}

if-else if를 사용하지 않고 &&로 값의 범위를 나눠 if문을 쓰면 모든 if문을 다 돌아봐야 한다는 단점이 있다.

따라서 if-else if를 사용하면 더 효율적으로 조건을 따질 수 있다.

자바의 switch와 불켜는 스위치는 별 상관 없다

하나의 값이 여러 범위에 걸쳐서 비교되어야 할 때, 하나의 값으로 분기하여 비교하는 switch 구문을 사용하면 좋다.

switch문

switch (비교대상변수) {
    case 점검값1:
    처리문장1;
    ...
    break;
    case 점검값2:
    처리문장2;
    ....
    break;
    ....
    default:
    기본처리문장;
    ....
    break;

비교대상변수에는 long을 제외한 정수형과 몇몇 특별한 타입만 들어갈 수 있다.

중괄호 안에는 case 점검값이 오거나 default가 나와야 한다. 

switch문에서는 한번 조건을 만족시켜줬다면 그 다음 break가 올 때까지 어떤 case가 오든 상관하지 않고 모두 수행해주기 때문에 case를 마무리하고 싶다면 반드시 break를 써줘야 한다.

switch문은 되도록 숫자 비교시에는 작은 숫자부터 증가시켜 가는 것이 좋다. 

 

default는 앞에 있는 조건이 맞지 않은 경우에 수행되는 코드이다.

case 문에 한번이라도 걸리고 default 전에 break가 수행되면, default는 수행되지 않는다.

가급적 default문은 맨 뒤에 써주는 것이 좋다. 

 

여러 조건 중 하나만 만족해도 같은 일을 하게 해주기 위해서 break를 쓰지 않고 case문을 작성하는 방법도 있다.

예를 들어1년의 12개월 중 30일까지만 있는 달인 4, 6, 9, 11에 대해서

case 4:

case 6:

case 9:

case 11: 

    System.out.println(month +"has 30 days");

    break;

를 해주면 if문을 쓴것보다 더 깔끔하게 표현할 수 있다.

 

Java 6까지는 switch문은 long을 제외한 정수형과 Enum과 몇몇 참조 자료형에서만 쓸 수 있었는데 Java 7부터는 String도 사용할 수 있게 되었다. 

반복문이라구요?

while문

while (boolean조건) {
    처리문장;
    ....
}

boolean 조건이 true일 때에만 중괄호 안의 내용들이 수행되고, 다시 boolean 조건을 확인해 true이면 중괄호 안의 내용을 수행하는 작업을 반복한다.

do-while문

do {
    처리문장;
    ....
} while( boolean조건);

적어도 한번은 반복문장이 실행되게 하는 반복문으로 처리문장을 먼저 수행하고 boolean 조건문을 따진다.

마지막에 세미콜론을 넣어주는 것을 까먹지 말자!

break와 continue

반복문을 벗어날 때는 boolean 조건이 false여도 벗어날 수 있지만, 반복문의 중괄호 안에 if문을 이용해 break;를 수행해주면 벗어날 수 있다.

break는 현재 수행중인 반복문의 중괄호에서 빠져 나가는 역할을 한다. 

 

반복문 안의 문장을 건너뛰고 싶을 때는 continue라는 예약어를 사용하면 된다. continue는 그 뒤에 있는 문장들은 건너뛰고, boolean 조건 점검 부분으로 다시 가라는 의미다. 

 

continue와 break는 그 위치에 따라 반복문이 종료되지 않는 무한 반복이 되는 경우가 발생할 수도 있으므로 조심해서 사용해야 한다.

가장 확실한 for 루프

for 루프

for (초기화; 종료조건; 조건 값 증감) {
    반복문장;
}
  1. 초기화 부분에서 변수의 값을 초기화해준다.
  2. 종료조건 구문이 수행되고, 이 종료 조건 내의 결과는 if 문과 동일하게 boolean만 위치할 수 있다. true일 경우 중괄호 안의 내용이 수행된다.
  3. 중괄호 내의 작업이 종료되면 조건 값 증감이 수행된다.
  4. 2,3번 과정을 계속 반복한다.
  5. 조건 결과가 false이거나 break문을 만나면 반복문을 벗어나고 다음 문장을 수행한다.

많이 사용 안하는 label

label이라는 예약어는 두개 이상의 for나 while 루프가 있을 때 사용된다.

사용법은 바깥쪽 반복문 바로 앞에 원하는 이름을 입력하고 콜론을 써 주고 안쪽 반복문에서 continue 뒤에 label 이름을 적어주면 바깥쪽 반복문으로 이동하게 된다. 


정리해 봅시다

1. if 문장의 소괄호 안에는 어떤 형태의 결과가 제공되어야 하나요?

boolean

2. if 조건에 맞지 않는 모든 경우를 처리할 때 사용하는 예약어는?

else

3. switch를 사용할 수 있는 기본 자료형의 타입에는 어떤 것이 있나요?

long을 제외한 정수형 미 Enum을 사용할 수 있다. JDK 7부터는 String도 사용가능하다.

4. switch 블록 안에서 비교 대상값 앞에 사용하는 예약어는?

case

5. switch 조건을 빠져나가도록 하는 예약어는?

break

6. switch 조건들에 맞지 않을 때 기본 처리를 하기 위한 예약어는?

default

7. while문의 소괄호 안에는 어떤 형태의 결과가 제공되어야 하나요?

boolean

8. while문을 무조건 한번은 실행하게 하려면 어떻게 해야 하나요?

do-while문을 사용하면 된다.

9. while문을 마음대로 빠져나가게 하려면 어떤 예약어를 사용하면 되나요?

break

10. while문의 중간에 while문의 소괄호 점검 구문으로 건너뛰도록 할 때 사용하는 예약어는?

continue

11. for 루프의 소괄호 안의 가장 첫 구문(첫 세미 코론 앞의 문장)은 for 루프가 수행되는 동안 몇번 수행되나요?

한번

12. for 루프의 소괄호 안의 중간에 있는 구문은 어떤 타입의 결과가 제공되어야 하나요?

boolean

13. for 루프의 소괄호 안의 마지막에 있는 구문에서는 어떤 작업을 수행하나요?

조건값의 증가 또는 감소가 일어난다. 

728x90