전체 글
-
[더 자바8] STREAM APIJAVA/JAVA8 관련 2022. 3. 20. 16:49
Stream 자바 8에서 추가된 스트림(Stream)은 람다를 활용할 수 있는 기술중 하나이다. 스트림은 '데이터의 흐름'으로, 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있다. public class App { public static void main(String[] args) { List names = new ArrayList(); names.add("jump"); names.add("jumplope"); names.add("ff"); names.add("gg"); Stream stringStream = names.stream().map(String::toUpperCase); stringStream.forEach(System.out::pri..
-
[더 자바8] 인터페이스 기본 메소드와 스태틱 메소드JAVA/JAVA8 관련 2022. 2. 13. 16:05
기본적으로 인터페이스에서는 추상메서드만 선언이 가능하였다. JAVA8에서는 인터페이스에서 기본메소드와 스태틱 메소드를 선언할 수 있도록 변경되었다. 기본 메소드 - 인터페이스에 메소드 선인이 아니라 구현체를 제공하는 방식 - 기본 메소드는 구현체가 모르게 추가된 기능으로 그만큼 리스크가 존재함. -> 컴파일 에러는 아니지만 구현체에 따라 런타임 에러가 발생할 수 있는 위험이 존재 -> 반드시 문서화 필요(@implSpec 자바독 태그 사용) - Object가 제공하는 기능 (equals, hasCode)는 기본 메소드로 제공할 수 없다. (구현체가 재정의해야 함.) - 본인이 수정할 수 있는 인터페이스에만 기본 메소드를 제공할 수 있다. - 인터페이스를 상속받는 인터페이스에서 다시 추상 메소드로 변경할 ..
-
[더 자바 8] 메소드 레퍼런스JAVA/JAVA8 관련 2022. 2. 13. 14:32
메소드 레퍼런스 : 람다가 하는 일이 기존 메소드 또는 생성자를 호출하는 거라면, 메소드 레퍼런스를 사용해서 매우 간결하게 표현할 수 있다. 메소드 참조하는 방법 스태틱 메소드 참조 타입::스태틱 메소드 ex:) UnaryOperator hi = Greeting::hi; 특정 객체의 인스턴스 메소드 참조 개체 레퍼런스::인스턴스 메소드 ex:) Greeting greeting = new Greeting(); UnaryOperator hello2 = greeting::hello; 임의 객체의 인스턴스 메소드 참조 타입::인스턴스 메소드 생성자 참조 타입::new ex:) Supplier newGreeting = Greeting::new; public class App { public static void ..
-
[더 자바 8] 람다 표현식JAVA/JAVA8 관련 2022. 2. 6. 00:50
람다 (인자 리스트) -> (반디) //인자 // 바디(한줄일때는 바디 {} 생략 가능) Supplier get10 = ()->10; System.out.println(get10.get()); Supplier get11 = () ->{11}; System.out.println(get11.get()); 인자 리스트 인자가 없을 때 : {} 인자가 한개일 때 : (one) 또는 one 인자가 여러개 일때 : (one, two) 인자의 타입은 생략 가능, 컴파일러가 추론하지만 명시할 수도 있다. 변수 캡처(Variable Capture) 로컬 변수 캡처 final 이거나 effective final인 경우에만 참조할 수 있다. 그렇지 않을 경우 concurrency 문제가 생길 수 있어서 컴파일 방지가 된다...
-
[더 자바 8] 함수형 인터페이스와 람다 표현식JAVA/JAVA8 관련 2022. 2. 4. 00:48
1. 함수형 인터페이스 - 추상메서드가 하나만 존재하는 인터페이스 - 다른 Static / default 메서드는 있어도 됨. - @FunctionalInterface를 선언하여 함수형 인터페이스를 견고하게 관리 가능하다. (함수형 인터페이스 아닐 시에 컴파일 에러를 냄) // 함수형 인터페이스 // -> 추상 메서드를 인터페이스당 1개만 사용가능 @FunctionalInterface public interface RunSomething { void doIt(); // void doitAgain(); } 2. 익명 내부 클래스 public class Foo { public static void main(String[] args) { // 자바 8 이전에 사용하던 방식 // 익명 내부 클래스 - anoym..
-
HashMap 사용법JAVA 2022. 1. 2. 01:38
HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션입니다. Map 인터페이스를 상속하고 있기에 Map의 성질을 그대로 가지고 있습니다. Map은 키와 값으로 구성된 Entry객체를 저장하는 구조를 가지고 있는 자료구조입니다. 여기서 키와 값은 모두 객체입니다. 값은 중복 저장될 수 있지만 키는 중복 저장될 수 없습니다. 만약 기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대치됩니다. HashMap은 이름 그대로 해싱(Hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는 데 있어서 뛰어난 성능을 보입니다. - 출처 : https://coding-factory.tistory.com/556 public class HashMapLearn { public..
-
JWT 실습 프로젝트 - 4 (회원가입, 권한검증)SPRING/스프링 시큐리티 -JWT 2021. 9. 18. 00:19
SecurityUtil public class SecurityUtil { private static final Logger logger = LoggerFactory.getLogger(SecurityUtil.class); private SecurityUtil() { } public static Optional getCurrentUsername() { final Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication == null) { logger.debug("Security Context에 인증 정보가 없습니다."); return Optional.empty(); } Str..
-
JWT 실습 프로젝트 - 3 (로그인)SPRING/스프링 시큐리티 -JWT 2021. 9. 17. 20:01
@RestController @RequestMapping("/api") public class AuthController { private final TokenProvider tokenProvider; private final AuthenticationManagerBuilder authenticationManagerBuilder; public AuthController(TokenProvider tokenProvider, AuthenticationManagerBuilder authenticationManagerBuilder) { this.tokenProvider = tokenProvider; this.authenticationManagerBuilder = authenticationManagerBuilder..