-
[내일배움캠프] 12월 29일 목요일 TIL 회고록카테고리 없음 2022. 12. 29. 23:44
카카오 디벨로퍼스를 이용해 카카오 아이디로 로그인 기능 구현을 하는 강의를 들으면서 직접 구현을 하는 도중에
코드스니펫으로 복붙 하지 않고 전부 다 키보드로 쳐서 코딩을 했는데 기능 구현 테스트를 할때 로그인을 할려하면
콘솔에 익셉션이 출력되고 내용에는 KOE310이라고 적혀있었는데 카카오 디벨로퍼스 사이트 오류 목록에도 나와있지도 않고
구글링을 해봐도 나와 있지 않아 강의 자료에 적혀있는 코드랑 내가 적은 코드랑 비교를 해봤는데 눈 씻고 찾아봐도 다른 부분이 하나도 없어서 결국 내가 적었던 코드들을 전부 주석처리하고 강의 내용에 있는 코드들을 복붙하고 실행했더니 감쪽같이 사라졌다.
결국 뭐가 문제인지는 찾지 못했다.. 다음에는 더 신중히 봐야겠다.
Spring Test 강의를 들었는데 어렵기도 했고 재밌기도 했다.
강의를 보면서 코드도 일일히 따라 적으면서 느낀점은 몇몇 부분만 다르고 몇몇 부분은 아예 똑같아서 한번 외워버리고 터득해버리면
쉬울 것 같았다. 이것도 내일 시작하는 프로젝트때 필요할 것 같은데.. 열심히 공부해야겠다.
TDD : Test_Driven Development 의 약자로, 테스트 코드를 먼저 작성하고 실제 동작하는 코드를 개발하는 순서로 개발하는 개발 방법론
Given - When - Then Pattern
Given - 준비
When - 실행
Then - 검증
보통 테스트 코드로 JUnit을 많이 사용한다.
Mockito : Java에서 인기있는 Mocking framework이다. Mockito로 객체를 mocking 하여 Unit Test를 작성할 수 있다.
직접 Mock 객체를 만들 수 있지만 Mockito와 같은 Mocking framework를 사용하면 번거로운 코드를 작성하지 않아도 된다.
의존성 설정
build.gradle에서 다음과 같은 의존성을 설정하면 JUnit과 Mockito 라이브러리를 사용할 수 있다.
dependencies { testImplementation 'org.mockito:mockito-core:4.8.0' testImplementation 'org.mockito:mockito-junit-jupiter:4.8.0' }
강의에서 나온 코드
class ProductServiceTest { @Mock // (1) ProductRepository productRepository; @InjectMocks // (2) ProductService productService; @Mock User user;
(1)번에서 ProductService를 테스트 하려면 Product와 이어져있는 ProductRepository도 필요해서 @Mock 어노테이션을 사용한다.
@Mock으로 만든 객체는 가짜 객체이다.
(2)번에서 @InjectMocks는 @Mock 이 붙은 객체를 @InjectMocks이 붙은 객체에 주입 시킬 수 있다.
Product를 넣을 때는 User(userId)가 필요하기 때문에 @Mockd으로 가짜 객체인 User를 만든다.
후발대 강의에서 메소드 문법을 배웠다.
보통 이렇게 쓴다고 배웠다. 많이 봤기도 했다.
public 반환타입 메소드명(파라미터) { 실행코드 return }
예제도 배웠다. 어떻게 써야할지 모를때 보면 좋을거 같아서 여기에 적어야징
// 파라미터 X, 반환값 X public static void simplePrint() { System.out.println("파라미터도 반환값도 없어요!"); } // 파라미터 O, 반환값 X public static void simpleSum(int num1,int num2) { System.out.println("num1 :" + num1 + ", num2 : " + num2); } // 파라미터 X, 반환값 O public static int simpleReturn() { return 3; } // 파라미터 O, 반환값 O public static int sum(int num1, int num2) { return num1 + num2; }
예제도 배웠다. 어떻게 써야할지 모를때 보면 좋을거 같아서 여기에 적어야징
퀴즈도 몇개 풀었다.
퀴즈 1. 가로,세로를 스캐너로 입력받아서 직사각형의 넓이 구하는 코드 만들기
먼저 처음에 배운 메소드 문법을 이용해서 정수 num1, num2 를 받는 f1을 만들고 num1과 num2를 곱한 갑을 리턴시켰다.
public static int f1(int num1, int num2){ return num1 * num2; }
그리고 void main에 입력받을 스캐너를 만들고 가로로 입력 받을 값을 n1에 넣고 세로로 입력 받을 값을 n2에 넣었다.
그리고 아까 만든 f1을 이용해서 n1과 n2를 f1에 넣은 뒤 n3에 넣고 println으로 출력시켰다.
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("가로를 입력 해 주세요 : "); int n1 = scanner.nextInt(); System.out.println("세로를 입력 해 주세요 : "); int n2 = scanner.nextInt(); int n3 = f1(n1,n2); System.out.println("직사각형의 넓이는 : " + n3 + " 입니다."); System.out.println();
인터넷이 메롱이라서 사진이 안올라간다..ㅠㅠ 실행은 잘 된다..
퀴즈 2 ) 실수를 하나 받아서 절대값을 구하기
튜터님은 이렇게 푸셨고
public static double f2(double num1) { if (num1 < 0.0) { num1 *= (-1.0); } return num1; }
나는 Math.abs 함수를 이용해서 풀었다.
알고리즘을 풀때 유용하게 사용했어서 기억이 났다. 이렇게 푸니까 훨씬 더 보기 편해졌다. 이게 정답인가는 잘 모르겠다..ㅋㅋㅋ
public static double f2(double num1) { return Math.abs(num1); }
이것도 역시 스캐너를 이용해서 입력받은 실수를 double 타입 n4에 저장 해 준뒤 double 타입 n5에 f2(n4)를 넣어 준 뒤
println으로 출력시켰다.
System.out.println("실수를 하나 입력 해 주세요 : "); double n4 = scanner.nextDouble(); double n5 = f2(n4); System.out.println("해당 실수의 절대값은 : " + n5 + " 입니다.");
퀴즈 3) 정수를 하나 입력받은 뒤 홀수인지 짝수인지 출력시키기
int num3을 받는 f3을 만든 뒤 if문을 이용해 num3을 2로 나눈 나머지가 0이면 "짝수입니다" 를 리턴시키고 0이 아니면 "홀수입니다"
를 리턴시키게 만들었다.
public static String f3(int num3) { if (num3 % 2 == 0) { return "짝수입니다."; } else { return "홀수입니다"; }
그 다음 스캐너로 정수를 하나 입력 받은 뒤 그 정수를 int n6에 넣은 뒤 String n7에 f3에 n6을 넣은 값을 넣고 println에 출력시켰다.
System.out.println("정수를 하나 입력 해 주세요 : "); int n6 = scanner.nextInt(); String n7 = f3(n6); System.out.println(n7);
후발대 강의 정말 재밌다. 본 강의와는 다르게 진도를 급하게 나가지 않으니 훨씬 마음이 편안해지고 더 재밌는 것 같다.
다음 후발대 강의도 기대가 된다. ㅎㅎㅎㅋㅋㅋ