Java

4주차 과제: 제어문(feedback, 피드백)

향찡 2020. 12. 22. 23:26

(백기선 라이브 스터디)

 

💡 스터디 방식 변경

기간이 지나도 댓글을 달 수 있도록 변경, 즉 스터디 참여할 수 있도록 변경 (리뷰 x)

 

+ 코드를 자연스럽게 흘러가면서 읽을 수 있도록 짜는 것이 좋다.

+ 메소드로 따로 빼서 메소드이름으로 더욱 읽기 쉽도록 짜는 것이 좋다.

 

🔑 live-study 대시 보드 gist

gist.github.com/whiteship/5f0d9f800c0cfb7867c59cfc4fd6d5a7

 

App.java

GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

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구현