[자바 라이브 스터디] 4주차 - 제어문1. 선택문(1) if문(2) switch문2. 반복문(1) for문(2) while문(3) do-while문3. XUnit 테스팅 Framework 만들기4. JUnit 5 학습하세요.5. live-study 대시 보드를 만들기6. Stack을 구현하세요.
[자바 라이브 스터디] 4주차 - 제어문
- 목표) 자바가 제공하는 제어문을 학습합니다.
- 선택문, 제어문은 공식 문서 보고 키워드 사용법 제대로 이해하고 새롭게 업데이트 된 부분 공부하는 데에 초점 맞추기
4주차 과제: 제어문
1. 선택문
(1) if문
- 정의)
- 특징)
- 중첩 가능
(2) switch문
- 정의)
- 특징)
- 중첩 가능
- 제약조건
- 조건식 결과는 정수 또는 문자열이어야 함
- case문의 값은 정수 상수만 가능하며, 중복되지 않아야 함
- 새로운 switch문(Java SE 12 switch expressions)
yield: case의 결과로 반환하고 싶은 값이 있을 경우, yield를 사용하면 됨->::대신 사용할 수 있음- 예시)
- 기존
- arrow 사용
- yield문을 사용하여 정수값을 반환
2. 반복문
(1) for문
- 정의)
- 특징)
- 중첩 가능
- 향상된 for문
- forEach 메서드
(2) while문
- 정의)
(3) do-while문
- 정의)
3. XUnit 테스팅 Framework 만들기
- 정의) 자바만 단위 테스팅 프레임 워크인 JUnit만 있는게 아니다. 다른 언어도 단위 테스트를 위한 프레임워크가 존재하며 보통 이름을 xUnit이라 칭한다.
xUnit이름 | 해당 언어 | 관련 사이트 |
JUnit | Java | |
CUnit | C | |
CppUnit | C++ | |
PHPUnit | PHp | |
PyUnit | Python |
- 결과물 예시)
4. JUnit 5 학습하세요.
- 구성)
- JUnit 플랫폼 : 테스팅 프레임워크를 구동하기 위한 런처와 테스트 엔진을 위한 API 제공
- JUnit 주피터 : Junit5를 위한 테스트 API와 실행 엔진 제공
- JUnit qlsxlwl : JUnit 3과 4로 작성된 테스트를 JUnit5 플랫폼에서 실행하기 위한 모듈 제공
- 기본 구조)
- 주요 단언 메서드)
메서드 | 설명 |
assertEquals(expected, actual) | actual과 expected가 같은지 확인 |
assertNotEquals(unexpected, actual) | actual과 unexpected가 같은지 확인 |
assertSame(Object expected, Object actual) | 두 객체가 동일한 객체인지 검사 |
assertNotSame(Object unexpected, Object actual) | 두 객체가 동일하지 않은 객체인지 검사 |
assertTrue(boolean condition) | 값이 true인지 검사 |
assertFalse(boolean condition) | 값이 false인지 검사 |
assertNull(Object actual) | 값이 null인지 검사 |
assertNotNull(Object actual) | 값이 null이 아닌지 검사 |
fail() | 테스트를 실패 처리 |
참고
테스트 주도 개발 시작하기 / 최범균
5. live-study 대시 보드를 만들기
live-study 대시 보드 Requirements https://github.com/whiteship/live-study/issues
- 깃헙 이슈 1번부터 18번까지 댓글을 순회하며 댓글을 남긴 사용자를 체크 할 것.
- 참여율을 계산. 총 18회에 중에 몇 %를 참여했는지 소숫점 두자리까지 보여줄 것.
- Github 자바 라이브러리를 사용하면 좋음.
- GitHub API란
- 정의) GitHub가 제공하는 다양한 정보와 기능을 개발자의 응용 프로그램에서 사용할 수 있도록 제공하는 GitHub의 인터페이스
- 특징) 해당 라이브러리에는
GHUser(깃허브유저),GHRepository(깃허브리포지토리)GHOrganization(깃허브그룹)등 깃허브에서 사용되는 각각의 도메인 모델들을 제어하기 위한 클래스가 존재하며, 각 클래스의 메서드를 통해서 깃허브 사이트에서 사용할 수 있는 다양한 기능을 프로그램 내에서 사용할 수 있다.
- 구현 과정
- build.gradle에 아래 코드 추가
- 토큰 발급 & 저장
- 깃허브 접속을 위한 아래와 같은 방법들이 있는데 나는 두 번째 방법 사용함
- Personal Access Token 발급받기
- 환경변수로 토큰 저장
- IntelliJ에서 환경 변수 설정
- 화면 오른쪽 상단에 뜨는 현재 실행할 클래스 이름을 오른쪽 클릭해서 구성 편집 선택
- 환경변수 오른쪽 끝에 네모 박스 클릭
- 사용자 환경변수에 + 아이콘 클릭해서 토큰값 저장
Stringtoken= System.getenv("token");처럼 사용할 수 있음- 메인 코드
- 결과





리팩토링 1) 병렬 처리, 증분 연산 통해 실행 시간 2m44s에서 24s로 감소
- userMap을 ConcurrentHashMap으로 변경하여 동시성 문제를 방지
- issues 리스트를 병렬 스트림으로 변환하여 병렬 처리하도록 수정
- issue.getComments()를 issue.listComments().toList()로 변경하여 한 번에 여러 코멘트를 가져오게 수정
- userMap.put() 대신 userMap.compute()를 사용하여 증분 연산을 수행
참고
6. Stack을 구현하세요.
- int 배열을 사용해서 정수를 저장하는 Stack을 구현하세요.
- void push(int data)를 구현하세요.
- int pop()을 구현하세요.
- 스택
- 정의) 후입선출
- top : 삽입과 삭제가 일어나는 위치
- push : top 위치에 새로운 데이터를 삽입하는 연산
- pop : top 위치에 현재 있는 데이터를 삭제하고 확인하는 연산
- peek : top 위치에 현재 있는 데이터를 단순 확인하는 연산
- 특징)
- 깊이 우선 탐색, 백트래킹 종류에 효과적
- 재귀 함수 알고리즘 원리와 일맥상통
- 코드)

![[백기선 자바] 제어문](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F301eb74c-edaf-492f-9dca-9be8a3bbf75e%2F%25EC%25BA%25A1%25EC%25B2%2598.jpg?table=block&id=66090696-50d1-4fa0-ac83-dd4e63e92dbc&cache=v2)