티스토리 뷰
선택문 (조건문)
if문
if (조건식){
//조건식이 참일 때 수행할 코드
}
자바에서 조건식의 결과는 반드시 boolean 이어야 함을 기억하자.
switch문
if문은 경우의 수가 많아지면 그만큼 if-else문과 조건식이 늘어나서 코드가 복잡해진다. switch문을 사용하면 이런 문제를 해결할 수 있다.
switch(조건식) {
case 값1 :
// code
break;
case 값2 :
// code
break;
default :
//code
}
break
를 생략하면 다른 break문을 만나거나 switch문의 ‘}’ block을 만날 때까지 있는 코드를 모두 수행한다는 점을 주의하자.
-> 이런 human fault를 방지하기 위해 Java 12 부터 switch operator를 제공한다.
- switch 조건식 결과는 정수 혹은 문자열이어야 한다.
- case문의 값은 정수 상수, 문자열 리터럴만 가능하며, 중복하지 않아야 한다.
int num , result;
result = 2;
num = 3;
final int ONE = 1;
switch (result) {
case '1': //상수와 동일. 가능.
case ONE: //final. 가능
case "YES": //문자열 리터럴 가능.(타입 일치해야 함)
case num: //변수 불가능
case 1.0: //실수 불가능
default:
}
반복문
for
for (초기화;조건식;증감식){
//조건식이 참일 경우 수행될 코드
}
enhanced for문
for( 타입 변수명 : 배열 또는 컬렉션){
//코드
}
배열 또는 컬렉션에 저장된 값이 매 반복마다 하나씩 순서대로 읽혀서 변수에 저장된다.
while
while(조건식) {
// 조건식 결과가 true일 동안 반복될 코드
}
가장 먼저 조건식을 평가해서 조건식이 거짓이면 while 문 전체를 벗어나고, 조건식이 참이면 block 내 코드를 수행하고 다시 조건식으로 돌아간다.
do-while
While문과 반대로 block 을 먼저 수행한 후 조건식을 평가. 따라서 block이 최소 한 번 이상 실행되는 것을 보장.
do {
//조건식이 참일 때 수행될 코드
} while (조건식); // ; 을 반드시 붙여야 함.
이름 붙은 반복문
Loop1 :
for (int i = 0; i < 10; i++) {
System.out.println("i = " + i);
for (int j = 0; j < 5; j++) {
if (j == 3) {
System.out.println("j = " + j);
break Loop1;
}
}
}
중첩 반복문일 경우, 반복문에 이름을 붙여서 break할 때 하나 이상의 반복문을 한번에 벗어날 수 있다.
JUnit5
JUnit5 모듈 구성
- JUnit 플랫폼 : 테스팅 프레임워크 구동을 위한 런처, 테스트 엔진을 위한 API 제공
- JUnit 주피터 : JUnit 5를 위한 테스트 api와 실행 엔진
- JUnit 빈티지 : JUnit 3,4 로 작성된 테스트를 Unit 5 플랫폼에서 실행하기 위한 모듈
@Test 어노테이션과 테스트 메서드
- 테스트로 사용할 클래스 생성. (클래스명은 보통 “Test” 를 접미사로 붙임)
- 테스트를 실행할 메소드에
@Test
어노테이션을 붙임 - @Test가 붙은 메서드 내에서, JUnit이 제공하는 검증 메서드를 통해 결과 확인
주요 단언 메서드
- assertEquals(Object expected , Object actual) : 두 객체 내 정의된 equals() 메소드를 통해 두 객체가 같은지 비교
- 만약 equals() 를 override하지 않았다면 두 객체가 같은 주소값을 갖는지 확인
- assertSame(Object expected, Object actual) : 두 객체가 같은 주소값을 갖는지 확인
- assertTrue(boolean condition) : condition이 true인지 검사
- assertNull(Object actual) : actual이 null인지 검사
- fail() : 이 코드라인에 도달하면 테스트를 실패로 처리
- assertThrows(Class expectedType, Executable executable) : executable을 실행했을 때 expectedType의 익셉션이 발생하는지 검사
- assertAll() : 검증이 여러 개 있을 때, 하나가 실패하면 바로 모든 검증이 중단된다. 만약 하나의 검증이 실패하더라도 나머지 검증을 완료하고 싶다면 assertAll()을 활용.
assertAll( ()-> assertEquals(3, 5/2), ()-> assertEquals(4, 2*2), ()-> assertEquals(6, 11/2) );
@BeforeEach, @AfterEach
- @BeforeEach : 테스트 실행 전에 필요한 준비 작업 시 사용. (Private X)
e.g. 임시 파일 생성, 테스트 메서드에서 사용할 객체 생성 - @AfterEach : 테스트 실행 후 정리할 것이 있을 때 사용. (Private X)
e.g. 테스트에서 사용한 임시 파일 삭제
JUnit 이 각각의 테스트 메서드를 실행하는 과정
- 테스트 메서드를 포함한 객체 생성
- @BeforeEach 가 붙은 메서드 실행
- @Test 가 붙은 메서드 하나 실행
- @AfterEach가 붙은 메서드 실행
- 또 다른 @Test 메서드에 대해, 1번부터 반복
public class LifeCycleTest {
public LifeCycleTest() {
System.out.println("new LifeCycleTest");
}
@BeforeEach
void setUp() {
System.out.println("LifeCycleTest.setUp");
}
@Test
void a() {
System.out.println("LifeCycleTest.a");
}
@Test
void b() {
System.out.println("LifeCycleTest.b");
}
@AfterEach
void tearDown() {
System.out.println("LifeCycleTest.tearDown");
}
}
new LifeCycleTest
LifeCycleTest.setUp
LifeCycleTest.a
LifeCycleTest.tearDown
new LifeCycleTest
LifeCycleTest.setUp
LifeCycleTest.b
LifeCycleTest.tearDown
@BeforeAll, @AfterAll
- @BeforeAll : 한 클래스 내 모든 테스트 메서드가 실행되기 전에 수행해야 하는 작업. 모든 테스트 메서드 실행 전에 한 번 실행
- @AfterAll : 모든 테스트 메서드를 실행한 뒤에 한 번 실행
테스트 메서드 간 실행 순서 의존, 필드 공유 금지
- JUnit이 테스트 순서를 결정. 테스트 순서는 버전에 따라 달라질 수 있으므로, 테스트가 실행 순서에 의존적이면 안 됨.
- 필드 값을 공유하면, 테스트 메서드 실행 순서에 따라 필드 값이 의도한 대로 변경되지 않을 수도 있음. 따라서 테스트 메서드끼리 필드를 공유하면 안됨. (Static variable 사용하지 않는 것이 좋음)
구현과제
리뷰 영상 배운 점
- 가독성 있는 코드는 일단 나 자신이 다시 읽을 수 있는 코드
- Octotree : github repo 편하게 볼 수 있는 chrome extension
- Junit4 와 Junit5를 함께 쓰지 말자
- Queue의 method
- 예외를 던지는 것
- null을 던지는 것
- test class는 test 메소드마다 새로 생성됨
@TestInstance(TestInstance.LifeCycle.PER_CLASS)
옵션으로 변경 가능@TestMethodOrder(MethodOrder.orderAnnotation.class)
: 테스트 메소드 실행 순서 지정 가능
- 꼬리재귀 최적화, 자바는 지원하지 않음
- 재귀의 경우, 공간 복잡도가 커질 수 있음. O(n^2) 이상일 경우 주의하자
'JAVA' 카테고리의 다른 글
[자바 스터디] 6주차 : 상속 (0) | 2022.01.30 |
---|---|
[자바 스터디] 5주차 : 클래스, 패키지 (0) | 2022.01.21 |
[자바 스터디] 3주차 : 연산자 (0) | 2022.01.07 |
[자바 스터디] 2주차 : 자바 데이터 타입, 변수 그리고 배열 (0) | 2022.01.01 |
[자바 스터디] 1주차 : JVM이란 무엇이며 JAVA 코드는 어떻게 실행되는가 (0) | 2021.12.26 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코테
- 프록시
- 자바
- 템플릿콜백
- 토비의스프링
- 토비의봄TV
- 서비스추상화
- 데코레이터패턴
- 메서드레퍼런스
- AOP
- ec2
- 카카오
- java
- SOLID
- provider
- 예외처리
- 자바스터디
- c++
- 김영한
- 백기선
- 토비
- 프로그래머스
- OOP
- gracefulshutdown
- 디자인패턴
- 코딩테스트
- 스프링
- 프록시패턴
- 객체지향
- BOJ
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함