[Java] 제어문

HAEIL·2024년 1월 29일

JAVA

목록 보기
5/8

제어문은 크게 다른 바 없으니 몰랐던 부분만 작성한다.

if/else/else if 문

ArrayList<String> pocket = new ArrayList<String>;
pocket.add("paper");
pocket.add("handphone");
pocket.add("money");

if (pocket.contains("money")) {
	System.out.println("택시 탈 수 있음");
}else {
	System.out.println("걸어가셈");
}

리스트의 contains를 통해서도 조건문 사용 가능 --> return값이 true/false이기 때문

switch/case 문

스위치 케이스 구문은 잘 사용하지 않을 것으로 생각하지만 오랜만에 복습하는 기분으로

public class Sample {
    public static void main(String[] args) {
        int month = 8;
        String monthString = "";
        switch (month) {  // 입력 변수의 자료형은 byte, short, char, int, enum, String만 가능하다.
            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);
    }
}

무조건 해당 케이스만 적용하려면 break; 필수!
입력값이 정형화된 경우에 switch문 사용하면 가독성이 올라간다.

while 문

while

int treeHit = 0;
while (treeHit < 10) {
    treeHit++;  // treeHit += 1 로도 표현 가능
    System.out.println("나무를  " + treeHit + "번 찍었습니다.");
    if (treeHit == 10) {
        System.out.println("나무 넘어갑니다.");
    }
}

break

무한 루프에 걸리지 않게 조심하자

while (true) {
    System.out.println("Ctrl-C를 눌러야 while문을 빠져 나갈 수 있습니다.");
}

무한 루프를 빠져나가려면 조건문을 걸고, break;를 입력해준다.

int a = 0;
while (a < 10) {
    a++;
    if (a % 2 == 0) {
        continue;  // 짝수인 경우 조건문으로 돌아간다.
    }
    System.out.println(a);  // 홀수만 출력된다.
}

continue

int a = 0;
while (a < 10) {
    a++;
    if (a % 2 == 0) {
        continue;  // 짝수인 경우 조건문으로 돌아간다.
    }
    System.out.println(a);  // 홀수만 출력된다.
}

아마 자바도 동일하게 스파게티 코드가 되지 않게,
가독성을 위해 continue문을 조심해서 써야될 것.

for 문

for

int[] marks = {90, 25, 67, 45, 80};
for(int i=0; i<marks.length; i++) {
    if (marks[i] >= 60) {
        System.out.println((i+1)+"번 학생은 합격입니다.");
    }else {
        System.out.println((i+1)+"번 학생은 불합격입니다.");
    }
}

for문은 익숙하니 넘어가자

continue / break

for문에서도 바로 조건문으로 돌아가려면 continue;를 사용한다.

int[] marks = {90, 25, 67, 45, 80};
for(int i=0; i<marks.length; i++) {
    if (marks[i] < 60) {
        continue;  // 조건문으로 돌아간다.
        // break; //break를 쓰면 그냥 for문 탈출!
    }
    System.out.println((i+1)+"번 학생 축하합니다. 합격입니다.");
}

굳이 조건문에서 continue를 쓰는 경우가 많이 있을까 싶지만, 우선은 알아두자.

이중 for문

for(int i=2; i<10; i++) {
    for(int j=1; j<10; j++) {
        System.out.print(i*j+" ");
    }
    System.out.println("");  // 줄을 바꾸어 출력하는 역할을 한다.
}

이건 그냥 머리를 잘 굴리면 된다! !
내부에 있는 for문 먼저 돌아가고, 조건 넘어가면 다시 밖에 있는거 시작하고
내부에 있는 for문 다시 돌아간다.(int j=0과 같은 선언부는 돌아갈때마다 다시 선언됨 why? 지역 선언(? 전역이 아닌걸 뭐라하는지 까먹었다.)이기 때문에!

for each 문 (J2SE 5.0 <= ver)

드디어 자꾸 새롭게 보이던 향상된 for문, for each문의 등장이다.

예시부터 보자.

String[] numbers = {"one", "two", "three"};
for(String number: numbers) {
    System.out.println(number);
}

배열을 선언하고, 배열 속에 있는 값을 명칭할 임의의 변수(number)의 타입과 변수명을 설정한 뒤 :뒤에 배열 이름을 넣어준다.

for (type 변수명: iterate) {
    body-of-loop
}

구조를 보면 이런 식이라고한다.

  • iterate : 루프를 돌릴 객체 (배열, ArrayList 등)
  • type : iterate 객체에 포함된 자료형과 일치해야함(String 배열이면 String.)
import java.util.ArrayList;
import java.util.Arrays;

public class Sample {
    public static void main(String[] args) {
        ArrayList<String> numbers = new ArrayList<>(Arrays.asList("one", "two", "three"));
        for (String number : numbers) {
            System.out.println(number);
        }
    }
}

ArrayList로 구현하면 이런 식.
예시에서는 Arrays.asList로 임의의 값을 넣어주었지만, 실제로 사용할 때는 값을 받아오면 이를 어레이리스트 형태로 만들어주고 for문을 돌리면 되겠다.

for each 단점

  • 따로 반복 횟수를 명시적으로 주는 것이 불가능하다.
  • 즉, 한 단계씩 순차적으로 반복할 때만 사용 가능하다.
    --> 그러면 아마, 늘어나다가 중간에 멈추려면 조건문을 넣고 break;나 continue;를 사용해야 할 것 같은데, 그냥 for문 쓰는게 빠를 것 같다.

후기

그래도 그동안 전공으로 공부하고 사용했던 내용이 있어 새로운 언어를 공부하고, 복습할 때 많은 도움이 되기는 하나보다.. 처음 입학해서 조건문/반복문 등에서 가장 많은 시간을 보냈던 것 같은데 어느정도 한눈에 들어오니 다행이다. . 놀기만 하진 않았구나

profile
컴퓨터공학과를 졸업할 동안 개발을 소홀히 하다가 이제는 진짜 해야겠다 싶어서 시작한 블로그. 사족을 담아 최대한 이해하기 쉽게 작성하다보니 실제 전문가가 보기엔 틀린 점이 있을 수 있다...

0개의 댓글