코딩/Java

Java 입문기 04. 제어문

꼬낄라 2021. 7. 13. 20:45

Java는 백기선님의 유튜브를 통해 공부한다.

 

목표

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

학습할 것

  • 선택문(필수)
  • 반복문(필수)

선택문

Ref

Java 언어에서는 특정 데이터의 값에 따라 수행할 구문을 선택하는 문법을 제공한다.
이와 같은 문법을 일반적으로 선택문이라 부르며 switch case문이라고도 부른다.

switch(변수){                  // 변수 입력

case 상수:                //타입에 맞는 상수가 오면 해당 케이스 실행
statment;    
break;                   //실행시 break되며 다음 case무시 후 swtich 벗어남
                         //break가 없으면 아래 모든 case와 default 실행

case 상수:                //이전 case에 속하지 않으면 다른 case에 접근
statment;                
break; 

default:                 //모든 case에 해당하지 않으면 default 실행
statment;                 
break;
}

예시

import java.util.Scanner;     //스캐너를 이용하기위해 import한다.
public class App {
  public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    int num = 1;
    System.out.println("정수 입력");
    num = scan.nextInt();

    switch (num) {
      case 1:
        System.out.println("One");
        break;
      case 2:
        System.out.println("Two");
        break;
      case 3:
        System.out.println("Three");
        break;
      default:
        System.out.println("Other");
        break;
    }
  }
}

코드를 작성 후 실행 시켜주면

현재 num = scan.nextInt(); 에서 다음 변수 입력을 기다리고 있는데

아래에 2를 입력해 주게 되면

case 2에 접근하여 실행문을 실행하는 것을 볼 수 있다.
그 후 break 걸리며 switch를 빠져나오고 종료

조건문

Ref

Java 언어에서는 특정 조건에 따라 수행할 작업을 결정하는 조건문을 제공한다.
조건문은 크게 두가지가 있다.

  • 특정 조건이 일 때 수행할 작업을 표현하는 if
  • 특정 조건이 일 때 수행할 작업과 거짓일 때 수행할 작업을 표현하는 if else

if 문

import java.util.Scanner;

public class App {

  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int num;
    System.out.println("정수를 입력하세요.");
    num = scan.nextInt();

    if ((num % 2) == 0){                   // if문
      System.out.println(num + "은 짝수");    //블록이 없으면 바로 아래 하나의 구문만 실행
      System.out.println("입력받은 수:" + num); //블록으로 덮어준다면 여러 구문 실행
    }
  }
}

if문 결과

  • 블록{}있을 때의 결과
      

  • if문의 블록{}없을 때의 결과

  • 짝수를 입력하였을때 결과

if else문

import java.util.Scanner;

public class App {

  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int num;

    System.out.println("정수를 입력하세요.");
    num = scan.nextInt();

    if ((num % 2) == 0) {
      System.out.println(num + "은 짝수");
    } else {                              //거짓일때
      System.out.println(num + "은 홀수");
    }
  }
}

if문과 마찬가지로 실행문이 여러 구문이면 블록으로 감싸준다.

if else문 결과

반복문

코딩을 자동으로 반복하는 구문을 반복문이라고 한다.
반복문에는 for문과 while문이 있다.

for문

for(int i = 0;  i < 10;  i==){
System.out.println(i);
}

for문은 위와 같이 나타낼 수 있는데,
for다음 (변수초기화; 조건문; 변수 증감식)으로 나타낸다.
결과는 다음과 같다.

0
1
2
3
4
5
6
7
8
9

while문

while(조건){
    반복 실행 영역
}

while문은 위와 같이 조건이 참이면 반복하는 구문이다.
조건에 truefalse값을 넣어도 되고, 변수를 넣은 후
반복문 안에서 변수++등을 이용하여 빠져나오게 만들 수 있다.

do while문

do while문은 조건과 상관없이 한 번 반복문을 실행하고
조건 충족이 되면 반복문을 다시 실행하는 구문이다. 나머지는 while과 동일

continue

반복문에 continue;구문이 들어가게 되면
해당 반복문의 반복부분을 뛰어넘고 다음 부분으로 넘어가게 된다.
예를들어,

public class Operator {
  public static void main(String[] args) {
int i;
int j;
    for( i = 1; i <= 9 ; i++){

      if(i==5){
        continue;
      } 
      System.out.println(i);
      }
    }
  }

와 같이 코딩하게 되면, i5가 되었을때 continue되어 해당 반복을 뛰어넘는다.

1
2
3
4
6         //5 를 뛰어넘고 6
7
8
9

break

조건문에서와 같이 break를 만나면 바로 반복문을 벗어난다.

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

Ref

JUnit5 란

  • 자바 개발자가 가장 많이 사용하는 단위테스트 프레임워크이다.
  • Java8 이상을 필요로 한다.
  • 3개의 컴포넌트(모듈로 구성)
    • Junit Platform : 테스트의 런처, TestEngine의 인터페이스 API
    • Jupiter : TestEngine의 구현체, junit5 제공
    • Vintage : TestEngine의 구현체, junit3,4 제공
    • 실제 intelliJ에서 실행시 Junit Platform으로 실행
   
주석 내용
@Test 메서드가 테스트 메서드임을 나타냄
@ParameterizedTest 메서드가 매개 변수가 있는 테스트임을 나타냅니다.
@RepeatedTest 메서드가 반복 테스트를 위한 테스트 템플릿임을 나타냅니다.
@TestFactory 메서드가 동적 테스트를 위한 테스트 팩토리임을 나타냅니다
@TestTemplate 메서드가 여러 번 호출되도록 설계된 테스트 사례의 템플릿임을 나타냄
@TestMethodOrder 해당 테스트 클래스에 대한 테스트 메서드 실행 순서를 구성하는 데 사용
@Order(정수 값) : 정한 정수 값을 순서대로 설정한다.
@TestInstance 해당 클래스에 대한 테스트 인스턴스 수명주기를 구성하는 데 사용
@DisplayName 테스트 클래스 또는 테스트 메서드에 대한 사용자 지정 표시 이름을 선언
@DisplayName("아무거나")
@DisplayNameGeneration 테스트 클래스에 대한 사용자 지정 표시 이름 생성기를 선언
@BeforeEach 해당 메서드가 다른 테스트 메서드보다 먼저 실행되어야 함을 나타냄
@AfterEach 해당 메서드가 다른 테스트 메서드 이후에 실행되어야 함을 나타냄
@BeforeAll 해당 메서드가 현재 클래스의 모든 테스트 메서드보다 먼저 실행되어야 함을 나타냄
@AfterAll 해당 메서드가 현재 클래스의 모든 테스트 메서드 이후에 실행되어야 함을 나타냄
@Nested 해당 클래스가 비 정적 중첩 테스트 클래스임을 나타냄
@Tag 클래스 또는 메서드 수준에서 테스트 필터링을위한 태그를 선언하는 데 사용
@Disabled 테스트 클래스 또는 테스트 메서드를 비활성화하는 데 사용
@Timeout 실행이 주어진 기간을 초과시 테스트 메서드들이 실패
@RegisterExtension 필드를 통해 프로그래밍 방식으로 확장하는 데 사용
@TempDir life cycle 또는 테스트에서 필드 또는 매개 변수 주입을 통해 임시 디렉토리를 제공