보통사람

[Study-4주차] 제어문 본문

Study

[Study-4주차] 제어문

pej4303 2020. 12. 7. 10:28
  • 목표

    • 자바가 제공하는 제어문을 학습하세요.
  • 학습할 것 (필수)

    • 선택문

    • 반복문

  • 과제 (옵션)

    • 과제 0.  JUnit 5 학습하세요.

      • 인텔리J, 이클립스, VS Code에서 JUnit 5로 테스트 코드 작성하는 방법에 익숙해질 것.

      • 이미 JUnit 알고 계신분들은 다른 것 아무거나!

    • 과제 1. live-study 대시 보드를 만드는 코드를 작성하세요.

      • 깃헙 이슈 1번부터 18번까지 댓글을 순회하며 댓글을 남긴 사용자를 체크할 것.

      • 참여율을 계산하세요. 총 18회에 중에 몇 %를 참여했는지 소숫점 두 자리 가지 보여줄 것.

      • Github 자바 라이브러리를 사용하면 편리합니다.

      • 깃헙 API를 익명으로 호출하는데 제한이 있기 때문에 본인의 깃헙 프로젝트에 이슈를 만들고 테스트를 하시면 더 자주 테스트할 수 있습니다.

    • 과제 2. LinkedList를 구현하세요.

      • LinkedList에 대해 공부하세요. 

      • 정수를 저장하는 ListNode 클래스를 구현하세요. 

      • ListNode add(ListNode head, ListNode nodeToAdd, int position)를 구현하세요. 

      • ListNode remove(ListNode head, int positionToRemove)를 구현하세요.

      • boolean contains(ListNode head, ListNode nodeTocheck)를 구현하세요.

    • 과제 3. Stack을 구현하세요.

      • int 배열을 사용해서 정수를 저장하는 Stack을 구현하세요.

      • void push(int data)를 구현하세요.

      • int pop()을 구현하세요.

    • 과제 4. 앞서 만든 ListNode를 사용해서 Stack을 구현하세요.

      • ListNode head를 가지고 있는 ListNodeStack 클래스를 구현하세요.

      • void push(int data)를 구현하세요.

      • int pop()을 구현하세요.

    • 과제5. Queue를 구현하세요.

      • 배열을 사용해서 한번

      • ListNode를 사용해서 한번.

 

1. 조건문(선택문)

 

  • 조건식과 문장을 포함하는 {}(블록)으로 구성되어 있으며 조건 시의 연산 결과에 따라 프로그램의 실행 순서가 변경될 수 있음

  • if문과 switch문이 있으며 조건식이 하나라면 switch문이 효율적이나 switch문은 if문보다 제약이 많음

  • 조건식의 결과는 반드시 true 또는 false이어야 함

  • 중첩하여 사용 가능함

 

1.1. if문

 

  • 가장 기본적인 조건문

  • if-else문, if-else if문도 있음

// if문
if (조건식) {
    // 조건식에 해당하는 경우 수행할 문장
}

// if-else문
if (조건식) {
    // 조건식에 해당하는 경우 수행할 문장
} else {
    // 조건식에 해당하지 않는 경우 수행할 문장
}

// if-else if문
if (조건식1) {
    // 조건식1에 해당하는 경우 수행할 문장
} else if (조건식2) {
    // 조건식2에 해당하는 경우 수행할 문장
} else {
    // 조건식1, 조건식2에 해당하지 않는 경우 수행할 문장
}
int i = 100;
if (i == 100) {
    System.out.println("if");
} else {
    System.out.println("else");
}

[ 실행결과 ]
if

 

1.2. switch문

 

  • 하나의 조건식으로 여러 경우의 수를 처리할 수 있음

  • 입력값 결과는 정수 또는 문자열이어야 함

  • case문의 입력값도 정수 또는 문자열만 가능하며 중복되면 안 됨 ( java 1.7 버전 이후부터 문자열 사용 가능)

switch (입력값) {
    case 입력값1 :
        // 입력값1인 경우 수행할 문장
        break;
    case 입력값2 :
        // 입력값2인 경우 수행할 문장
        break;
    default :
        // 해당하는 입력값이 없는 경우 수행할 문장
}

// case문을 여러개 사용 할 경우
switch (입력값) {
    case 입력값1 :
    case 입력값2 :
        // 입력값1 또는 입력값2인 경우 수행할 문장
        break;
    case 입력값3 :
        // 입력값3인 경우 수행할 문장
        break;
    default :
        // 해당하는 입력값이 없는 경우 수행할 문장
}
int level = 3;

switch (level) {
    case 1 :
        System.out.println("Level :" +  level);
        break;
    case 2 :
        System.out.println("Level :" +  level);
        break;
    case 3 :
        System.out.println("Level :" +  level);
        break;
    default :
        System.out.println("Level이 없습니다.");
}

[ 실행결과 ]
Level : 3

 

2. 반복문

 

  • 어떤 작업을 반복적으로 수행할 때 사용함

  • for문, while문, do-while문이 있음

  • 중첩하여 사용할 수 있음

2.1. for문

 

  • 반복 횟수를 정확하게 알고 있을 때 사용하면 좋으며 초기화, 조건식, 증감식으로 이루어져 있음

  • 반복문 안에 수행되는 문장이 하나일 때는 괄호를 생략할 수 있음

  • 조건식 생략 가능 (대신 이렇게 하면 무한 반복문이 됨)

  • for문의 수행 순서

    • 초기화 실행

    • 조건식 판단 

    • 조건식에  해당하는 경우 수행될 문장 실행

    • 증감식 실행

for ( 초기화; 조건식; 증감식 ) {
    // 조건식에 해당하는 경우 수행될 문장
}

- 초기화 : 반복문 실행시 처음에 한 번만 수행됨
for ( int i=0; ~ )
for ( int i=0, j=0; ~ )    // 같은 타입인 경우에 이렇게 여러개를 초기화 시킬 수도 있음

- 조건식 : 조건식이 참인 경우에만 반복문이 수행됨

- 증감식 : 반복문을 제어하는 변수의 값을 증가 또는 감소시킴
for ( ~; i++ )
for ( ~; i-- )
for ( ~; i+=1 )           // 이렇게 해도 됨
for ( ~; i++, j-- )       // 초기화처럼 증감식도 여려개 사용 가능함
for (int i=0; i<5; i++) {
    System.out.println("i = " + i);
}

[ 실행결과 ]
i = 0
i = 1
i = 2
i = 3
i = 4

 

  • forEach문(향상된 for문)

    • Java 1.5 이상부터 배열과 컬렉션인 경우 기존과 다른 방법으로 for문을 처리할 수 있음

for ( 타입 변수명 : 배열 또는 컬렉션) {

}
int[] numArr = { 10, 20, 30, 40 };

// 기존 방식
for (int i=0; i<numArr.length; i++) {
  System.out.println(numArr[i]);
}

// 향상된 for문 방식
for (int tmp : numArr) {
    System.out.println(tmp);
}

[ 실행결과 ]
10
20
30
40

 

2.2. while문

 

  • 조건식이 참인 경우만 반복문을 수행함

  • 조건식 생략 불가

  • while문의 수행 순서

    • 조건식 판단

    • 조건식이 참인 경우에만 수행될 문장 실행

while (조건식) {
    // 조건식이 참인 경우에만 수행될 문장
}
int i = 0;
while (i < 5) {
  System.out.println("i = " + i);
  i++;
}

[ 실행결과 ]
i = 0
i = 1
i = 2
i = 3
i = 4

 

2.3. do-while문

 

  • while문의 변형으로 기본적인 구조는 while문과 같으나 실행 순서가 다름

  • while문은 한 번도 실행되지 않을 수 있지만 do-while문은 최소한 한 번은 실행이 됨

  • while문 끝에 세미콜론(;) 잊지 않도록 주의

do {
    // 조건식이 참인 경우에 수행할 문장들
} while (조건식);
int i =0;
do {
    System.out.println("i = " + i);
    i++;
} while ( i < 5 );

[ 실행결과 ]
i = 0
i = 1
i = 2
i = 3
i = 4

 

3. 기타

 

  • break문

    • 반복문에서 사용할 수 있으며 자신이 포함된 가장 가까운 반복문을 벗어남

for (int i=0; i<5; i ++) {
    if (i == 3) {
        break;
    }
    // break문 때문에 3 이상은 출력되지 않음
    System.out.println("i = " + i);
}

[ 실행결과 ]
i = 0
i = 1
i = 2

 

  • continue문

    • 반복 문내에서만 사용 가능함

    • 반복문을 벗어나는 게 아니라 다음 반복을 수행

for (int i=0; i<5; i ++) {
    if (i == 3) {
        continue;
    }
    // continue문 때문에 3만 빼고 출력됨
    System.out.println("i = " + i);
}

[ 실행결과 ]
i = 0
i = 1
i = 2
i = 4

 

 

※ 참조

 

Java의 정석