java 8

[JAVA] Optional- of 와 ofNullable의 차이, orElse와 orElseGet의 차이

문자열을 BigDecimal 형태로 바꾸는데 Optional을 사용하다가 of, ofNullable, orElse, orElseGet을 알게되었는데 이름도 비슷하고 아무거나 쓰면 되지 않을까 싶다가 좀 찾아보니 분명한 차이가 있었다. of VS ofNullable 먼저 of와 ofNullable의 차이는 null을 허용할수 있냐 없냐이다. of를 사용할때 null이 있으면 NullPointerException이 발생한다. String str = null; BigDecimal a = new BigDecimal(Optional.of(str).orElse("0") ); System.out.println(a); of 대신 ofNullable을 써보면 String str = null; BigDecimal a = ..

[JAVA] list에 객체 add시 주의할 점

개발하다가 반복문을 사용하여 list에 객체를 추가해야 하는 코드가 있었는데, 출력해보니 모든 객체가 같은 값을 가지고 있었다. 다음과 비슷한 코드인데, List pList = new ArrayList(); Person p = new Person(); for(int i = 0; i < 3; i++) { p.setAge(30+i); pList.add(p); } for(int i = 0; i < 3; i++) { System.out.println(pList.get(i).getAge()); } 이 코드를 실행해 보면 30 31 32 로 찍히지 않고 모두 32로 찍히는 것을 볼 수 있다. 이유는 같은 메모리 주소값을 사용하기 때문이다. JAVA 소스 내에서 new Person(); 를 수행하는 순간 하나의 객체..

[JAVA] java.sql.Date vs java.util.Date

spring으로 개발하다 보면 Date 자료형을 써야할 때가 많은데, import 하려고 보면 보통 java.sql.Date와 java.util.Date 두가지 타입이 있다. 우선 java.sql.Date는 java.util.Date를 상속한 것. java.sql.Date : JDBC등을 이용해서 DB에 격납된 날짜나 시각정보를 데이터로서 추출하거나 - 데이터베이스에 격납할 때의 영역으로 사용하며, 문자열 형식이 "2008-12-30 12:30:20" 와 같은 형태의 데이터 에 특화해서 사용하는데에 적합하다. - 연월일시분초등의 요소를 따로 따로 분리하지 않고 하나의 정보로서 다룬다. - 해당 클래스의 사용 목적은 년도, 월, 일을 유지하는 SQL 데이터를 다루기 위함이다. - 시간 정보는 다루지 않고 ..

프로그래머스 코딩테스트 lv2-구명보트 : int 배열 정렬

https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr int 배열 정렬하기 Arrays.sort 이용 오름차순 -> int[] intArray = {1,3,5,7,2,4,6}; Arrays.sort(intArray); 내림차순 -> int[] intArray = {1,3,5,7,2,4,6}; // primitive Type을 Wrapper클래스로 박싱해주어야 reverseOrder 사용가능. Integer[] tmp = Arrays.stream(in..

[JAVA] Stack

Stack 사용 그냥 짝맞는거 찾아서 하나하나 제거하는 식으로 풀었었는데 정확성은 100%이지만 효율성에서 다 틀렸다. 찾아보니 Stack으로 푸는 방법이 있다해서 알게 되었다. 다행히 학교다닐 때 배운 개념과 코드가 거의 유사해서 이해하는데는 어려움이 없었다. 선입선출(FIFO) 데이터 추가 : push 데이터 꺼내기 : pop (제일 나중에 추가한 것부터 꺼냄) 코드 Stack stack = new Stack(); // Stack에 데이터 추가 stack.push("A"); stack.push("B"); stack.push("C"); // Stack에서 데이터 꺼내기 System.out.println(stack.pop()); // ==> C // Stack의 최상단 값 출력(제거하지 않음) Syste..

BaseEntity 생성하기

처음 Entity를 만들 땐 BaseEntity를 굳이 생성할 필요를 못느꼈는데, JPA를 사용하며 개발하다보니 Entity마다 공통으로 쓰이는 변수와, 공통으로 상속하는 인터페이스 들이 있어서 BaseEntity를 만들게 되었다. 수정사항이 있을 때마다 수정할 예정이다. 1. implements Persistable save 가 단순히 create인 줄 알고 사용하다가 알게된 인터페이스 class abstract BaseEntity implements Persisable{ @CreatedDate private LocalDateTime createdDate; @Override public boolean isNew() { return createdDate == null; } } getId는 BaseEnti..

[Spring Boot] Ggmail로 인증 링크를 포함한 메일 보내기

https://sdy-study.tistory.com/269 Spring Boot 로 이메일 회원가입 하기 토이 프로젝트를 하다가 회원가입과 로그인, 로그아웃 기능을 만들게 되었는데 그때 사용했던 개념들을 정리하고자 한다 먼저 이메일을 통해서 회원가입을 했던 과정을 정리한다 - 개발환경 spr sdy-study.tistory.com 위 글을 참고하여 재사용 가능하도록 커스텀해서 작성하였다. 1. Gmail SMTP 설정 예전에는 보안 수준 낮은 앱의 액세스 허용만 체크하면 됐지만 최근에는 정책이 바뀌어 2차 인증을 해주고 앱 비밀번호를 기억해둬야 한다. https://hyunmin1906.tistory.com/276 [Go] Google Gmail SMTP 설정 방법 및 메일 전송 ■ SMTP 간이 우편..