본문 바로가기

개발209

자바 ) Generic (제네릭) 이해하기 Generic(제네릭) 이란? 데이터 형식에 의존하지 않고 여러 데이터 타입을 사용할 수 있도록 함. 장점 중복 코드를 제거하여 재사용성을 높임. 제네릭 타입으로 선언된 클래스에서 타입 별로 생성자 및 getter, setter를 만들 필요가 없음 (재사용성 증가) 1. 클래스에서 사용 MyGeneric 클래스 생성 class MyGeneric { T val; public MyGeneric(T val) { this.val = val; } public T getVal() { return val; } public void setVal(T val) { this.val = val; } } MyGeneric string11 = new MyGeneric("11"); //String MyGeneric int11 = .. 2023. 2. 6.
자바 ) requireNonNull (Feat. Optional) requireNonNull Objects.requireNonNull(변수, "메시지"); 해당 변수가 null일 경우에 즉각적으로 NPE가 발생한다. 보통 Fast-fail를 위해 사용한다 (장애 발생 시점을 즉시 파악하기 위함) - > 디버깅 용이 A객체, B객체가 존재한다. 만약 B객체의 생성자 파라미터로 A객체 타입을 선언 String aaa = null; System.out.println(Objects.requireNonNull( aaa, "what")); 함수 내부 public static T requireNonNull(T obj, String message) { if (obj == null) throw new NullPointerException(message); return obj; } 함수.. 2023. 2. 5.
자바 ) List의 내용을 대문자로 변경 후 List로 저장(feat. Stream) List의 내용을 대문자로 변경 후 List로 저장(feat. Stream) 사용할 람다 함수 stream map collect ## 아래 주석과 같이 (이중콜론)을 이용하여 사용 가능 ## List names = Arrays.asList("Sehoon", "Songwoo", "Chan", "Youngsuk", "Dajung"); List names1 = names.stream() .map(name -> name.toUpperCase()).collect(Collectors.toList()); //.map(String::toUpperCase).collect(Collectors.toList()); System.out.println(names); //[Sehoon, Songwoo, Chan, Youngsuk,.. 2023. 2. 4.
enum 타입의 정적 리소스.class 파일 배열 만들기 (일반식, Stream) 코드 리뷰 (Main) 1. enum타입.values() StaticResourceLocation 은 enum 타입이고 values 함수는 enum 클래스가 갖는 모든 상수 값을 배열의 형태로 리턴 (메소드는 X, 오로지 상수만) 2. Stream.of 배열을 스트림화 3. flatMap () 배열을 1차원으로 평면화 시킴 4. toArray(String[]::new) 스트링 배열화 시키기 import java.util.Arrays; import java.util.stream.Stream; class Main { public enum StaticResourceLocation { CSS("/css/**"), JAVA_SCRIPT("/js/**"), IMAGES("/images/**"), WEB_JARS(".. 2023. 2. 3.
Spring ) Assert 사용하기 (if 대용) if문 대신 인수를 검증하고 조건에 맞지 않는 경우, IllegalArgumentException 또는 IllegalStateException 예외를 발생 시킴 문자열 파악하는 예시 (true, false 반환) null을 포함해서 공백만 존재한다면 False를 반환 Assert 적용 전 if문 if(!StringUtils.hasText(user)) { throw new IllegalArgumentException("User가 없습니다."); } Assert 적용 후 import org.springframework.util.Assert; /*------------------------------------------------------------------*/ Assert.hasText(user, "U.. 2023. 2. 2.
자바8) 두 배열에서 중복 값 제거 (feat. Stream.of) 두 배열을 합쳐 1차원으로 생성(flatmap) 후 중복제거(distinct) 하고 배열로 반환(toArray) String[] test1 = {"Sehoon", "Songwoo", "Chan", "Chan", "Dajung"}; String[] test2 = {"Sehoon", "Sehoon", "Chan", "Dajung", "Dajung"}; String[] aa = Stream.of(test1,test2) .flatMap(x -> Arrays.stream(x)) .distinct() .toArray(String[]::new); for (String s : aa) { System.out.println(s); } 2023. 2. 1.
스프링 부트 ) @Slf4j 어노테이션 (feat. lombok) - Simple Logging Facade For Java 의 약자로서 log4j, logback, commons-logging 같은 로깅 프레임워크를 위한 '추상화'를 제공 - 기본적으로 'lombok' 추가 시 사용 가능 의존성 추가 ( 내 기준 Maven ) org.projectlombok lombok true JAVA import lombok.extern.slf4j.Slf4j; @Slf4j public class SampleTest { public static void main(String[] args) { log.debug("Slf4j Test"); } } 2023. 2. 1.
자바스크립트 ) ForEach에서 this 사용하기 ForEach에서 this 사용해보자 잘못된 예시 해당 함수 상위에 있는 전역객체 window 출력 var arrTest = { names: ["aaa", "bbb", "ccc"], thisTestFunc: function () { console.log(this); //names 배열 출력 arrTest.names.forEach(function () { console.log(this); //window 객체 출력 }); }, }; arrTest.thisTestFunc(); 잘된 예시 1. forEach( function( … ){ … }, this ) var arrTest = { names: ["aaa", "bbb", "ccc"], thisTestFunc: function () { console.log(.. 2023. 1. 27.
오라클 DB ) 프로시저로 배열 넘기기 ( IN, FROM 절에 배열 형식으로 사용 - 콤마, 기준으로 구분 ) SELECT TRIM(REGEXP_SUBSTR('ddd,fff,hhh,jjj', '[^,]+', 1, LEVEL)) FROM DUAL CONNECT BY INSTR('ddd,fff,hhh,jjj', ',', 1, LEVEL - 1) > 0; 프로시저 예시 procedure proc_arrTest ( , p_arr in varchar2 -- (배열, ex - 0101,0102,0103,) ) is begin update 테이블명 set 컬럼2 = 'Y' where 1 = 1 and 컬럼1 in ( select 컬럼1 from ( select trim(regexp_substr(p_arr,'[^,]+',1,level) ) as 컬럼1 from dual connect by instr(p_arr,',',1,lev.. 2023. 1. 13.
Rest API 연동 시 Http 상태 코드 400 발생 시 HttpURLConnection 클래스 사용 시에 파라미터 값에 한글이 있어서 발생하는 문제 임으로 아래와 같이 Charset을 "utf-8" 로 지정 후 사용 BufferedWriter bw = new BufferedWriter (new OutputStreamWriter(conn.getOutputStream(), "utf-8")); bw.write(xxxxxxxxx); bw.flush(); bw.close(); BufferedReader br = new BufferedReader (new InputStreamReader(conn.getInputStream(), "utf-8")); 2022. 11. 16.
형상관리 SVN ) 연동방법 (Server - Client) 아래 블로그 참고 https://www.guriland.com/98 2022. 9. 14.
(HTML) 테이블 세로 중앙 정렬 인라인 CSS CSS { vertical-align:middle } 2022. 9. 6.
자바스크립트 ) 화면 -> 화면으로 데이터 전송하기 form에 input type을 hidden으로 설정하여 전달 할 데이터를 Element에 담아 setAttritube에 설정한 서비스(action)으로 submit 한다. 보내는 화면 var form = document.createElement('form'); var objs; objs = document.createElement('input'); objs.setAttribute('type', 'hidden'); objs.setAttribute('name', 'memId'); // 받을 네이밍 objs.setAttribute('value', memId); // 넘길 파라메터 form.appendChild(objs); form.setAttribute('method', 'get'); form.setAttr.. 2022. 8. 31.
자바스크립트) 무한스크롤 - 스크롤 최하단 Check 생각보다 간단하다. window의 창 크기를 비교하는 함수와 속성을 이용하여 스크롤의 맨 아래 일 경우에 해당 div에 데이터를 append 시키면 된다. 근데 내 경우는 좀 이상한 값이 도출 되었다. outerHeight 값보다 innerHeight 값이 더 큰 값이 도출된다. 이론상 outerHeight는 브라우저 전체 height값이라 더 크게 나와야하는데.... 일단 도움이 될 수도 있으니 참고용으로만 적어두겠습니다. if (window.outerHeight + $(window).scrollTop() -100 > $(document).height()) { ... ... ... //$.ajax 통신으로 동적 생성! } -100을 해준 이유는 얼추 맨 하단 쯤 갔을 때 다시 뿌려주기 위해 작성하였음... 2022. 8. 29.
CSS) 줄 바꿈( word-wrap / word-break ) 줄바꿈을 할 건데, 글자 단위로 자름 word-wrap: break-word; word-break: break-all; 줄바꿈을 할 건데, 단어 단위로 자름 word-wrap: break-word; word-break: keep-all; 2022. 8. 22.
반응형