일단 씻고 나가자
23.03.09 본문
2023. 03. 09 목요일
- 별 찍기 다중 for문의 핵심 논리?
: 바깥 for문의 I, 안쪽 for문의 j, 전체 줄 수의 n의 관계가 중요하다.
I를 ++로 뒀다면 j는 점점 늘어나는 문자열에 대해선 I를 이용, 점점 줄어드는 문자열에 대해선 –i를 이용해야 한다. (단순히 등차라면 +, 등비라면 *)
이때 총 개수를 의미하는 n에 대해서도 적절히 사용해야 하는데, 특히 줄어드는 값에 대해서 “몇부터 시작해서 줄어들 것인가”의 몇에 해당하는 부분을 n으로 채워주자.
행(i) 관련하여 문자열이 증가하는가 감소하는가? -> 각 문자열의 초깃값은 무엇인가?
이해가 안 되면 그냥 숫자를 써놓고 문자로 치환하자.
ex) I는 증가하는 값. j=0이고 j++이라면 결국 j<k k에 들어갈 값을 계산하면 되는 건데,
만약 증가하는 문자열이라면 I가 증가하는 값이기 때문에 j<i 적어놓고, 우변의 I가 초항과 일치하는지만 계산. 감소하는 문자열이라면 I가 증가하는 값이기 때문에 j<i 적어놓고 우변의 초항과 일치하는지만 계산. 이때 전체 줄인 n과 연관이 있다면 우항에 n을 추가해서 적음.
- [Java] 스트림을 컬렉션으로 바꾸는 함수?
: .stream().collect(Collectors.toSet/List/Map());
- [Java] String의 한 글자씩 배열에 나누는 방법과 합치는 방법?
: String.split(“”); / String.join(“”, List/pString[]);
- 테스트 케이스를 사용하는 이유? 스프링에서 테스트를 작성하는 공간과 방법? 주의점?
: 매번 main이나 컨트롤러에서 실행하면 시간이 오래 걸리고, 반복이 어렵고, 여러 테스트를 한번에 실행하기 어렵다. (테스트를 먼저 작성하는 경우도 있다. = 테스트 주도 개발 TDD)
스프링에선 test 폴더가 따로 있으며, test.java 하위 폴더에 같은 이름의 패키지를 만들고 같은 이름의 함수를 만들어 실행시켜보면 된다. 어노테이션은 클래스명 위에 @Test를 쓰며, System.out.print로 콘솔에서 확인해 볼 수도 있지만, 실무에선 보통 JUnit에서 제공하는 Assertions.assertEquals(expect, actual)를 이용한다.
(asserttj에서 제공하는 assertThat(expect).isEqualTo(result)를 이용하기도 한다.)
통과했다면 하단 콘솔창에서도 녹색 체크 표시가 뜨며, 알람으로도 알려준다.
클래스 전체로도 실행 가능하며, 메소드단위로도 실행 가능하다.
단, 테스트를 클래스 단위로 할 경우 메서드 순서가 랜덤으로 지정되면서 서로 다른 메서드에서 만든 객체들의 중복 때문에 에러가 날 수가 있는데, 이럴 때를 대비해 @AfterEach로 따로 메서드를 만들어 매 실행마다 불러오는 콜백메서드를 만들어주어야 한다. (공용 데이터를 지워주는) 따라서 테스트할 원본 클래스에 clearXX() 같은 저장소를 지워주는 함수를 만들어주고, 테스트의 AfterEach에 해당 함수를 실행하도록 설정하면 됨.
- 왜 git은 commit 말고 add의 기능이 있는가?
: 선택적인 commit을 위해서. 우리는 대부분의 경우 바로 commit을 하지 못하고 한번에 여러 파일을 commit 해야 할 경우가 있을 텐데, 그때 add된 파일들만 (git status에서 초록색 글씨로 modified라 적혀 있음.) commit 할 수가 있다. 즉, add는 commit의 대기 상태로 들어간다. commit은 대기 상태의 파일들을 저장하는 것이며, 이것들은 stage area라고 한다. stage에는 대기 파일들이 올라가며, 실제 올라간 파일들이 있는 곳을 repository라 한다.
예전의 VCS들은 바뀐 모든 것들을 한 번에 commit 해야 했지만, git의 add는 그런 의미에서 혁신을 불러온 기능이라 할 수 있다.