스트림(Stream)이란? FileInputStream과 같은 I/O 스트림과는 다른 개념이다. (I/O 스트림은 데이터 가져오기와 내보내기를 하는 일종의 통로 역할을 하는 것이다.) 스트림은 간단하게 한 줄로 요약하면 데이터 집합을 읽는 객체라고 생각하면 된다. 데이터들을 모두 읽는 객체인만큼 데이터들을 다루는데 공통적으로 쓰일만한 기능들(정렬, 필터링, 반복문 등)을 가지고 있다. list.stream().forEach(System.out::println); 참고로 스트림은 자바 8부터 지원하고 있다. 스트림(Stream) 특징 스트림은 Stream이라는 별도 객체로 기능을 이용할 수 있으며 3가지의 큰 특징이 있다. 이 특징들 때문에 컬렉션 함수를 사용하지 않고 스트림을 사용한다. 1. 데이터 소스..
자바로 코딩을 하다보면, 하다못해 Map 컬렉션을 쓰다보면 아래와 같이 '' 안에 정확한 type을 명시하는 것을 볼 수 있다. 이것은 바로 제너릭(Generic)라는 것으로 자바에서 타입을 좀 더 유연하게 받고 사용하기 위한 기능이다. Map map = new HashMap(); 제너릭(Generic)이란? Map과 같이 Object 타입이면 또는 어떤 객체를 상속 받은 하위 객체이면 무조건 사용할 수 있을 때 해당 타입을 와일드카드와 같이 다양한 정해진 범위의 다양한 타입으로 유연하게 사용할 수 있도록 정의된 일종의 키워드 같은 것이다. 참고로 제너릭은 자바 5부터 사용 가능하다. 예를 들어 아래와 같이 클래스에서 특정 필드애 대해서 호출자가 정의한 타입으로 해당 필드를 사용하고자 할 때 사용할 수 ..
스프링으로 개발을 해본 사람이라면 @Controller와 @RestController 어노테이션을 둘 다 접해본 경험이 있을 것이다. 나 또한 프론트와 백엔드가 합쳐진 웹 개발을 할 때는 @Controller를, 백엔드 개발을 할 때는 @RestController를 사용해봤다. Restful API를 개발할 떄(백엔드 개발을 할 때는)는 @RestController를 사용한다기에 @RestContoller를 사용했는데, 그렇다면 @Controller와 @RestController의 차이점은 무엇일까? @Controller와 @ResponseBody가 합쳐진 @RestController @RestController가 뭐가 다른지는 어노테이션을 까보면 확실히 알 수 있다. @RestController 어노테..
요즘 새롭게 이직한 회사에서 메시지큐라던가 이벤트 핸들이라던가 새로운 것을 많이 배우고 있다. 그 중 하나가 바로 syncronized이다. 아무래도 서비스에서 비동기적으로 처리하는 부분이 많다보니까 비동기적인 로직에서 싱크를 맞춰야 하는 부분은 싱크를 맞추기 위해서 syncronized를 사용하는 것이다. syncronized란? 멀티 쓰레드와 같이 비동기 처리를 하다보면 그 로직 중에서 특정 부분을 동기 처리하는데 사용하는 키워드다. 메소드에 키워드를 붙여서 사용하기도 하고 syncronized 블록을 만들어서 그 안을 동기 처리 하기도 한다. syncronized 키워드를 사용해서 동기 처리라고 명시 해준 부분은 한 쓰레드가 접근했을 때 해당 영역을 lock 처리하고 다른 쓰레드는 접근해 있는 쓰레..
개발을 하다보면, 개발 공부를 하다보면 DI라는 용어를 많이 접하게 된다. 거기에 덧붙여 DI 컨테이너, IoC이라는 용어도 많이 접하게 되는데 처음에 이러한 용어들을 접하고 가지 않으면 이게 뭐지? 라고 어리둥절하다가 해당 용어의 뜻을 알고 아 그렇구나 라고 바로 이해를 하게 된다. 그래서 이번에 제대로 해당 용어들에 대한 개념들을 정리해보려 한다. DI(Dependency Injection)이란? 우선 제일 기본적인 DI는 의존성 주입을 의미한다. 의존성 주입에 대해 제일 간단한 예를 들면 Controller에서 Service를 사용하는 것을 예로 들 수 있다. public class MenuController { private tinal MenuService menuService; ... } Con..
lombok은 사용하다보면 진짜 편리한 라이브러리구나를 느낀다. 개발자가 일일이 개발해야하는 것을 어노테이션 하나로 구현이 바로 가능하다. 덕분에 코드는 더 짧아지고 개발자가 코딩해야되는 양이 더 줄어든다. (물론 너무 남발하는 것도 안 좋긴 하고 때에 따라 사용한 어노테이션이 코드의 퀄리티를 떨어뜨려 놓을 수도 있다.) 이번에는 자주 사용하지만 눈여겨 보지 않았던 Lombok의 객체 생성자 관련 어노테이션을 정리해보고자 한다. lombok에서 제공하는 생성자 어노테이션은 아래와 같이 3가지가 있다. RequiredArgsConstructor, NoArgsConstructor, AllArgsConstructor @NoArgsConstructor 제일 기본인 생성자 어노테이션이다. 아무 인수가 없는 생성자..
요즘 공부가 좀 소홀해진 것 같다... 기술 블로그 작성한지 얼마나 됐다고 이러는지;; 그래도 알고 배운 것들을 잊지 않기 위해서 꾸준히 기록해야겠다. 우리는 클래스를 정의할 때 보통 아래와 같이 생성자로 정의해 클래스를 다른 곳에서 new로 생성해 사용한다. public class Test { public Test(int x, int y) { ... } } 하지만 이와 같이 생성자를 통해 객체를 생성하는 방법은 몇 가지 단점을 가지고 있다. 생성자는 명명을 할 수 없어서 생성자 안에서 별도 전처리 로직이 있을 경우 해당 전처리에서 무엇을 하는지 이해는 해당 생성자 안까지 들어가서 확인을 해야 한다. 이럴 때 정적 팩토리 메소드(Static Factory Method)를 사용한다. 정적 팩토리 메소드(S..
스터디에서 작게 프로젝트를 생성해서 코딩을 하다보니 ApplicationContext라는 객체를 사용해서 해당 Interface Ben Type에 해당하는 모든 객체들을 아래와 같이 가져오게 되었다. private final ApplicationContext applicationContext; @PostConstruct public void init() { Collection makersCollection = applicationContext.getBeansOfType(Test.class).values(); ... } ApplicationContext를 통해서 Spring 컨테이너에 등록된 빈들을 가져올 수 있다는 것을 이해하고 이렇게 사용한 것이지만 ApplicationContext란 무엇일까? App..
- Total
- Today
- Yesterday
- PostgreSQL
- springboot
- 캐시
- enum
- 스프링부트
- 공간데이터
- JPA
- Intellij
- Spring
- DB
- eclipse
- 데이터베이스
- Java
- 메시지큐
- postgres
- 캐싱
- 역직렬화
- mockito
- cache
- rabbitmq
- 어노테이션
- HttpClient
- k8s
- annotation
- DATABASE
- ssh
- MAC
- Caching
- 이클립스
- 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |