code 21

int 와 long

코딩 테스트를 하다보면 코드 문법상에는 문제가 없어 보이지만 error 가 나는 경우가 있다. 아래 코드가 그와 같은 경우이다. 숫자로 이루어진 문자열 t와 p 가 주어질 때 … 프로그래머스의 크기가 작은 부분 문자열 문제를 참고하시길 바람 1 ≤ p의 길이 ≤ 18 p의 길이 ≤ t의 길이 ≤ 10,000 t와 p는 숫자로만 이루어진 문자열, 0으로 시작 안함 처음엔 문제를 읽고 전부 int 타입으로 코딩을 해서 제출 했다. → 몇몇 테스트에서 RuntimeError 발생! 이유를 찾는데 한참이 걸렸다… 제한사항의 1번에 p가 1~18까지가 아닌 p의 길이가 18까지 였다. int 는 최대 10자리 까지만 사용이 가능하다.. 따라서 p를 파싱하는 변수는 모두 long 으로 갔어야 한다...

JAVA 2022.12.27

BDD 스타일 Mockito API

BDD는 잘짠 TDD 와 같다. BDD는 말 그대로 행동 주도 개발이다. → 사용자의 행위까지 생각하고 테스트하며 개발한다. 테스크는 Given-When-Then 이라는 양식에 맞춰서 사용한다. 아래는 테스트 코드는 BDD 방식으로 변경한 예시이다. /* Given */ when(memberService.findById(1L)).thenReturn(Optional.of(member)); when(studyRepository.save(study)).thenReturn(study); // when 을 BDD 스타일로 변경하면 given을 사용 given(memberService.findById(1L)).willReturn(Optional.of(member)); given(studyRepository.save..

JAVA 2022.12.26

문자열 내 마음대로 정렬하기

문자를 문자열로 변환하기( string to char[] || string to string[] ) string to char[] → toCharArray() 이용 string to string[] → {문자}.split(””) 이용 for(int i=0; i< strings.length; i++){ // 문자를 문자열로 변환 char[] chr = strings[i].toCharArray(); // 문자열 중 주어진 인덱스 위치에 있는 문자를 다시 string으로 변환 String str = Character.toString(chr[n]); // map에 key값은 중복이 안됨 참조 하고 있기 때문에! // 따라서 for문 안에 선언해주어 계속적으로 초기화한다. Map map = new HashMap(..

CT 2022.08.25

error serializer

json → object로 변환하는과정 (deserialization) object → json로 변환하는과정 (serialization) 객체는 javaBean 스펙을 준수하고 있어서 BeanSerializer로 json으로 변환이 가능하다. but, errors는 그 스펙을 준수하고 있지 않아 json으로 변환하려면 직접 serializer를 생성해줘야한다. 만약 아래처럼 테스트 코드 작성 시 jsonPath에 지정해준 필드를 응답값으로 받고싶다는 것이다.(Errors에서) 하지만 Errors는 json으로 변환이 불가하기 때문에 ErrorSerializer를 생성해준다. this.mockMvc.perform(post("/api/events") .contentType(MediaType.APPLICAT..

JAVA 2022.07.11

testcode 작성 시 description

testcode 작성 시 메소드명만으로는 자세하게 구별할수가 없다. 따라서 설명 및 이름 같은 것을 붙여주어 구분하기 쉽게 한다. junit4 사용 시 : junit4는 설명을 달기 위해서 따로 annotation을 만들어야한다. package me.whiteship.restapi.common; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) // 붙일수 있는 target은 메소드!! @Retention(Retentio..

JAVA 2022.07.11

String vs StringBuffer vs StringBuilder

String : 문자열 연산이 적고 멀티쓰레드 환경일때 (문자의 변동이 적을때 - 불변성) String의 예시로 아래 코드를 살펴보자. (hello로 선언한 값을 hello world로 바꿔주는 예) 기존에 hello라는 값을 가지고 있던 memory영역이 있고 hello world는 새로운 영역에 할당된다. 그렇다면 처음에 할당된 hello가 담겨있는 메모리 영역은 Garbage로 남아있다가 GC(Garbage Collection)에 의해 사라지게된다. String 클래스는 불변하기 때문에 기존의 memory영역이 수정되지 않고 새로운 영역이 생성되는것 String str = new String("hello"); str = str + " world"; 만약 문자열 추가, 수정, 삭제 등의 연산이 많은 ..

JAVA 2022.07.05

[JAVA] API 구현 시 테스트 개발

@WebMvcTest MockMvc 빈을 자동 설정 해준다. 그냥 가져와서 쓰면 됨. 웹 관련 빈만 등록해준다. @MockMvc 스프링 MVC 테스트 핵심 클래스 웹 서버를 띄우지 않고도 요청을 처리하는 과정을 확인가능 → 컨트롤러 테스트용으로 자주 쓰임 테스트 내용 1. 입력값들을 전달하면 JSON 응답으로 201 값이 나오는지 확인 - Location 헤더에 생성된 이벤트를 조회할 수 있는 URI 담겨있는지 확인 - id는 DB에 들어갈 때 자동 생성된 값으로 나오는지 확인 @RestController @ResponseBody를 모든 메소드에 적용한 것과 동일 ResponseEntity를 사용하는 이유 응답코드, 헤더, 본문, 모두 다루기 편한 API Locatio..

JAVA 2022.06.02

폰켓몬

N 마리의 폰켓몬이 있으면 최대 N/2 마리를 데려갈수 있다. 이때 N마리중 중복이 포함되어있을수 있고 이때 가장 많은 종류의 폰켓몬을 데려갈 수있는 경우의 수를 반환하라. 어차피 중복되는 경우의 수는 빠져야하니까 배열의 중복을 없애야겠다고 생각했다. 또한 중복을 없애고 난 후의 배열의 크기가 최대 경우의 수와 같다고 생각했다. 주어진 N을 2로 나눈값의 갯수의 포켓몬만 데려갈수있다는 점에서 중복을 제거한 배열의 값의 사이즈 > N의 크기/2 의 값 이 되면 N의 크기/2가 최대 경우의 수라고 생각했다. import java.util.HashSet; import java.util.ArrayList; class Solution { public int solution(int[] nums) { int answ..

CT 2022.05.26