일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Thymeleaf
- Proxy
- 스프링
- Android
- Greedy
- AOP
- pointcut
- 스프링 핵심 원리
- 인프런
- 백준
- 스프링 핵심 기능
- kotlin
- SpringBoot
- Exception
- springdatajpa
- 그리디
- java
- 알고리즘
- 김영한
- Servlet
- db
- jpa
- JDBC
- QueryDSL
- http
- transaction
- Spring Boot
- JPQL
- spring
- 자바
- Today
- Total
목록Java/다양한 기능 (24)
개발자되기 프로젝트
1. 문제! 여행사에 패키지 상품이 있음. 여행 비용 15세 이상 : 100만원 15세 미만 : 50마원 고객 세 명이 패키지 여행 신청 하는 경우, 패키지 여행 비용 계산 고객 정보 CustomerA 이름 : A 나이 : 40 비용 : 100 CustomerB 이름 : B 나이 : 20 비용 : 100 CustomerC 이름 : C 나이 : 10 비용 : 50 2. test class TravelCustomerTest { public static void main(String[] args) { TravelCustomer customerA = new TravelCustomer("A", 40, 100); TravelCustomer customerB = new TravelCustomer("B", 20, 10..
1. reduce() 연산 자바가 stream()에 대한 연산을 제공하지만 상황에 딱 맞는 경우가 없을 수 있다. 이 때 사용자가 직접 stream()에 대한 연산을 직접 구현할 수 있다. 정의된 연산이 아닌 프로그래머가 직접 구현한 연산을 적용 reduce(초기값 or 기본 값, BinaroOperator 구현 또는 람다식) T reduce( T identify, BinaryOperator accumulator) 최조 연산으로 스트림의 요소를 소모하여 연산을 수행 예시) 배열의 모든 요소의 합을 구하는 reduce()연산 Arrays.stream(arr).reduce(0, (a,b) -> a+b)); reduce()메서드의 두 번째 요소로 전달되는 람다식에 따라 다양한 기능 수행할 수 있음. 람다식을 ..
1. 객체 지향 프로그래밍과 람다식 비교 문자열 두 개를 연결하여 출력하는 예제를 두 가지 방식으로! 인터페이스 선언 @FunctionalInterface public interface StringConcat { public void makeString(String s1, String s2); } 객체지향 방식은 interface를 구현하는 class를 생성해서 기능을 사용해야 함. public class StringConcatImpl implements StringConcat{ @Override public void makeString(String s1, String s2) { System.out.println(s1+", "+s2); } } 반면 람다식은 위의 객체지향 방식처럼 인터페이스를 구현하는 클..
1. Stream??? 자료의 대상과 관계 없이 동일한 연산을 수행 배열, 컬렉션을 대상으로 연산을 수행 일관성 있는 연산으로 자료의 처리를 쉽고 간단하게 함 자료 처리에 대한 추상화가 구현되어 있음 한 번 생성하고 사용한 스트림은 재 사용 할 수 없음. 자료에 대한 스트림을 생성하여 연산을 수행하면 스트림은 소모됨 다른 연산을 수행하기 위해서는 스트림을 다시 생성해야 함. 스트림 연산은 기존 자료를 변경하지 않음 자료에 대한 스트림을 생성하면 스트림이 사용하는 메모리 공간은 별도로 생성됨. 따라서 연산이 수행되도 기존 자료에 대한 변경은 발생하지 않음 스트림 연산은 중간 연산과 최종 연산으로 구분됨 스트림에 대한 중간 연산은 여러 개의 연산이 적용될 수 있지만 최종 연산은 마지막 한 번만 적용됨 최종 ..
1. 함수형 인터페이스 선언 람다식을 사용하기 위한 인터페이스 익명 함수와 매개변수만으로 구현되므로 인터페이스는 단 하나의 메서드만을 선언해야함 @FunctionalInterface annotation 함수형 인터페이스라는 의미. 내부에 여러 개의 메서드 선언 불가. 왜 여러개 선언 불가?? 함수를 구현하는 쪽에서 익명 클래스 방식을 사용함 즉, 어떤 메서드를 구현했는지 모름!!! 요거만 봤을 때 어떤 메서드인지 알 길이 없음 ㅋㅋㅋ Add addXY = (x, y) -> {return x+y;}; 2. 예시 @FunctionalInterface 선언 @FunctionalInterface public interface MyNumber { int getMAx(int num1, int num2); } 사용 ..
1. 함수형 프로그래밍과 람다식 자바는 객체지향 프로그래밍 : 기능을 수행하기 위해서는 객체를 만들고 해당 객체 내부에 맴버 변수 선언 및 기능을 수행하는 메서드를 구현해야 함. 자바8부터 함수형 프로그래밍 방식을 지원 : 람다식 함수형 프로그래밍? : 함수의 구현과 호출만으로 프로그램이 수행되는 방식 함수형 프로그래밍은 순수함수(pure fucntion)을 구현하고 호출함으로써 외부 자료에 side effect를 주지 않도록 구현하는 방식. 순수 함수란 매개변수만을 사용하여 만드는 함수. 즉 함수 내부에서 함수 외부에 있는 변수를 사용하지 않아 함수가 수행되더라도 외부에 영향을 주지 않음 함수를 기반으로 하는 프로그래밍이고 입력받는 자료 이외에 외부 자료를 사용하지 않아 여러 자료가 동시에 수행되는 병..
1. 지역 내부 클래스 지역 변수와 같이 메서드 내부에서 정의하여 사용하는 클래스 메서드의 호출이 끝나면 메서드에 사용된 지역변수의 유효성은 사라짐 메서드 호출 이후에도 사용해야 하는 경우가 있을 수 있으므로 지역 내부 클래스에서 사용하는 외부 메서드의 지역 변수나 매개 변수는 final로 선언. 매개변수(i), 지역변수(num)를 지역 내부 클래스 메서드에서 값을 변경하려면 오류가 발생한다. 이는 메서드(getRunnerble)과 Local Inner Class의 생성 주기가 다르기 때문이다. 쉽게말해 getRunnerble()종료 후 Local Inner Class의 메서드(run)가 호출 될 여지가 있다. 매개변수(i), 지역변수(num)는 stack메모리에 올라가며, 메서드(getRunnerble..
1. 내부 클래스(inner class) 클래스 내부에 선언한 클래스로 이 클래스를 감싸고 있는 외부 클래스와 밀접한 연관이 있는 경우가 많음. 다른 외부 클래스에서 사용할 일이 거의 없는 경우에 내부 클래스로 선언해해서 주로 사용함 중첩 클래스 내부 클래스의 종류 인스턴스 내부 클래스, static 내부 클래스, local 내부 클래스, anonymous 내부 클래스 2. 인스턴스 내부 클래스 내부적으로 사용할 클래스를 선언(private로 선언하는 것을 권장) 외부 클래스가 생성된 후 생성됨(static 내부 클래스와 다름) private가 아닌 내부 클래스는 다른 외부 클래스에서 생성할 수 있음. 인스턴스 내부 클래스에 static 변수 사용이 가능? 인스턴스 내부 클래스는 외부 클래스가 생성된 후..