일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 카프카
- nestjs공부
- K8S
- 프로그래머스
- Axon framework
- querydsl
- JPA스터디
- DDD
- JPA예제
- 플러터 개발
- nestjs
- 코테공부
- 스프링 공부
- 스프링부트공부
- JPA 공부
- Flutter
- 스프링부트
- 코테준비
- 스프링공부
- 자료구조공부
- 자바공부
- Kafka
- 플러터 공부
- JPA공부
- nestjs스터디
- 기술공부
- JPA
- 기술면접공부
- 알고리즘공부
- 스프링
- Today
- Total
목록자바공부 (11)
DevBoi
java 8에서 새로 나온 부분이 있다. 바로 stream, optional이다. 어떤게 좋은지 바로 테스트 해보자 우선 Stream이란, 컬렉션의 요소를 하나씩 처리할수있는 Iteator와 비슷한 기능을 하고, 해당 기능을 수행함으로써, 코드가 간결해지고, 병렬처리를 가능하도록 해준다. ArrayList를 사용해서, 해당과 같이 값을 하나씩 체크를 했다. 이걸 Stream으로 한다면? 누가봐도 간결한 코드를 가진다. int 배열, String 배열을 바꾸는건 어떨까? 주로 배열을 바꿀테니까.. 이렇게 String 배열과 int 배열에 대한 변환을 주면된다. 물론 Stream의 형식이 제네릭 타입이기 때문에, 요런식으로도 가능하다. 다음에는, Stream의 플랫맵이나 기타등등 다양한 사용함수들을 알아보고..
RDB에서는 테이블 별로, 외래키를 매핑하며, 일대 다 혹은 다대다 의 형태를 가진다. 객체의 참조와, 외래키 매핑 관련되서 공부를 해보자 우선 간단한 예로, 팀과, 멤버에 대한 예제를 공부해보자 여러 사람이 한팀에 소속될 수 있다는 1:n관계라고 생각을 해보자 Member 에서는 Team에대한 관계와 조인 컬럼을 설정해준다. Team은 사실 별건없다. Lombok 을 사용해서 Getter,Setter도 직접 달아주었는데, 이건, 너무 불편해서 그냥 쓰기로했다 ㅋㅋ (매번 메소드 귀찮다) 이렇게 만 하면, 자동으로 PK,FK를 매핑해주는 테이블을 생성해준다. 예제 코드를 이렇게 작성해서 한번 테스트 해보자 뭐 잘들어간다. 추가로 위의소스에서 약간 수정한 내용은 PK가 id 자동생성 값일때는 String ..
자바 가비지 컬렉션의 동작및 개념에 대해서 알아본다. 우선 가비지 컬렉션이란? 프로그램을 개발하다가, 유효하지 않은 메모리인 가비지가 발생하게되고 C나 다른 언어는 free를 통해, 직접 메모리를 해제해주어야 하지만, java 는 가바지컬렉터가 불필요한 메모리를 알아서 정리해준다. Java 에서는 객체는 대부분 일회성이며, 메모리에 오랫동안 남아있는 경우는 드물다는 전제로 설계되었다. 객체의 생존 기간에 따라 물리적인 heap영역을 나누게 되었고, 이에 따라 Young Old, 총 2가지 영역으로 설계되었다. 1. Young 영역 (Young Generation) 새롭게 생성된 객체가 할당되는 지역이다. 대부분으니 객체가 금방 Unreachable(1회성 상태) 가 되기 때문에 많은 객체가 Young영역..
JPA를 개발하면서, N+1문제에 대한 얘기가 많이나온다. N+1이란 어떤걸까? 어떻게 해결해야할까? 우선 N+1 이란, 어떤 게시물의 테이블을 POST라고 두고, Post에 달린 댓글을 Comment라고 두자 한게시물에는 여러개의 댓글이 달릴것이고, 우리는 이것을 @OnetoMany로 둔다. 자 그러면, 페이징을 뿌릴때나, 특정조건에 Post테이블을 findAll해본다고하자 우선, 그전에 JPA에서는 각각의 fetch방법이 존재한다. fetch란 뭘까? fetch란 특정 한개의 Entity 즉 테이블을 조회할때, 연관관계에 있는 객체들을 어떻게 가져올까? 라는 전략이다. 해당 전략은 크게 Eager, Lazy가 있다. Eager은 연관관계에 있는 Entity를 모두 가져오고 Lazy는 getter로 접..
Stream 공부하면서 많이 나오는 Optional변수 관련 내용을 공부해보자 1. Optional이란? 존재할수도있고 안할수도있고, 즉 nullable한 변수이다. null이 될수도있는 하나의 래퍼 클래스이다. 2. 장점 1. 우선, NPE 유발할수있는 null을 직접 다루지않아도 된다. 2. null Exception 체크를 하지않아도 된다. 방어로직이 준다. 3.사용 이런식으로 .empty()로, 싱글톤으로 이미 생성된 변수이름으로 call할수 있고, Optional.of 로 객체를 넣어서 생성할수도있다. 방법은 다양하지만, Option.of사용시 NPE조심 2. Optional.ofNullable() 로 Optional 변수 생성 이것은 nullable에 대한 처리를 해주는 메소드 이며, 아까 O..
우선 저번에 한 Stream 관련 좀더 상세 사용 예제를 작성할 예정이다. 우선 해당 배열을 List로 변경한뒤에 출력을했다. 순서는 그대로지만, 정렬을 하려면 함수를 하나더 콜해야한다. 이건, 데이터를 직접 바꾸는 일이다. 즉, List객체의 sorting 이 필요할떄마다, sort먹이고 출력 먹이고 출력이다. 굉장히 비효율적이다. 예를들어서, 어디에다가는 오름차순, 어디에다가는 내림차순일때 일일히 데이터를 바꿔야 한다는 단점이 있다. 그럼 이제Stream 객체를 사용해보자 Stream 객체의 장점은 아래와 같다. 객체라기보다는 API이다. 난 부르기 편한대로 부른다. 무튼 Stream APi를 사용하면 아래와 같은 장점이 있다. 1. Stream은 데이터를 직접적으로 변경하지 않는다. 즉 다시말하면,..
얼마전에 Stream 객체를 다룰일이 있었다. 조금 낯설었다. Stream 객체? 이걸굳이 왜쓰지? 라고 예전에 보고 어설프게 공부해서, 약간 당황쓰 그래서 조금 제대로 공부해보려고한다. 1. Stream 객체, api라고도 하는데 우선 사용하면 좋은점 우선 장점은, 한가지의 방식으로 함수형으로 몰아서 코딩을 작성할수있다. 이게 무슨 소리냐 다른건 예를 들어서, 배열에서 List로 변경하려면 원본의 데이터를 편집하고 붙여서 변형을 해야한다. 즉, 자체적으로 변형해주는, 데이터를 직접 건들여서 손봐야한다. 하지만, Stream 객체를 사용하게되면 간단하게 함수하나로, 바로사용해서변형할수있다. String 배열 이다. 이걸 List에 담으려면 어떻게 해야할까? 이런식으로 데이터의 변형을 가해, add를 해줘..
우선, MVC 패턴을 만들기 위해, 컨트롤러 생성 해준다. date.blog 에는 @SpringApplication 이 있다.(프로젝트 생성시 기본으로 설치되는 class) 여기 이 친구 하위에 controller를 만들어준다. 이유는 간단하다. @SpringBootApplication 상세 선언 화면이다. 좀 상세히 보면, 해당 경로 하위의 것들을 ComponentScan 후에, 메모리에 올려놓는다. 즉 초기에 구동할때, 어떤 것들을 new하고, 어떤것들을 heap에 두어서 관리를 할지 결정한다. 이는 IOC에 해당하는 중요한 스프링 핵심 개념이다. 즉 Class를 사용자 별도로 new하지말고, Spring 이 관리 해주어, 쉽게 메모리 관리를 하게 도와준다고 보면 된다. 간단하게, 테스트 용 Rest..
1. AOP : 스프링의 3대 요소중 하나, 관점 지향 프로그래밍이라는 뜻... 스프링은 프록시 기반 AOP, 빈 AOP 설정 등에 특화 쉽게 말하면, 중복 사용되는 코드들을 재사용 가능하게, 자바로 치면 class화 시켜서 코딩하는 것 - 가장 쉬운 예, Log print , 트랜잭션 처리, 시간처리 Aspect는 포인트 컷 + 어드바이스의 결합이다. 포인트 컷 : 어떤 메소드에 대해 어드바이스 메소드 : 어떤 메소드를 실행?? 약간 인터셉터랑 비슷하다고 생각한다. 물론, Request 단이냐 Servlet 단이냐에 따라 다르긴하지만... 동작시점설명 Before 메소드 실행 전에 동작 After 메소드 실행 후에 동작 After-returning 메소드가 정상적으로 실행된 후에 동작 After-thr..
1. 선택정렬 알고리즘 중에, 제일 시간 복잡도가 높은 알고리즘입니다. 길이가 10인 배열의 원소를 내림 차순으로 정렬을 한다고 가정, 이에 따라 비교할때, 1개씩 줄여나가면서 FULL SCAN.... JAVA로 짜본 코드.... 증말 간단하지만....많은 시간 복잡도를 초래하는....선택 정렬.... 이런 알고리즘을 안쓰는 것이 낫지만... 그래도 혹시라도 쓴다면 조심히 쓰자 10개의 배열 -> 100개 , 1000개의테스트 케이스에서는 시간초과로 FAIL 날 확률이 높다