목록IT/Java (12)
꾸준히 기록하자
Java의 java.util.Arrays 클래스는 배열을 다루기 위한 다양한 유틸리티 메서드를 제공합니다. 그 중에서 배열을 복사하는 데 자주 사용되는 copyOf()와 copyOfRange() 메서드를 소개하겠습니다. 1. copyOf() : 새로운 배열을 만들고 복사할 배열의 요소를 새배열에 복사.import java.util.Arrays;public class Main { public static void main(String[] args) { int[] orgArray = {1, 2, 3, 4, 5}; // orgArray의 복사 int[] copyArray = Arrays.copyOf(orgArray, orgArray.length); Sys..
Optional 클래스는 Java8부터 지원하고 조건문 없이도 Optional에서 제공되는 메서드로 NPE 예외를 처리할 수 있지만 클래스를 사용했어도 null 체크를 하지 않으면 NoSuchElementException가 발생할 수 있습니다. * NPE : NullPointerException Optional 클래스는 무분별하게 사용하는 것보다 라이브러리 반환 타입인 경우에만 사용하시는 게 좋을 것 같습니다.. 1. isPresent() - Optional 객체에 저장된 값이 null 인지 아닌지 확인 메서드 더보기 If a value is present, returns true, otherwise false. Returns: true if a value is present, otherwise fals..
먼저 compareTo를 설정하기 전에 저는 해당 기간 동안에만 기존 기능 외 추가적인 기능도 실행되도록 코드를 작성해야 했었습니다. 그래서 날짜를 비교하는 메서드를 찾다 보니 compareTo() 메서드를 알게 되어 글을 쓰게 되었습니다. compareTo()는 Date, Integer, String Type에 두 개의 값을 비교하여 int 값으로 반환하는 메서드입니다. Date , Integertype을 비교했을 때에는 기준값 보다 비교 값이 크면 1, 작으면 -1, 같으면 0을 반환하고 String type은 같으면 0 그 외 양수 음수 값을 반환합니다. String type을 제외한 Date, Integer type에 대해 간략하게 알아보도록 하겠습니다. 아래 코드 블록은 Date.java에 있는..
SmartEditor를 사용하여 DB에 저장한 데이터를 엑셀로 다운로드했을 때 HTML 태그와 엔티티 문자들이 포함되어 출력되었습니다. 이를 제거하기 위한 작업을 아래와 같은 방법으로 진행하였습니다. 아파치에서 제공하는 StringEscapeUtils와 정규식을 사용해서 문제를 해결했습니다. 아래는 코드블록은 예제코드입니다. String content = "테스트 케이스"; System.out.println("결과 : " + removeHtmlTags(content)); // 결과 : 테스트 케이스 public String removeHtmlTags(String value) { String rtnVal = StringEscapeUtils.unescapeHtml4(..
정규 표현식(Regular expression)은 데이터 중에 원하는 조건과 일치하는 데이터를 찾아내기 위해 사용하는 것입니다. 자사 설루션(solution) 리팩토링 할 때 기존에는 DBMS별 정규식으로 분석하고 DBMS별로 표현식을 관리했었습니다. 신규로 추가해야 하는 DBMS 중 정규식 함수가 없어서 Java 정규식을 사용해 관리를 해야 했었습니다. 문제점으로 DBMS별로 정규식과 패턴에 결괏값이 조금씩 상이했고 패턴들을 관리하기 어려운 점이 있었습니다. 여러 가지로 고려했을 때 공통적인 결괏값, 패턴 관리를 효율적으로 하기 위해 Java 정규식을 사용하는 게 제일 좋다고 생각했습니다. 속도를 비교하기 위해 10만 건 동일한 데이터와 패턴으로 DBMS별로 속도 테스트를 했을 때 자바정규식과 큰 속도..
Call by Value(Pass by Value)와 Call by Reference(Pass by Reference)에 대해 알아보겠습니다. Java의 메서드 호출 방식은 Call by Value이지만 인자 값이 원시 또는 참조 자료형에 따라 부르는 명칭만 다른 거 같습니다. Call by Value는 메서드 안에서 인자 값을(원시 자료형) 변경해도 인수 값은 변경되지 않습니다. Call by Reference는 객체의 주소값을(참조 자료형) 넘겨주기 때문에 객체 변수의 값을 변경할 수 있습니다. 아래 코드블록은 Call by Value 예제입니다. * 인자 값은 변경이 되지만 인수값은 변경되지 않는 걸 확인할 수 있습니다. public static void main(String[] args) { in..
PMD는 기본으로 제공하는 규칙 세트로 프로젝트 전체 코드를 스캔해 문제가 될 수 있는 코드를 찾아주는 도구 말하자면 나쁜 코딩을 보고하는 정적 소스 코드 분석 도구입니다. 참고로 규칙 세트는 사용자가 만들 수도 있습니다. PMD에서 기본으로 제공하는 규칙 세트를 가지고 check code 하여 알아낸 정보를 공유하고자 합니다. 참고로 기본적으로 알아두면 좋을 거 같은 내용으로 작성했습니다. 1. 매개 변수 재할당 방지 AvoidReassigningParameters: Avoid reassigning parameters such as 'name' 아래 예제 코드블록과 같이 매개 변수인 name의 값을 변경해 받은 메시지입니다. public static void main(String[] args) { St..
먼저 distinct()를 설명하기 전에 저는 중복된 값이 포함될 수 있는 List에 중복이 있는지 확인하고 있으면 중복된 값을 반환해줘야 하는 코드를 작성해야 했었습니다. 그래서 어떤 식으로 코드를 작성할까 방법 찾다 보니 stream()에서 제공하는 distinct() 메서드를 알게 되어서 글을 쓰게 되었습니다. distinct() 외 다른 방법으로도 코드를 작성할 수 있겠지만 저는 distinct()를 사용하여 작성하는 게 간결할 거 같았습니다. 코드 블록에 작성했었던 예제 코드를 구현해보겠습니다. List list = new ArrayList(); list.add("짱구"); list.add("짱구"); list.add("철수"); list.add("철수"); list.add("맹구"); list..