I/O 스트림 - 바이트 단위로 데이터를 전송한다. - 실제의 입력과 출력이 표현된 데이터의 흐름이다. - 운영체제에 의해 생성되는 가상의 연결고리 역할을 수행한다. - 출력과 입력의 중간매개체 역할을 한다. - 스트림을 한 방향으로만 통신이 가능하여 입력과 출력을 동시에 실행할 수 없다. - 사용목적에 따라 입력스트림, 출력스트림을 구분한다. (1) 입출력 스트림 입력: InputStream read() return : int -> 더이상 읽어들일 바이트가 없으면 -1을 반환한다. 출력: OutputSTream write() return: void (2) 바이트 기반 스트림 파일 입력: FileInputStream 출력: FileOutputStream 메모리 입력: ByteArrayInputStream..
Arraylist -> 배열 변환 ArrayList files을 MultipartFile[] multiFIles로 변환해보자. MultipartFile[] multiFiles = new MultipartFile[files.size()]; int size = 0; for (MultipartFile file : files) { multiFiles[size++] = file; }
콤마(,)로 구분된 String을 배열로 변환하기 long[] array; try { array = Arrays.stream(custCorpIdxList.split(",")).mapToLong(Long::parseLong).toArray(); } catch (Exception e) { // error 처리 } String a = "1,2,3,4,5" 결과 : long[] array = [1,2,3,4,5] 여기서, 배열의 타입은 원하는 타입으로 선언하면 된다.
삼항연산자 this.a == 1 ? "a가 1일경우 실행" : "a가 1이 아닐경우 실행"; (1) ? (2) : (3) (1)의 조건이 true이면 (2)를 반환 (1)의 조건이 false이면 (3)을 반환
StringUtils if (StringUtils.isEmpty(test)) { test변수가 빈문자열인지, NULL인지 StringUtils 클래스의 isEmpty 메소드를 통해 검사한다. 해당 isEmpty를 보기위해 StringUtils 클래스 파일을 읽어보았다. /** * Check whether the given object (possibly a {@code String}) is empty. * This is effectively a shortcut for {@code !hasLength(String)}. * This method accepts any Object as an argument, comparing it to * {@code null} and the empty String. As a ..
해당 날짜의 몇 달 후 날짜 구하기 DateTimeFormatter DATE_FORMAT = new DateTimeFormatterBuilder() .appendPattern("uuuu-MM-dd HH:mm:ss") .toFormatter(); LocalDateTime startDateTime = LocalDateTime.parse(startDate, DATE_FORMAT); DateTimeFormatter, LocalDateTime 클래스를 사용한다. startDateTime.getMonth().plus(1) plus 메소드를 사용하여 해당 숫자만큼 더해진 월을 구할 수 있다. (ex, 1월 -> plus(3) -> 4월)
두 날짜 사이의 차이 구하기 (startDate, endDate) DateTimeFormatter DATE_FORMAT = new DateTimeFormatterBuilder() .appendPattern("uuuu-MM-dd HH:mm:ss") .toFormatter(); LocalDateTime startDateTime = LocalDateTime.parse(startDate, DATE_FORMAT); LocalDateTime endDateTime = LocalDateTime.parse(endDate, DATE_FORMAT); log.debug("차이 달: " + startDateTime.until(endDateTime,ChronoUnit.MONTHS)); if (startDateTime.until(..
String, StringBuffer, StringBuild 비교 String, StringBuffer, StringBuild 는 모두 문자열 관련 클래스이다. String은 불변함 (immutable) StringBuffer, StringBuilder는 변함 (mutable) String 객체의 불변함이 무슨뜻인지 알아보자. String test = "a"; CASE1. test += "b"; CASE2. test.concat("b"); 위 간단한 코드에서, test String 객체는 Hip 메모리 영역에 생성된다. 따라서 두번째 코드에서 += 또는 concat 메소드를 사용하였을때 생성되었던 처음 메모리가 아닌, 새로운 메모리를 생성한다. + 연산자, concat 메소드를 통해 새로 생성된 Stri..
정적 팩터리 메서드 클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자 이다. 하지만 한가지 기법이 더 있다. 클래스는 생성자와 별도로 정적 팩터리 메서드 (static factory method)를 제공할 수 있다. 그 클래스의 인스턴스를 반환하는 단순한 정적 메서드 말이다. public static Boolean test(boolean b) { return b ? Bollean.TRUE : Boolean.FALSE; } 클래스는 클라이언트에 public 생성자 대신 정적 팩터리 메서드를 제공할 수 있다. 정적 팩터리 메서드의 장점 1) 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다. 정적 팩터리는 이름을 잘 지으..
@RequestParam 필수값 제거 @RequestParam으로 파라미터를 받을때 값이 들어오지 않으면 에러가 발생한다. 필수값이 아닌경우 null 가능으로 지정해줄 수 있다. (required = false를 추가하자. default는 required = true이기 때문에 명시하지 않으면 필수값이 아닐 경우 에러가 발생한다. Before @RequestParam MultipartFile file After @RequestParam(required = false) MultipartFile file
상황 PathVariable으로 파라미터를 이메일형식 (ID@test.com) 으로 받을 경우 에러가 발생한다. controller에서 RequestMapping 또는 putMapping 등 url을 지정해줄때, 위 처럼 { }안의 파라미터를 사용할 수 있다. 이때 '.' 이 들어갈때 . 뒷부분이 짤려나가는 경우가 있다. 해결방안 @PutMapping("/register/{exam:.+}") public void exam(@PathVariable String exam) { } 예를들어 email이 exam@exam.com 이라고 하면, 위 url은 .../register/exam@exam 이 된다. 하지만 :.+ 을 써주면 모든 이메일이 파라미터로 들어오게 된다.
VO에서 데이터타입이 BigDecimal일때 default값을 지정 Before private BigDecimal deliveryFee; After private BigDecimal deliveryFee = new BigDecimal(0); 이런식으로 new 연산자를 사용하여 default 값을 0으로 지정해줄 수 있다.