일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- JPA
- 자바
- SpringBoot
- redis
- K8s
- 백준
- Collection
- 스프링
- Java
- GC
- OS
- Stack
- 보조스트림
- 토비의 스프링 정리
- thread
- IntellJ
- 스트림
- Kotlin
- Stream
- spring
- 이스티오
- mysql
- list
- jvm
- gradle
- MSA
- 자바 ORM 표준 JPA 프로그래밍
- 토비의 스프링
- Real MySQL
- 쿠버네티스
- Today
- Total
목록전체 글 (152)
인생을 코딩하다.

Mockito를 활용해 단위테스트를 진행할 떄 PersonService.java에서 person.set(personDto) 로직을 주석처리 하였는데도 TestCode가 작동을 한다. 중요 로직을 주석처리 하였는데 오류를 검출하지 못한채로 검증을 해버리게 된다. 이유는 PersonServiceTest.java에서 verify(personRepository, times(1)).save(any(Person.class)); 어떠한 로직이든 person class면 괜찮다고 생각하기 때문이다. set을 주석처리 하여서 personDto가 들어가지 못하기 때문에 값은 다 null이 들어가지만, 밑에서 save가 되기 때문에 통과 되어버린다. 그래서 오류 검출을 하지 못하게 된다. 이 문제를 해결하기 위해 Argum..

의존성 주입의 종류로는 Constructor, setter, field 타입이 있다. 생성자 주입 (Constructor) Setter 주입 Field 주입 클린코드를 위해서는 필드 주입보다 생성자 주입을 권한다. 간단히 정리하자면 - NullPointExcepton을 방지할 수 있다. - 객체에 final 키워드를 사용 할 수 있다. - 순환 참조를 앱 구동시 검출 할 수 있다. - 생성자의 인자가 많아지면 코드가 더러워져 리팩토링을 하게 된다. Spring Document에 나와있는 내용에도 필드주입은 언급도 안하고, 생성자 기반 주입(Construcor Base Injection)과 수정자 주입(Setter Base InJection)의 차이점에 대해서 설명하고 있다. 또한 생성자 기반 주입을 옹호..
stream API는 특정 조건을 만족하는 요소들을 얻을 수 있도록 세가지 매칭 매소드를 제공한다. allMatch() -> 요소들이 매개값으로 주어진 조건에 맞는지 검사 /** * 이 스트림의 어떤 요소도 제공된 술어와 일치하지 않는지 여부를 반환한다. * 필요하지 않은 경우 모든 요소에 대한 술어를 평가할 수 없음 * 결과를 결정한다. 스트림이 비어 있으면 {@code true}이(가) * 반환되고 술어는 평가되지 않는다. * * 이것은 단락 회로 입니다. * 터미널 운영. * * @api참고 * 이 방법은 의 보편적 정량화를 평가한다. * 스트림의 요소에 대한 부정 술어(모든 x ~P(x)) 만약 * 하천은 비어 있으며, 수량화는 빈칸으로 만족한다고 함 * 및 는 항상 {@code true}이며, ..

NullPointerException 문제를 해결할 수 있는 방법을 제공한다. 간단히 말하면 기본적으로 null값을 피하고 싶을때 쓴다. (예를 들면 String이나 객체 등에서 null값이 생길 때) 예를 들면, 객체가 있는데 멤버 함수나 멤버 변수를 호출할 때, 그 객체가 살아있는 줄 알았는데 죽어있네?..객체가 null값일 때 멤버 변수 혹은 멤벼 변수에 접근하면 NullPointerException이 발생해서 프로그램이 죽어버린다. 이런 현상을 최대한 막았으면 좋겠다고 생각할때 나온게 Optional이다. 옵셔널은 제네릭이다. -> 옵셔널이라는 클래스 초기화 목적 Optional cls1 = Optional.empty(); null값도 허용한다. String str = null; Optional ..

스트림 자료의 대상과 관계없이 동일한 연산을 수행할 수 있는 기능(자료의 추상화) 배열, 컬렉션에 동일한 연산이 수행되어 일관성 있는 처리 가능 한번 생성하고 사용한 스트림은 재사용 할 수 없음 스트림 연산은 기존 자료를 변경하지 않음 중간 연산과 최종 연산으로 구분 됨 최종 연산이 수행되어야 모든 연산이 적용되는 지연 연산 스트림 연산 - 중간 연산 중간 연산 - filter(), map() 조건에 맞는 요소를 추출 (filter()) 하거나 요소를 변환함 (map()) 문자열의 길이가 5 이상인 요소만 출력하기 sList.stream().filter(s -> s.length() >= 5).forEach(s -> System.out.println(s)); 스트림 생성. 중간연산. 최종연산 고객 클래스에..

람다식이란? 자바에서 함수형 프로그래밍을 구현하는 방식 클래스를 생성하지 않고 함수의 호출만으로 기능을 수행 함수형 인터페이스를 선언함 자바 8부터 지원되는 기능 함수형 프로그래밍이란? 순수 함수를 구현하고 호출 매개 변수만을 사용하도록 만든 함수로 외부 자료에 부수적인 영향이 발생하지 않도록 함 입력 받은 자료를 기반으로 수행되고 외부에 영향을 미치지 않으므로 병렬처리등에 가능 안정적인 확장성 있는 프로그래밍 방식 람다식 문법 매개 변수 하나인 경우 괄호 생략 가능(두 개인 경우는 괄호를 생략할 수 없음) str -> {System.out.println(str);} 증괄호 안의 구현부가 한 문장인 경우 중괄호 생략 str -> System.out.println(str); 중괄호 안의 구현부가 한 문장이..

빌드를 수동으로 실행하고 브라우저를 새로고침 하여 결과 확인하는 것을 자동으로 해준다. gradle에서 사용하려면 build.gradle에 runtimeOnly('org.springframework.boot:spring-boot-devtools') 한 줄만 의존성 추가 해주면 된다. 그 후 IntelliJ 에서 - File -> Settings [Ctrl-Alt-S] -> 검색 Compiler -> Build project automatically - [Ctrl-Shift-A] -> Registry... -> compiler.automake.allow.when.app.running 보통 devtools는 default값으로 설정되어 있지만, 좀 더 커스텀하게 하고싶으면 이제 application.prop..