목표
- 자바가 제공하는 제어문을 학습하세요.
학습할 것 (필수)
- 선택문
- 반복문
선택문
- if/else 문
- if 문에 들어가는 조건식이 참인 경우에 if문 내의 블록 코드를 실행한다.
- 만약 조건식이 거짓인 경위 else if 문의 조건을 실행하며, 모든 조건이 거짓인 경우 else 문의 코드를 실행한다.
- 또한, if문 안에 if 문을 사용할 수 있다. 이를 중첩 if문이라고 한다.
if(a < 5) { System.out.println("a가 5보다 작은 경우"); } else if(a > 5) { System.out.println("a가 5보다 큰 경우"); } else { System.out.println("a가 5인 경우"); }
- switch/case 문
- 여러 개의 if문은 가독성 및 조건 탐색을 해야하는 단점이 있다.
- switch문은 switch의 매개변수에 맞는 조건에 따라 case 문을 실행하여 다중 if문의 단점을 개선한 선택문이다.
- 각각의 case문에 break 키워드를 사용하지 않으면 switch문을 탈출하지 않으므로 다음 case문도 실행하기 때문에 주의해야 한다.
int a = 3; switch(a) { case 1 : System.out.println("a가 1입니다."); break; case 2 : System.out.println("a가 2입니다."); break; case 3 : System.out.println("a가 3입니다."); break; default : System.out.println("a가 그 외의 값입니다."); }
- Java 12부터 switch/case 문에 기능이 확장되었다.
- https://devhtak.github.io/java%20study/2021/01/11/StudyHalle_Week03.html
반복문
- for문(초기화;조건문;증감식)
- 초기화한 값을 가지고 조건문을 검사해 초기화한 값을 증감식의 조건에 따라 증감해가면서 for문 내부의 코드를 반복하는 구문이다.
for(int i = 0; i < 10; i++) { System.out.println("for문 실행 - 횟수: " + (i+1)); } // 0부터 9까지 총 10회 실행
- 초기화한 값을 가지고 조건문을 검사해 초기화한 값을 증감식의 조건에 따라 증감해가면서 for문 내부의 코드를 반복하는 구문이다.
- for-each 문(향상된 for문)
- for문과 동일하게 for를 사용하지만 구조가 for문보다 직관적이고, 반복할 객체를 하나씩 차례대로 가져와 사용하는 구조이다.
for(int num : list) { System.out.println(num); }
- for문과 동일하게 for를 사용하지만 구조가 for문보다 직관적이고, 반복할 객체를 하나씩 차례대로 가져와 사용하는 구조이다.
- while문(조건)
- while문은 조건의 값이 참인 경우에는 계속 반복하는 구문이다.
- 조건이 항상 참인 경우 무한루프에 빠질 가능성이 있기 때문에 유한적인 조건을 주거나 내부 탈출 조건을 주어야 한다.
int i = 0; while(i < 10) { i++; System.out.println("while문 실행 - 횟수: " + i); }
- do-while문(하단 조건)
- do-while문은 do의 구문을 먼저 실행한 후 마지막에 조건을 확인함으로써 실행 후 조건확인이라는 순서의 차이가 있다.
int i = 0; do { i++; System.out.println("do-while문 실행 - 횟수: " + i); } while(i < 10);
- do-while문은 do의 구문을 먼저 실행한 후 마지막에 조건을 확인함으로써 실행 후 조건확인이라는 순서의 차이가 있다.
- Iterator
- Iterator는 Java의 Collection에 저장되어 있는 데이터를 읽어오는 방법을 표준화한 기술 중 하나다.
- hasNext(), next(), remove() 등의 메소드를 이용해 데이터를 뽑아와 사용할 수 있다.
Set<String> set = new HashSet<>(); set.add("A"); set.add("B"); set.add("C"); Iterator<String> it = set.iterator(); while(it.hasNext()) { System.out.println(it.next()); // 요소 출력 후 다음 요소로 it.remove(); // 요소 삭제 }
과제 0. JUnit 5 학습하세요.
- 2월 중 TDD 실전법과 도구, 백기선님 강좌로 학습 예정
과제 1. github whiteship/live-study 대시 보드를 만드는 코드를 작성하세요.
@Component
public class GithubIssueCommentDashboard {
@Value("${id}") private String id;
@Value("${password}") private String password;
@Value("${repo}") private String repo;
public void show() throws IOException {
GitHub github = new GitHubBuilder().withPassword(id, password).build();
GHRepository repository = github.getRepository(repo);
List<GHIssue> issues = repository.getIssues(GHIssueState.ALL);
Map<String, Integer> dashboard = new HashMap<>();
int size = issues.size();
// 이슈에 대한 댓글 확인하여 계산
for(GHIssue issue: issues) {
List<GHIssueComment> comments = issue.getComments();
for(GHIssueComment comment: comments) {
String githubId = comment.getUser().getLogin();
if(dashboard.containsKey(githubId)) {
int count = dashboard.get(githubId) + 1;
dashboard.put(githubId, count);
} else {
dashboard.put(githubId, 1);
}
}
}
// 출력
for(String key: dashboard.keySet()) {
System.out.println("LoginId: " + key +", 완료율: " + String.format("%.2f", dashboard.get(key) / size));
}
}
}