- @참고: codechacha.com/ko/java-convert-set-to-list-and-list-to-set/

 

- List to Set

Set<Integer> targetSet = new HashSet<>(sourceList);

- Set to List

List<Integer> targetList = new ArrayList<>(sourceSet);

- Array to Set

Set<Integer> set = Arrays.stream(array).collect(Collectors.toSet());

- Array to List

List<Integer> list = Arrays.stream(array).collect(Collectors.toList());

- Set to Array

Integer[] array = new Integer[set.size()];
set.toArray(array);

- List to Array

Integer[] array = new Integer[list.size()];
list.toArray(array);

'Java' 카테고리의 다른 글

[Java] 연산자 우선순위  (0) 2022.12.18
[Java] LocalDateTime, Timestamp 변환  (0) 2021.02.26
[Java] Optional 사용법  (0) 2021.02.19
[Java] 파일 입출력  (0) 2021.01.27
[java] url 주소 가져오기  (0) 2020.11.11
블로그 이미지

uchacha

개발자 일지

,

- @참고: jojoldu.tistory.com/450

 

원인

명령 실행자의 기본값이 gradle로 변경되어서

 

문제 해결 방법

Settings > Build, Excution, Deplyment > Gradle > Build and run using 과 Run tests using 값을 Intellij IDEA로 변경한다.

 

블로그 이미지

uchacha

개발자 일지

,

[Java] Optional 사용법

Java 2021. 2. 19. 08:02

- @참고: www.daleseo.com/java8-optional-effective/

- @참고(Optional java doc): docs.oracle.com/javase/8/docs/api/java/util/Optional.html

 

Optional 변수 선언하기

Optional.empty() //null을 담은 빈 Optional 객체
Optional.of(value) //null이 아닌 객체를 담고 있는 Optional 객체를 생성. null이 넘어올 경우 NPE 던짐
Optional.ofNullable(value) //null인지 아닌지 확신할 수 없는 객체를 담고 있는 Optional 객체를 생성

 

Optional이 담고 있는 객체 접근하기

get() //비어있는 Optional 객체에 대해서, NoSuchElementException을 던짐
orElse(T other) //비어있는 Optional 객체에 대해서, 넘어온 인자를 반환
orElseGet(Supplier<? extends T> other) //비어있는 Optional 객체에 대해서, 넘어온 함수형 인자를 반환. 비어있는 경우만 함수가 호출되므로 orElse 대비 성능상 이점이 있음
orElseThrow(Supplier<? extends X> exceptionSupplier) //비어있는 Optional 객체에 대해서, 넘어온 함수형 인자를 통해 생성된 예외를 던짐

 

Optional의 활용 메소드

Optional<T> filter(Predicate<? super T> predicate) //If a value is present, and the value matches the given predicate, return an Optional describing the value, otherwise return an empty Optional.
Optional<T> map(Function<? super T, extends U> mapper) //If a value is present, apply the provided mapping function to it, and if the result is non-null, return an Optional describing the result.

void ifPresent(Consumer<? super T> consumer) //If a value is present, invoke the specified consumer with the value, otherwise do nothing.
boolean isPresent() //Return true if there is a value present, otherwise false.

boolean equals(Object obj) //Indicates whether some other object is "equal to" this Optional.

 

Optional 활용 코드 샘플

int length = Optional.ofNullable(getText()).map(String::length).orElse(0);

/* 주문을 한 회원이 살고 있는 도시를 반환한다 */
public String getCityOfMemberFromOrder(Order order) {
	return Optional.ofNullable(order)
			.map(Order::getMember)
			.map(Member::getAddress)
			.map(Address::getCity)
			.orElse("Seoul");
}

/* 주어진 시간(분) 내에 생성된 주문을 한 경우에만 해당 회원 정보를 구한다 */
public Optional<Member> getMemberIfOrderWithin(Order order, int min) {
	return Optional.ofNullable(order)
			.filter(o -> o.getDate().getTime() > System.currentTimeMillis() - min * 1000)
			.map(Order::getMember);
}

/* List 로부터 주어진 인덱스에 해당하는 값을 담은 Optional 객체를 반환한다. */
public static <T> Optional<T> getAsOptional(List<T> list, int index) {
	try {
		return Optional.of(list.get(index));
	} catch (ArrayIndexOutOfBoundsException e) {
		return Optional.empty();
	}
}

Optional<String> maybeCity = getAsOptional(cities, 3); // Optional
maybeCity.ifPresent(city -> {
	System.out.println("length: " + city.length());
});

'Java' 카테고리의 다른 글

[Java] LocalDateTime, Timestamp 변환  (0) 2021.02.26
[Java] Set to List, List to Set  (0) 2021.02.25
[Java] 파일 입출력  (0) 2021.01.27
[java] url 주소 가져오기  (0) 2020.11.11
Interface Comparable vs Interface Comparator  (0) 2020.01.07
블로그 이미지

uchacha

개발자 일지

,

- @참고: mangkyu.tistory.com/55

서버 기반 인증의 문제점

1. 세션 저장으로 인한 서버 RAM의 과부하 또는 이를 피하기 위해 사용하는 DB 과부하

2. 서버 확장(Scalability)시 세션 분산 시스템 설계의 복잡성

3. CORS 시 쿠키 본연의 단일 도메인, 서브 도메인에서만 작동하도록 설계되어 있는 구조로 인한 여러 도메인에서 관리가 어려운 점

 

토큰 기반 인증 과정

1. 사용자가 아이디와 비밀번호로 로그인

2. 서버 측에서 해당 정보를 검증

3. 정보가 정확할 시 서버 측에서 사용자에게 signed 토큰 발급

4. 클라이언트 측은 전달받은 토큰을 저장해두고, 서버에 요청 할 때마다 Http 요청 Header에 토큰을 포함

5. 서버는 토큰을 검증하고, 요청에 응답

 

토큰 기반 인증 시스템의 이점

1. 확장성(Extensibility)

 시스템의 확장성을 의미하는 Scalability와 달리 Extensibility는 로그인 정보가 사용되는 분야의 확장을 의미한다.

토큰 기반의 인증 시스템에서는 토큰에 선택적인 권한 부여가 가능하고,

OAuth의 경우 Facebook, Google 등과 같은 소셜 계정을 통해 다른 웹서비스에서도 로그인이 가능하다.

 

블로그 이미지

uchacha

개발자 일지

,

- @참고: github.com/eclipse/buildship/issues/755#issuecomment-542488570

 

상황

eclipse로 gradle java 프로젝트를 import 하는 과정에서

아래 에러와 함께 gradle 창에 빨간 !가 뜨고 task를 볼 수 없으며 대부분의 class 를 resolve 하지 못했다.

 

에러 내용

org.gradle.tooling.BuildException: Could not fetch model of type 'GradleBuild' using Gradle distribution 'https://services.gradle.org/distributions/gradle-5.2.1-bin.zip'.

 

해결 

gradle import 하는 도중에 사용되는 Gradle distribution을 선택하는 과정에서 local installation directory 를 선택하고 gradle-6.8(본인 local 설치된 gradle 폴더)를 지정해준다.

 

** 뭐 때문에 못가져오는지는 모르겠다.. 해당 services.gradle.org/distributions/gradle-5.2.1-bin.zip 에서 잘 다운로드 되는데도 불구하고..

블로그 이미지

uchacha

개발자 일지

,

[Java] 파일 입출력

Java 2021. 1. 27. 09:19

- @참고: csw7432.tistory.com/entry/Java-Input-Output-Stream

왜 FileOutputStream을 BufferedOutputStream에 담아서 처리하는가.

버퍼란
데이터를 전송하는 상호간의 장치에서 고속의 장치와 저속의 장치 간의 속도 차이로 인해 저속의 장치가 작업을 추리하는 동안 고속의 장치가 기다려야 하는 현상을 줄여주는 기술이다.

IF 버퍼를 사용하지 않는다면
컴퓨터는 프린터가 인쇄를 끝낼 때 까지 아무런 작업을 할 수 없게 된다.

IF 버퍼를 사용한다면
컴퓨터에서 전송한 데이터가 버퍼에 저장되어 프린터는 컴퓨터로부터 직접 데이터를 받는 것이 아니라, 버퍼에서 데이터를 조금씩 읽어서 출력 하므로 컴퓨터는 버퍼로 전송작업을 마치고 프린터가 출력을 하는 동안 다른 작업을 할 수 있게 되는 것 이다.

Finally
버퍼는 각 장치나 프로세스가 상대방에 의해 정체되지 않고 잘 동작 할 수 있도록 해주는 놈이다.

Reference
"데이터의 중간 저장소" 라는 측면에서 버퍼는 캐시와 마찬가지이지만, 캐시가 어떤 작업의 속도를 증진시키기 위해 존재하는데 비해, 버퍼는 개별 작업들 간의 협동을 지원 하기 위해 존재한다는 차이가 있다.

출처: csw7432.tistory.com/entry/Java-Input-Output-Stream

 

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class BufferedOutputStream_SW {
    public static void main(String[] args)
    {
        FileOutputStream sw_stream = null;
        try
        {
            sw_stream = new FileOutputStream("SWTest");
            byte receive[] = {'C','H','O','I'};
            
            // 스스로 파일에 접근을 할수 없기때문에 FileOutputStream 사용하여 BufferedOutputStream 객체를 선언 / 생성
            // 여기서 특이한 점은 임시로 저장할 버퍼의 크기를 마음대로 조절이 가능하다는 점이다
            BufferedOutputStream b_out_stream = new BufferedOutputStream(sw_stream,1024);
            // "1024" 크기로 제 마음대로 버퍼의 크기를 잡아주었다
            // 즉, 파일에 데이터를 쓰기 위해서는 1024가 모여야 보조기억장치에 접근하여 쓰게 된다
            
            b_out_stream.write(receive);
            // "write()" 메소드는 FileOutputStream과 동일
            
            b_out_stream.close(); // 이 부분은 이제 필수 부분인걸 알것이다
            sw_stream.close();
        }
        catch(FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }
}


출처: https://csw7432.tistory.com/entry/Java-Input-Output-Stream [최느님 프알못]

'Java' 카테고리의 다른 글

[Java] LocalDateTime, Timestamp 변환  (0) 2021.02.26
[Java] Set to List, List to Set  (0) 2021.02.25
[Java] Optional 사용법  (0) 2021.02.19
[java] url 주소 가져오기  (0) 2020.11.11
Interface Comparable vs Interface Comparator  (0) 2020.01.07
블로그 이미지

uchacha

개발자 일지

,

- @참고: zzznara2.tistory.com/749

해결 방법

logging.properties 파일을 WEB-INF/classes 폴더에 담는다.

 

logging.properties
0.00MB

 

블로그 이미지

uchacha

개발자 일지

,

- @참고: javannspring.tistory.com/231

 

Spring Framework 실행순서

사전지식 POJO 스프링의 특징 중 하나 평범한 옛날 자바 객체 Not POJO = Servlet의 특징 javax.servlet, javax.servlet.http 패키지를 import해야 한다. Servlet, Generic Servlet, HttpServlet 중 하나를 상속해..

javannspring.tistory.com

 

Spring 실행 순서

spring framework cycle. ref: https://javannspring.tistory.com/231

 

1. web.xml을 로딩

2. web.xml에 등록된 ContextLoaderListner 생성

3. ContextLoaderListner가 root-context.xml을 로딩

4. root-context.xml에서 web 제외한 component를 스캔 및 생성

5. 6. 클라이언트 요청에 의해 DispatcherServlet 생성

7. DispatcherServlet이 servlet-context.xml을 로딩

8. servlet-context.xml에서 web 관련 component를 스캔 및 생성

 

Spring 구동 순서

 

Spring Framework 구동 순서. ref. https://javannspring.tistory.com/231

 

블로그 이미지

uchacha

개발자 일지

,