[Java] 선택, 반복문

정석용·2023년 4월 6일
0

Java

목록 보기
4/15
post-thumbnail

선택문

조건을 걸고 해당 조건에서만 실행되는 로직이 있는 경우 사용한다.

if-else

if(조건){
	로직 A
} else if (조건 2){
	로직 B
}

if문은 위와 같이 사용된다. 위에서 아래로 판단하며 조건 1을 만족하면 로직 A 조건 1을 만족하지 않고
조건 2를 만족하면 로직 B 를 실행
else if 를 계속 사용하여 추가가 가능하다.

switch-case
if-else문에서는 조건문을 직접 설정할 수 있어서 특정 변수의 값의 범위를 지정할 수도 있지만 switch문은 그럴수 없다.
switch문에서는 변수나 조건문의 결과가 case문에서 지정한 값과 같은지 동등비교만 할 수 있다.
break 코드를 사용해 로직 실행을 종료할 수 있으며 switch문이 종료되거나 break 코드를 만날때까지 실행된다.

int grade = 1
switch(grade) {
          case 1: System.out.println("a"); break;
          case 2: System.out.println("b"); break;
          case 3: System.out.println("c"); break;
          default: System.out.println("f");
      }
    }

반복문

로직을 조건문에 맞게 반복 해주는것
for

for(statement1 ; statement2 ; statement 3){
	로직
}

statement1: 로직이 실행되기 전 한번 실행
statement2: 로직 실행되는 조건
statement3: 로직이 실행되고 매번 실행

for-each

for(타입 변수명: 배열){
	로직
}

배열을 인덱스가 아닌 요소로 접근이 가능하다.

while

while(조건){
	로직
}

조건문 판단 후 조건문이 true인 경우 로직을 실행

ex.

int i = 0;
while(i < 3) {
  i++;
  if(i==2) continue;
  System.out.println(i);
}

i가 3미만인 경우 while 문 내부 로직을 실행한다.
만약 2인 경우 continue 키워드를 만나 아래 로직을 실행하지 않고 while문 조건문부터 다시 시작한다.

do-while

do{
	로직
} while(조건문);

로직을 먼저 실행 한 후 조건문을 판단한다. 조건문이 true 인경우 do 블럭을 실행한다.
따라서 조건문과 상관없이 로직은 반드시 한 번 이상 실행된다.

JUnit5

Junit 5란
크게 세가지 서브 프로젝트의 여러 모듈로 구성되어 있다.

JUnit 5 = Platform + Jupiter + Vintage

Platform

  • JVM에서 테스트를 하기 위한 기초적인 역할을 담당한다.
  • 테스트를 하기 위한 TestEngine API 제공
  • JUnit 4 기반 테스트 제공

Jupiter

  • JUnit 5에서 테스트 및 확장하기 위한 프로그래밍 모델과 확장 모델의 조합이다.
  • Platform에서 사용하는 TestEngine은 Jupiter를 통해 제공하는 것이다.

Vintage

  • 하위 버전들 기반의 테스트를 실행시키기 위해 해당 TestEngine을 제공한다.

JUnit 5를 사용하기 위해서는 런타임에 Java 8 이상이 필요하다.
나는 Java 11을 사용하여 구현해 보았다.

기본 테스트

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class MainTest {
    @Test
    public void testAddition() {
        int result = 2 + 2;
        assertEquals(4, result);
    }
}

실패시

@Test
    public void testAddition() {
        int result = 2 + 3;
        assertEquals(4, result);
    }

result 값에는 2+3 인 5가 입려되어있다.
하지만 assertequals 사용하여 두 객체의 값이 같은지의 여부를 확인하였다.

그 결과 예측 값과 실제 값이 다르다는 오류메세지를 보여준다.

Annotation

자바에서 어노테이션은 사전적 의미로는 주석이라는 뜻을 가지고 있다. 자바의 어노테이션은 소스코드에 추가해서 사용할 수 있는 메타 데이터의 일종이다.
자바의 어느테이션은 보통 '@'기로흘 앞에 붙여서 사용하며. JDK 1.5 버전 이상에서부터 사용가능하며, 클래스파일에 임베드되어 컴파일러에 의해 생성된 이휴 JVM에 포함되어 동작한다.

  • 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보 제공
  • 소프트웨어 개발 환경이 빌드나 배포시 코드를 자동으로 생성할 수 있도록 정보 제공
  • 런타임에 특정 기능을 실행하도록 정보를 제공

JUnit5 어노테이션

@AfterAll
현재 테스트 클래스의 모든 테스트 후에 주석이 달린 메서드가 실행되어야 함을 알리는 데 사용됩니다 .

@AfterEach
현재 테스트 클래스의 각 , , , 및 메서드 다음 에 주석이 달린 메서드가 실행되어야 함을 알리는 데 사용됩니다 . @Test@ RepeatedTest @ParameterizedTest @TestFactory @TestTemplate

@BeforeAll
현재 테스트 클래스의 모든 테스트 전에 주석이 달린 메서드가 실행되어야 함을 알리는 데 사용됩니다 .

@BeforeEach
현재 테스트 클래스의 각 , , , 및 메서드 보다 먼저 주석이 달린 메서드가 실행되어야 함을 알리는 데 사용됩니다 . @Test@RepeatedTest@ParameterizedTest@TestFactory@TestTemplate

@Disabled
테스트 클래스 또는 테스트 메서드가 현재 비활성화 되어 실행되어서는 안 된다는 신호를 보내는 데 사용됩니다.

@DisplayName
테스트 클래스 또는 테스트 메서드에 대한 사용자 지정 표시 이름 을 선언하는 데 사용됩니다

@DisplayNameGeneration
테스트 클래스에 대한 사용자 지정 표시 이름 생성기를 선언하는 데 사용됩니다.

@IndicativeSentencesGeneration
DisplayNameGenerator.IndicativeSentences표시 이름 생성기를 등록하고 구성하는 데 사용됩니다

@Nested
클래스가 둘러싸는 클래스 의 인스턴스와 설정 및 상태를 공유할 수 있는 중첩된 비정적 테스트 클래스(즉, 내부 클래스 )임을 알리는 데 사용 됩니다.

@Order
필드, 메서드 또는 클래스가 동일한 범주의 다른 요소에 대해 평가되거나 실행되어야 하는 순서 를 구성하는 데 사용되는 주석입니다 .

@RepeatedTest
지정된 횟수만큼 반복되어야 하는 테스트 템플릿 방법이라는 신호를 보내는 데 사용됩니다 .

@Tag
A는 반복 선언하는 데 사용되는 주석 태그 주석 테스트 클래스

@Tags
하나 이상의 @Tag선언을 위한 컨테이너입니다 .

@Test
테스트 방법 이라는 신호를 보내는 데 사용됩니다 .

@TestClassOrder
테스트 클래스 ClassOrderer를 구성하는 데 사용되는 유형 수준 주석입니다 .@Nested

@TestFactory
메서드가 테스트 팩토리 메서드 라는 신호를 보내는 데 사용됩니다 .

@TestInstance
테스트 클래스 또는 테스트 인터페이스에 대한 테스트 인스턴스 의 수명 주기 를 구성하는 데 사용되는 유형 수
준 주석입니다 .

@TestMethodOrder
테스트 클래스 또는 테스트 인터페이스 MethodOrderer의 테스트 메서드 를 구성하는 데 사용되는 유형 수준 주석입니다 .

@TestTemplate
주석이 달린 메서드가 테스트 템플릿 메서드 라는 신호를 보내는 데 사용됩니다 .

@Timeout
한 클래스 및 해당 클래스 내에서 메서드 또는 모든 테스트 가능한 메서드에 대한 시간 초과를 정의하는 데 사용됩니다 @Nested.

Assert 메소드
프로그래밍 관점에서 해석하면 표명, 가정 설정문으로 할 수 있으며, 이를 통해 자신의 로직이 정확한지 테스트 해 보는 것이다.

assertArrayEquals(a, b)
배열 A와 B가 일치함을 확인한다.

assertEquals(a, b)
객체 A와 B가 같은 값을 가지는지 확인한다

assertEquals(a, b, c)
객체 A와 B가 값이 일치함을 확인한다 ( a: 예상값, b:결과값, c: 오차범위)

assertSame(a, b)
객체 A와 B가 같은 객체임을 확인한다

assertTrue(a)
조건 A가 참인지 확인한다

assertNotNull(a)
객체 A가 null이 아님을 확인한다

래퍼런스
https://hbase.tistory.com/169
https://dev-jj.tistory.com/entry/JUnit이란-JUnit5-Assertion-어노테이션
https://github.com/jongnan/java-study-with-whiteship/blob/master/week4/week4_0.md#annotations

profile
오늘도 성장중

0개의 댓글