[백기선님_자바_스터디] 4주차 - 제어문

시나브로·2021년 7월 16일
0
post-thumbnail

1. 선택문


Java는 if/else문(조건문)과 Switch/case문(선택문)을 제공한다.


if/else문(조건문)


if(condition)
{
   // If condition is true then this block of statements will be executed
}
else if(condition)
{
   // If condition is true then this block of statements will be executed
}
else 
{
   // If none of condition is true, then this block of statements will be executed
}

Switch/case문(선택문)


switch(조건식){
     case1:
     실행 코드
     break;
     case2:
     실행 코드
     break;
     case3:
     실행 코드
     break;
     default: case에 해당하는 값이 없을 때 실행할 코드 
      break;        
}
/*
case 값의 개수는 임의로 설정 가능
break : 코드가 실행되다가 break를 만나면,
바로 실행을 중지하고 해당 loop에서 빠져나옴 
*/
  • switch 문 표현식은 byte, short, int, long, enum 유형, String 및 Byte, Short, Int 및 Long과 같은 일부 래퍼 유형일 수 있다.
    • 단, switch 표현식에서만 wrapper 허용하고, case 에는 wrapper 를 허용하지 않는다.
  • switch () 대괄호 사이에 변수 또는 표현식을 넣을 수 있다.
    • float은 두 개의 부동 소수점 숫자를 비교하는 것은 x와 y의 십진수 등가가 정확하지 않을 수 있어 허용하지 않는다
  • 케이스 값은 리터럴 또는 상수여야한다. 케이스 값 유형은 표현식 유형이어야한다.
  • 각 케이스는 고유해야한다.
  • 각 케이스에는 선택적인 break 문이 있다.
  • 어떤 경우에도 break 문을 사용하지 않으면 break 문에 도달할 때까지 다음 case로 실행이 계속된다
  • 스위치문 케이스에 해당하는 경우가 없으면 default가 실행된다. default 케이스에는 break문이 필요하지 않다



2. 반복문



코드를 조건에 맞게 반복해주는 구문을 말한다.

반복문에는 for문, while문, do-while문, for-each(향상된 for문)이 있다.


for문

for(int i=0;i<10;i++){
	//코드 0~9회 즉, 10번 실행
}

while문

int i=0;
while(i<10){
	//코드 10회 반복
	i++; //for문과 달리 증감식이 없기 때문에 증감식을 통해 유한적인 조건이 되게함
}

do-while문

int i=0;
do{
	//코드 10회 반복
	i++;
}while(i<10);

for-each(향상된 for문)

List<Integer> list = new ArrayList<>();
for(int i=0;i<5;i++){
	list.add(i);
}

for(int num : list){
	//1부터 5를 list에서 하나씩 가져와 출력 
	System.out.println(num);
}



3. Junit5


JUnit 5버전에는 Java 8 이상의 새로운 기능을 지원하고 다양한 스타일의 테스트를 가능하게 하는 것을 목표로하는 기능들이 많이 포함되어 있다.

아키텍처

JUnit 5는 세 가지 하위 프로젝트의 여러 모듈로 구성된다.

1. JUnit Platform

플랫폼은 JVM에서 테스트 프레임 워크를 시작하는 역할을 한다. JUnit과 빌드 도구와 같은 클라이언트 간의 안정적이고 강력한 인터페이스를 정의한다.

또한 JUnit 플랫폼에서 실행되는 테스트 프레임 워크를 개발하기 위한 TestEngine API를 정의한다.

이를 통해 사용자 정의 TestEngine을 구현하여 타사 테스트 라이브러리를 JUnit에 직접 플러그인 할 수 있다.


2. JUnit Jupiter

이 모듈에는 JUnit 5에서 테스트를 작성하기위한 새로운 프로그래밍 및 확장 모델이 포함되어 있다. JUnit 4와 비교 한 새로운 주석은 다음과 같다.

  • @TestFactory – 동적 테스트를위한 테스트 팩토리 인 메소드를 나타냄
  • @DisplayName – 테스트 클래스 또는 테스트 메서드에 대한 사용자 지정 표시 이름을 정의
  • @Nested – 주석이 달린 클래스가 중첩 된 비 정적 테스트 클래스임을 나타냄
  • @Tag – 테스트 필터링을위한 태그 선언
  • @ExtendWith – 사용자 지정 확장을 등록하는 데 사용
  • @BeforeEach – 주석이 달린 메소드가 각 테스트 메소드 이전에 실행됨을 나타냄 (이전 @Before )
  • @AfterEach – 각 테스트 메서드 (이전에는 @After ) 후에 주석이 추가 된 메서드가 실행됨을 나타냄
  • @BeforeAll – 주석이 추가 된 메서드가 현재 클래스의 모든 테스트 메서드보다 먼저 실행됨을 나타냄 (이전 @BeforeClass )
  • @AfterAll – 현재 클래스 (이전의 @AfterClass )의 모든 테스트 메서드 후에 주석이 추가 된 메서드가 실행됨을 나타냄
  • @Disable – 테스트 클래스 또는 메서드를 비활성화하는 데 사용됨 (이전에는 @Ignore ).
  • @ParameterizedTest : 여러개의 테스트 데이터를 매개변수 형태로 간편하게 사용 가능
    • NullSource, ValueSource, EmptySource, CsvSource, EnumSource, MethodSource등 최소 하나의 소스 어노테이션이 필요

ex)

import org.junit.jupiter.api.*;

public class JUnit5Test {
    @BeforeAll
    static void beforeAll() {
        System.out.println("BeforeAll Test");
    }
    @BeforeEach
    static void beforeEach(){
        System.out.println("BeforeEach");
    }

    @Test
    @DisplayName("테스트 1☆")
    static void testing() {
        System.out.println("testing");
    }

    @AfterEach
    static void afterEach() {
        System.out.println("AfterEach");
    }

    @AfterAll
    static void afterAll() {
        System.out.println("AfterAll");
    }
//DisplayName을 이용한 테스트 이름 작성
@Test
@DisplayName("테스트 1☆")
static void testing() {
	System.out.println("testing");
}

//Nested를 이용한 계층 구조 테스트
@Nested
@DisplayName("people")
class People {
	@Nested
  @DisplayName("man")
  class Man {
	  @Test
    static void manTest() {
	    System.out.println("man");
    }
  }
	@Nested
  @DisplayName("woman")
  class Woman {
	  @Test
    static void womanTest() {
	    System.out.println("woman");
    }
  }
}

//ParameterizedTest를 이용한 매개변수이용 
@ParameterizedTest
@ValueSource(ints = {1,2,3,4,5})
static void isOdd(int num){
	assertTrue(Numbers.isOdd(num));
}

3. JUnit Vintage

JUnit 5 플랫폼에서 JUnit 3 및 JUnit 4 기반 테스트 실행을 지원한다.







그 외 변경점



접근 제어자 변경

  • public 접근 제어자가 필요했던 4 버전과 달리 5 버전은 패키지 범위에서 실행이 가능하다.

확장성

  • Extension 하나로 여러 규칙을 통합, 조합 가능하다.
    • @ExtendWith, @RegisterExtension, Java ServiceLoader

assert 방식 다양화

  • assertThrows, assertEquals, assertTimeout, assertNotNull

동시 Test 가능

  • 기존에 하나의 테스트가 실패하면 더 이상 진행되지 않는 Junit 4의 문제점을 해결
assertAll(
	() -> assertNotNull(),
        () -> assertEquals(),
        () -> assertTrue(),
        () -> assertTimeout()
);








참조


profile
Be More!

0개의 댓글