- 백기선-JAVA STUDY/WEEK42020년 12월 19일 00시 39분 24초에 업로드 된 글입니다.작성자: jCurve728x90반응형
목표: 자바가 제공하는 제어문을 학습
- 선택문
- 반복문
제어문
제어문이란 프로그램의 순서를 제어하거나 수행 횟수를 결정하는 것이다.
제어문은 처리 방식에 따라 크게 조건문, 선택문, 반복문으로 나뉜다.
선택문
의사 결정시 코드블럭을 선택적으로 실행시킨다.
if문
if-else문
switch문
if(조건){ /*코드*/ }
조건이 true일 때 코드를 실행시킨다.
if(조건1){ /*코드1*/ }else { /*코드2*/ }
조건1이 true이면 코드1를 실행시키고 false이면 코드2를 실행시킨다
같은 방식으로 else if를 더 추가하여 조건을 늘릴 수 있다.
하지만 else if로 분기를 늘려서 코드를 처리하는 것 보다 switch문으로 실행 흐름을 제어하는 것이 더 편리하다.
int num = 3; switch(num) { case 1: System.out.println("1"); break; case 2: System.out.println("2"); break; case 3: System.out.println("3"); break; default: System.out.println("nothing"); break; }
위 코드처럼 표현하는 것이 else if로 분기를 나눠주는것 보다 더 편리하지만 매번 case문 마다 break처리를 해줘야하고 case하나에는 하나의 값만 들어갈 수 있어서 불편하다.
그래서 switch문을 개선한 방법이
switch(num){ case 1,2,3 -> System.out.println("1 2 3"); }
위와 같은 코드이다. case문 하나에 여러개의 값이 들어갈 수 있고 화살표 연산자를 사용하여
break문을 사용할 필요도 없어졌다.
추가적으로 switch문에서 yield라는 키워드를 사용하여 값을 반환 하기때문에 break문도 필요 없을뿐아니라 식으로도 사용기 가능해졌다.
int num = switch(code){ case 'a','b': yield 1; case 'c','d': yield2; }
java13부터 switch문의 각 case에 {}이 사용가능해져 case-level의 scope가 사용할 수 있게 되었다.
반복문
- for문
- while문
- do-while문
- for-each문
- labeled for문
for문은 보통 반복 횟수가 짐작이 가거나 고정된경우 혹은 반복 시점에서 index값이 필요할 때 자주 사용한다.
for(조건식){ /*코드*/ } for(int i=0;i<10;i++){ System.out.println(i+": hi"); }
while문은 보통 지정된 조건이 true인 경우에 계속 반복적으로 실행하기를 원할때 자주 사용된다.
int num=1 while(true){ num++; if(num==100) break; }
do-while문은 while문과 거의 동일하지만 조건이 false여도 한번은 실행시킬 수 있다.
do{ System.out.prinln("hello"); }while(false); //한번 실행하고 종료 while조건식이 true이면 무한 loop
labeled for문은 중첩 for문에서 사용하여 조건에 따른 지속과 중단에 용이하다.
label1: for(조건1){ for(조건2){ /*코드*/ break label1 //conintue label1 } }
위와 같은 코드로 중첩 반복문 가장 안쪽 루프에서 전체 중첩 반복문을 종료 시키거나 continue로 할 수 있다.
for-each
for-each문은 반복횟수를 명시적으로 주는 것이 불가능하고 객체에서 값을 순차적으로 대입하여 for문을 수행할때 용이하다 (컬렉션에서 반복문 처리는 collection 에서 다루겠다.)
과제 0 . JUnit 5 학습하세요.
테스트를 처음 접해보고 JUnit5 공식문서 보면서 조금씩 해보았다.
static 메서드를 작성하고 test를 하기위해 불러와서 성공 경우와 실패 경우를 작성해 보았다.
assertEquals는 예상 값과 결과값이 같은지 알려준다
assertAll은 여러개의 asser함수를 동시에 실행 시킬 수 있다. 도중에 fail이 발생해도 멈추지않는다.
@DisplayName은 테스트 클래스와 테스트 메서드를 사용자 지정 표시 이름으로 선언 할 수 있게 해준다.
Assertion 메서드는 https://junit.org/junit5/docs/current/api/org.junit.jupiter.api/org/junit/jupiter/api/Assertions.html
에서 제공된 많은 메서드를 확인할 수 있다.
@TestMethodOrder 를 사용하여 테스트 실행 순서를 지정할 수 있다.
- [DisplayName](<https://junit.org/junit5/docs/current/api/org.junit.jupiter.api/org/junit/jupiter/api/MethodOrderer.DisplayName.html>): 표시 이름에 따라 영숫자 순으로 테스트 메서드를 정렬 합니다 ( 표시 이름 생성 우선 순위 규칙 참조 ).
- [MethodName](<https://junit.org/junit5/docs/current/api/org.junit.jupiter.api/org/junit/jupiter/api/MethodOrderer.MethodName.html>): 메서드 이름과 형식 매개 변수 목록에 따라 테스트 메서드를 영숫자 순 으로 정렬 합니다.
- [OrderAnnotation](<https://junit.org/junit5/docs/current/api/org.junit.jupiter.api/org/junit/jupiter/api/MethodOrderer.OrderAnnotation.html>): 주석을 통해 지정된 값을 기준으로 테스트 메서드를 숫자로 정렬 합니다 [@Order](<https://junit.org/junit5/docs/current/api/org.junit.jupiter.api/org/junit/jupiter/api/Order.html>).
- [Random](<https://junit.org/junit5/docs/current/api/org.junit.jupiter.api/org/junit/jupiter/api/MethodOrderer.Random.html>): 테스트 메서드를 의사 무작위로 정렬 하고 사용자 지정 시드 구성을 지원합니다 .
- [Alphanumeric](<https://junit.org/junit5/docs/current/api/org.junit.jupiter.api/org/junit/jupiter/api/MethodOrderer.Alphanumeric.html>): 이름 및 형식 매개 변수 목록에 따라 테스트 메소드를 영숫자 순 으로 정렬 합니다.
참조:https://junit.org/junit5/docs/current/user-guide/#writing-tests-test-execution-order
저는 왠지 orderAnnotation이 사용할 일이 더 많다고 생각해서 이걸로 예시를 보이겠습니다.
@Order(number)에 지정한 순서대로 테스트 실행이된 것을 확인했습니다.
live-study 대시 보드
github연결이 안되서 될 때까지 해보고 되면 올릴 예정,,,
LinkedList
단방향 linked-list로 header가 다음 노드의 값을 가리킨다 그렇기 때문에 다른 오브젝트에서 header의 값을 지워버리면 이후에 오는 값을 잃어버린다.
header가 모든 값을 대표하는게 싫다면 원형 연결리스트로 header가 삭제되도 노드의 연결이 유지하게 하면된다.
Stack
나중에 넣은 data가 먼저 나오는 구조 (LIFO)
stack에 pop,push, 꼭대기 값 , 비었는지 확인하는 함수를 확인해 보았다.
Queue
큐는 먼저 들어온 데이터가 먼저 나가는 선입 선출 구조이다 (FIFO)
큐의 추가, 삭제 , 제일 앞의 있는 값을 확인, 큐가 비었는지 확인 하는 함수들로 값을 확인해 보았다.
Linked-list Stack
위에 구현한 링크드 리스트에서 delete함수를 pop으로 수정하여 마지막 노드까지 진행 후 해당 노드를 지우는 방식으로 스택을 구성했다.
반응형'JAVA' 카테고리의 다른 글
백기선-JAVA/STUDY/WEEK6 (0) 2021.01.07 백기선-JAVA STUDY/WEEK5 (0) 2020.12.19 백기선-JAVA STUDY/WEEK3 (0) 2020.12.19 백기선-JAVA STUDY/WEEK2 (0) 2020.12.19 백기선-JAVA STUDY/WEEK1 (0) 2020.12.19 댓글