전체 글
-
JAVA 람다와 스트림 - 컬렉션 프레임워크(CF)와 함수형 인터페이스개발언어/JAVA 2023. 12. 18. 16:50
컬렉션 프레임워크(CF)와 함수형 인터페이스 JDK 1.8(Java8)부터 함수형 인터페이스 기능이 추가 되었다 그러면서 컬렉션 프레임워크에도 많은 변화가 있었다. 람다식을 사용해서 작업을 좀더 쉽게 처리할 수 있는 메서드들이 추가 된 것이다. ▶ 함수형 인터페이스를 사용하는 컬렉션 프레임워크의 메서드(와일드 카드 생략) 인터페이스 메서드 설명 Collection boolean removeIf(Predicate filter) 조건에 맞는 요소를 삭제 List void replaceAll(UnaryOperator operator) 모든 요소를 변환하여 대체 iterable void forEach(Consumer action) 모든 요소에 작업 action을 수행 Map V compute(K key, BiF..
-
JAVA람다와 스트림 - Predicate의 결합개발언어/JAVA 2023. 12. 18. 15:54
Predicate의 결합 ▶ && and(), || or(), != negate()로 Predicate를 하나로 결합(default메서드) Predicate가 함수형 인터페이스 이므로 default 메서드, static 메서드, 추상메서드를 가질 수 있다. Predicate p = i -> i i i%2 == 0; 위 코드와 같은 조건식들이 있을 때 조건식들을 and(), or(), negate()를 활용해서 결합할 수 있다. Predicate notP = p.negate(); // i >= 100 Predicate all = notP.and(q).or(r); // 100 Integer.toBinaryStri..
-
JAVA 람다와 스트림 - java.util.funtion 패키지개발언어/JAVA 2023. 12. 18. 13:11
java.util.funtion 패키지 ▶ 자주 사용되는 다양한 함수형 인터페이스를 제공 Predicate 예시 Predicate isEmptyStr = s -> s.length()==0; String s = ""; if(isEmptyStr.test(s)) //if(s.lengh()==0); System.out.println("This is empty String"); 함수형 인터페이스 Predicate를 사용할 때 람다 함수의 반환 값의 타입은 boolean이어야 한다. ▶ 매개변수가 2개인 함수형 인터페이스 매개 변수를 2개 받는 함수형 인터페이스 까지는 미리 정의 가 되어있지만 3개를 받는 것은 정의되어 있지 않다. 매개변수를 3개 가지는 함수형 인터페이스 @FunctionalInterface in..
-
JAVA 람다와 스트림 - 함수형 인터페이스개발언어/JAVA 2023. 12. 15. 16:50
함수형 인터페이스 ▶ 함수형 인터페이스 - 단 하나의 추상 메서드만 선언된 인터페이스 @FunctionalInterface interface MyFunction{ public abstract int max(int a, int b); } 인터페이스의 모든 메서드는 public이면서 abctract하기 때문에 2가지 키워드는 생략 가능하다. 💡 tip) 오버라이딩(Overriding)제어자 오버라이딩은 할 때 오버라이딩 하는 메서드의 접근 제어자는 넓은 범위에서 좁은 범위로 바꿀 수 없다. 즉 인터페이스에서 public 접근제어자 메서드를 오버라이딩 하여 구현하면 default, private으로 바꿀 수 없다. MyFunction 구현 MyFunction f = new MyFuction(){ public ..
-
JAVA 람다와 스트림 - 람다식(Lambda Expression)개발언어/JAVA 2023. 12. 15. 14:30
람다식(Lambda Expression) 자바는 원래 객체 지향(OOP)언어이지만 JDK1.8 부터는 함수형 언어의 기능을 추가했다. 따라서 자바8부터는 OOP언어이 동시에 함수형언어 라고 할 수 있다. 하지만 완전히 함수형 언어도 겸비한다고 하기에는 무리가 있고 함수형 언어의 기능을 포함했다고 보는 편이 더 정확하다. 익명 클래스(anonymous class) 이름이 없는 일회용 클래스. 정의와 생성을 동시에 한다. 익명 클래스의 객체 인스턴스 생성 new Object(){ // 클래스 정의부 } class Example{ //익명 클래스 Object iv = new Object(){ void method(){} }; //익명 클래스 static Object cv = new Object(){ void ..
-
클라우드 마이크로 서비스 - API Gateway Service(Netflix Zuul,Filter)2Infra/클라우드 2023. 12. 14. 13:53
API Gateway Service Netflix Zuul 구현 Step1) First Service, Second Service Spring Boot : 2.3.8 Dependencies : Lombok, Spring Web, Eureka DisCovery Client Step2) First Service, Second Service @RestController @RequestMapping("/") public class FirstServiceController{ @GetMapping("/welcome") public String welcome(){ return "Welcome to the Second Service"; } } First Service-application.yml server: port..
-
클라우드 마이크로 서비스 - API Gateway Service(Netflix Zuul)1Infra/클라우드 2023. 12. 13. 16:10
API Gateway Service Netflix Ribbon과 Zuul Spring Cloud Gateway - 기본 Spring Cloud Gateway - Filter Spring Cloud Gateway - Eureka 연동 Spring Cloud Gateway - Load Balancer API Gateway Service는 사용자가 설정한 라우팅 설정에 따르는 엔드 포인트이다. 즉 클라이언트 대신에 요청하고 응답을 받으면 클라이언트에게 전달 다시 응답 결과를 전달해주는 Proxy 열할을 하게 된다. 시스템의 내부 구조는 숨기고 외부 요청에 대해서 적절한 형태로 가공된 응답을 할 수 있다는 장점을 가지고 있다. 마이크로 서비스가 각각의 엔드포인트를 가질 때 새로운 마이크로 서비스가 추가된 경우 ..
-
클라우드 마이크로 서비스 - Eureka Service DiscoveryInfra/클라우드 2023. 12. 12. 19:09
Eureka Service Discovery User Service - 프로젝트 생성 eureka.client.fetch-registry=true 위 설정은 EUREKA 서버로부터 인스턴스들의 정보를 주기적으로 가져올 것인지를 설정하는 속성이다. true로 설정하면, 갱싱된 정보를 받겠다는 설정이다. application.yml 두번째 User Service를 실행하는 방법(IDE 활용) UserServiceApplication-2의 `VM options`에 -Dserver.port=9002 명령어를 넣어준다. 이렇게 설정정보를 바꾸는 방법은 서버 자체의 코드가 변경되는 방법이 아니기 때문에 매번 실행 할 때 마다 실행될 포트 값을 다르게 해서 적용할 수 있다. 따라서 한번 작성된 코드가 다시 빌드되고 ..