목표
자바가 제공하는 제어문을 학습하세요.
과제 (옵션) - 나중에 다시 올리도록 하겠습니다.
과제 0. JUnit 5 학습하세요
2020 if카카오의 가장 기억에 남는 세션 (junit5에 대해 / kotest가 있다면 TDD 묻고 BDD로가) 중에 하나가 떠올랐다.
junit5를 더 사용하기 편하려면 단언과 관련도 Assertj도 학습해 보기로 하자.
joel-costigliola.github.io/assertj/assertj-core-converting-junit5-assertions-to-assertj.html
과제 1. live-study 대시 보드를 만드는 코드를 작성하세요.
과제 2. LinkedList를 구현하세요.
(생활코딩 LinkedList 구현 강의 참고)
opentutorials.org/module/1335/8857#entirecode
과제 3. Stack을 구현하세요.
과제 4. 앞서 만든 ListNode를 사용해서 Stack을 구현하세요.
과제 5. Queue를 구현하세요.
학습할 것 (필수)
- 선택문
- 반복문
1. 선택문 (switch case 문)
if문으로 표현되어지는 복잡한 경우를 switch문이 해결 가능하다.
if문의 특성상 조건식의 결과가 true false밖에 표현되지 않기 때문에 많은 조건들이 계속 추가되면 코드 역시 else if가 계속 추가되므로 가독성이 떨어지게 된다. switch문은 switch문의 변수값에 따라 실행코드를 결정하기 때문에 좀 더 코드가 간결해진다.
nextstep) "소트웍스 앤솔러지" 책에서의 객체지향 생활 체조 원칙 위배
- 규칙 1: 한 메서드에 오직 한 단계의 들여 쓰기만 한다.
- 규칙 2: else 예약어를 쓰지 않는다.
switch문의 기본 동작은 우선 swtich문의 괄호 안의 변수값과 동일한 case가 있는 값의 실행문을 실행시키는 것이다.
만약 괄호 안의 변수값을 갖는 case문이 없다면 default로 가서 실행을 한다.(default는 생략 가능)
주의할 점은 case문의 끝에 break가 있는데 이는 다음 case를 실행하지 않고 switch를 빠져나가기 위함이다.
break를 쓰지 않는 다면 case가 매칭 된 실행문을 실행 후 그 아래 case를 연달아 실행하게 된다.
가장 기본적인 예제이다. 실행 결과는 BC이다.
public class switchExam {
public static void main(String[] args) {
char grade = 'B';
switch (grade) {
case 'A' :
System.out.println("A");
break;
case 'B' :
System.out.print("B");
case 'C' :
System.out.println("C");
break;
case 'D' :
System.out.println("D");
break;
}
}
}
자바 6까지는 switch문의 괄호에는 정수 타입 byte, char, short, int long변수나 정수 값을 산출하는 연산식만 올 수 있었지만 자바 7부터는 String타입의 변수도 올 수 있다. 이외에도 Enum과 Wrapper가 올 수 있다고 한다.
2. 반복문
for문
// 구조
for (statement 1; statement 2; statement 3) {
// code block to be executed
}
statement1은 코드 블록이 실행될 때 onetime 실행되는 코드 블록이다.
statement 2는 정의 코드에 대한 조건 코드 블록이다. false일 때 루프가 종료된다.
statement3는 everytime 실행되는 코드 블록이 실행되는 동안 실행된다.
www.w3schools.com/java/java_for_loop.asp
forEach문
// 구조
for (type variableName : arrayName) {
// code block to be executed
}
forEach와 Stream.forEach비교
// Old school
for (Integer i : list)
System.out.println(i);
// "Modern"
list.forEach(System.out::println);
성능
Stream.forEach()를 사용하면 전통적인 for-loop를 사용할 때보다 오버헤드가 훨씬 심각하게 발생하기 때문에, 모든 for-loop를 Stream.forEach()로 대체하면, 애플리케이션 전체에 걸쳐 누적되는 CPU 싸이클 낭비는 무시하지 못할 수준이 될 수 있다. 단순히 반복문 처리 스타일의 선택만으로 CPU 소모량이 10%~20% 정도 더 많아진다면, 그 선택은 근본적으로 잘못된 것이다. 반복문 각각을 놓고 보면 큰 차이가 없지만, 시스템 전체로 보면 피하는 것이 좋다.
Reference
while문
조건식이 true이면 무한 loop
do-while문
조건 식이 만족하지 않아도 무조건 한 번은 실행하는 구문
do-while문으로 작성할 수 있는 코드는 모두 while문으로도 작설 할 수 있다.
continue문은 : for문, while문, do-while문에서만 사용된다.
'Java' 카테고리의 다른 글
5주차 과제: 클래스(피드백, feedback) (0) | 2020.12.20 |
---|---|
5주차 과제: 클래스 (0) | 2020.12.14 |
3주차 과제: 연산자(feedback, 피드백) (0) | 2020.11.29 |
3주차 과제: 연산자 (0) | 2020.11.26 |
2주차 과제: 자바 데이터 타입, 변수 그리고 배열(피드백, feedback) (0) | 2020.11.22 |