(백기선 라이브 스터디)
💡 스터디 방식 변경
기간이 지나도 댓글을 달 수 있도록 변경, 즉 스터디 참여할 수 있도록 변경 (리뷰 x)
+ 코드를 자연스럽게 흘러가면서 읽을 수 있도록 짜는 것이 좋다.
+ 메소드로 따로 빼서 메소드이름으로 더욱 읽기 쉽도록 짜는 것이 좋다.
🔑 live-study 대시 보드 gist
gist.github.com/whiteship/5f0d9f800c0cfb7867c59cfc4fd6d5a7
octotree - github plugin, chrome web store에서 다운 가능
큐
- offer와 add
- poll과 remove
- element와 peek
import java.util.LinkedList;
import java.util.Queue;
public class QueueSample {
public static void main(String[] args) {
// 링크드리스트를 큐로 사용 할 수있다.
Queue<Integer> queue = new LinkedList<>();
// offer와 add의 차이는?
queue.offer(1); // 못들어 갈 경우 false
queue.add(1); // 못들어 갈 경우 예외를 던진다.
// poll과 remove 차이는?
queue.poll(); // 아무것도 없으면 null
queue.remove(); // 아무것도 없으면 예외를 던진다.
// qeek와 element 차이는? - 맨위에 값이 뭔지 보기만 하는것
queue.element(); // 아무것도 없으면 에러
queue.peek(); // 아무것도 없으면 null
}
}
무엇을 사용하던지 구현을 할 때 일관성(consistency) 있게 사용하자.
테스트 케이스 인스턴스 상태 값 유지하기
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
테스트 케이스 실행 순서 정하기
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
package choi.hyang.study.chapter4;
import org.junit.jupiter.api.*;
@TestInstance(TestInstance.Lifecycle.PER_CLASS) // 인스턴스 상태를 유지하기 붙인 어노테이션
@TestMethodOrder(MethodOrderer.OrderAnnotation.class) // 테스트 케이스의 순서를 정하기 위해 붙인 어노테이션
public class StatefulTest {
private int number;
@Test @Order(2)
void test1() {
System.out.println(number++); // 0이다.
}
@Test @Order(1)
void test2() {
System.out.println(number++); // 0이다. -> @TestInstance를 붙이면 1
}
}
반복문(for, while) 없이 반복문처럼 사용하는 방법은? => 재귀를 이용
자바는 꼬리 재귀를 지원하지 않는다.
package choi.hyang.study.chapter4.QueueSample;
public class NoLoop {
public static void main(String[] args) {
NoLoop noLoop = new NoLoop();
System.out.println(noLoop.factorial(0)); // 1
System.out.println(noLoop.factorial(1)); // 1
System.out.println(noLoop.factorial(2)); // 2
System.out.println(noLoop.factorial(3)); // 6
System.out.println(noLoop.factorial(4)); // 24
}
private int factorial(int number) {
if(number < 2) {
return 1;
}
return number * factorial(number-1);
}
// TODO 시간 복잡도 O(N)
// TODO 공간 복잡도 O(N) : 자바는 꼬리재귀 최적화가 되어있지 않아 O(1)이 되지 않는다. (ex : factorial(4)를 호출하기위해 3,2,1을 스택에 쌓는다)
// TODO 꼬리 재귀란? : return맨 마지막에 재귀를 호출하는 경우 자기 자신의 call stack을 재사용하는 것 => 자바는 지원하지 않는다.
}
📖 다음 주 과제
BinarySearchTree 말고 그냥 BinaryTree 클래스를 정의하고 DFS, BFS구현
'Java' 카테고리의 다른 글
6주차 과제: 상속 (feedback, 피드백) (0) | 2020.12.27 |
---|---|
6주차 과제: 상속 (0) | 2020.12.26 |
5주차 과제: 클래스(피드백, feedback) (0) | 2020.12.20 |
5주차 과제: 클래스 (0) | 2020.12.14 |
4주차 과제: 제어문 (0) | 2020.12.12 |