본문 바로가기
스터디/[white-ship] 자바 스터디(study hale)

4주차 과제: 제어문

by doyoungKim 2021. 1. 2.

목표

자바가 제공하는 제어문을 학습하세요.

*제어문: 실행 순서를 변경시키거나 또는 조건에 따라 실행해야 할 명령문을 제어하는 데 사용하는 명령문.

학습할 것 (필수)

  • 선택문
  • 반복문

1. 선택문

if else

우리가 어떤 데이터를 상황에 따라서 선택해서 각각 다른 실행을 해야 할 상황이 올 수 있다.
그때 if 문을 주로 사용한다.

// 최초의 조건
if (조건) {
 실행문
}
 // if 의 또다른 조건
else if (조건) {
 실행문
}
// if의 나머지 상황
else {
 실행문
}

 

예를 들어,

남자이고 20살이 넘으면 소주를 보내주고
남자이고 20살 보다 적고 12살 보다 많으면 우유를 보내주고
그리고 남자가 아닐경우에는 콜라를 보내주는 코드를 짜보면 다음과 같이 코드를 만들 수 있다.

Person doyoungKim = Person.getDoyoung();

// 남자 O
if (doyoungKim.getGender().equals("남자")) {
    // 20살 이상 O
    if (doyoungKim.getAge() >= 20) {
        sendSojuByPerson(doyoungKim);
    }
    // 20살 이상 X, 12살 이상 O
    else if(doyoungKim.getAge() >= 12) {
        sendMilkByPerson(doyoungKim);
    }
// 남자 X
} else {
    sendColaByPerson(doyoungKim);
}

 

하지만 개선해야할 점이 있다.

else는 "그밖에" 라는 의미를 가지고 있다.

따라서 코드가 길어진다면 if 문과 else 구문 들이 많이 멀어져 있어 서로 구분이나 비교하기 어려운 상황이 발생한다.

 

따라서 클린코드는 이런 else가 들어가는 것을 최대한 지양한다.

Person doyoungKim = Person.getDoyoung();

if (doyoungKim.getGender().equals("남자")) {

    if (doyoungKim.getAge() >= 20) {
        sendSojuByPerson(doyoungKim);
        return;
    }

    if (doyoungKim.getAge() >= 12) {
        sendMilkByPerson(doyoungKim);
        return;
    }

    return;
}

sendColaByPerson(doyoungKim);

 

else 를 제거하고 return 을 이용해서 이렇게 리팩토링 할 수 도 있다.

 

Switch

만약, 값의 범위를 묻는 것 조건( age >=20 )이 아니라, 값 일치를 묻는 조건이라면,
switch 와 break 를 이용해서 조건문을 만들 수 있다.

switch(n){
  case 1: // n이 1이면 여기서부터 실행
  case 2: // n이 2이면 여기서부터 실행
  case 3: // n이 3이면 여기서부터 실행
  case 4: // n이 4이면 여기서부터 실행
  default: // 해당하는 case 없으면 여기서 부터 실행
}


여기서 주의 할 점은 n이 1이면 case1만 실행한다는 것이 아니라
case 1 부터 실행된다는 것이다.
따라서 case 1만 실행하기 위해선 break 예약어를 사용해야 한다.

switch(n){
  case 1: // n이 1이면 여기 실행
    break;
  case 2: // n이 2이면 여기 실행
    break;
  case 3: // n이 3이면 여기 실행
    break;
  case 4: // n이 4이면 여기 실행
    break;
  default: // 해당하는 case 없으면 여기서 부터 실행
}

 

그렇다면 예를 들어서 누군가에 국적에 따라 모국어를 구하는 코드를 짜 본다면 다음과 같을 수 있다.

final String nationality = person.getNationality();

String nativeLanguage = null;

switch (nationality) {
    case "korea":
        nativeLanguage = "kreaan";
        break;
    case "germany":
        nativeLanguage = "german";
        break;
    default:
        nativeLanguage = "english";
        break;

}

return nativeLanguage;

 

반복문

기본적인 문법은 다음과 같다.

while (expression) { statement; }
do { statement; } while (expression)
for (초기값; 조건; 방향&간격) { statement; }
for (<type> <instance>: <type-iterable>) { statement; }

 

1부터 6까지의 숫자의 합을 구하는 코드를 각각 반복문으로 예시를 들어본다면,

while

while 가로 안에 조건이 맞으면 반복해서 실행하는 문.

int[] numberArray = {1, 2, 3, 4, 5, 6};

int sum = 0;
int i = 0;

while (i < numberArray.length) {
    sum += numberArray[i];
    i++;
}

System.out.println(sum); // 21

 

do while

먼저 실행한 다음에 조건이 맞으면 또 실행하는 문

int[] numberArray = {1, 2, 3, 4, 5, 6};

int sum = 0;
int i = 0;

do {
    sum += numberArray[i];
    i++;
} while (i < numberArray.length);

System.out.println(sum); // 21

 

for

반복의 횟수를 세기 위한 변수, 반복의 조건, 반복의 조건을 무너뜨리기위한 연산을 한 괄호 안에서 나열해 반복하는 반복문.

int[] numberArray = {1, 2, 3, 4, 5, 6};

int sum = 0;

for (int i = 0; i < numberArray.length; i++) {
    int number = numberArray[i];
    sum += number;
}

System.out.println(sum); // 21

 

enhanced for

for 문 에서 모든 요소를 대상으로 하는 반복문.

int[] numberArray = {1, 2, 3, 4, 5, 6};

int sum = 0;

for (int number : numberArray) {
    sum += number;
}

System.out.println(sum); // 21

 

break

반복문을 빠져나가기 위한 키워드

while(n < 100){
  if(x == 20){
     break; // while문 탈출
  }
}

 

사람들 속에서 이름이 김도영 인 사람을 찾아보는 예시를 다음과 같이 볼 수 있다.

List<Person> personList = Arrays.asList(
        new Person("김도영", 31, "남성", "korea"),
        new Person("김도일", 21, "남성", "korea"),
        new Person("김도이", 11, "여성", "korea"),
        new Person("김도삼", 41, "남성", "korea")
);

 

Person doyoung = null;

for (Person person : personList) {
    if (person.getName().equals("김도영")) {
        doyoung = person;
        break;
    }
}

assert doyoung != null;

System.out.println(doyoung.getName())

 

continue

반복문의 나머지 부분은 실행하지 않고 다시 맨 위로 이동하여 조건 검사부터 실행하는 키워드

while(n < 100){
  if(x == 20){
    continue; // 다시 조건 검사로
  }
}

 

사람들 속에서 성별이 남성인 사람들의 수를 구해보는 코드를 작성해본다면 다음과 같을 수 있다.

List<Person> personList = Arrays.asList(
        new Person("김도영", 31, "남성", "korea"),
        new Person("김도일", 21, "남성", "korea"),
        new Person("김도이", 11, "여성", "korea"),
        new Person("김도삼", 41, "남성", "korea")
);


int manCount = 0;

for (Person person : personList) {

    if (person.getGender().equals("여성")) {
        continue;
    }

    manCount++;
}

System.out.println(manCount);
728x90

댓글