java 6

[JAVA] 스트림(Stream) - 가공

자바 스트림이 생성되었다면 다음과 같은 중간 처리 혹은 가공 과정을 통해 우리가 원하는 결과값을 도출해내야 한다. 이 작업은 다시 Stream을 리턴하므로 여러 작업을 붙여(chaining) 복합적으로 사용할 수 있다. filter peek map sorted 위의 대표적인 처리 과정들을 하나씩 알아보자. Filter Filter 메소드는 스트림 요소(Collection)들을 필터링하기 위해 사용된다. 내부적으로는 Predicate를 사용하고 있으며 True 혹은 False로 리턴되는 조건을 입력하므로써 여과시켜주는 기능을 한다. ArrayList alphabet = new ArrayList(Arrays.asList("a", "b", "c")); alphabet.stream() .filter("b"::e..

Language/Java 2023.03.10

[JAVA] 스트림(Stream)

스트림(Stream)은 Java 8 버전에서 추가된 기능으로 람다를 활용할 수 있는 기능을 말한다. 기존에는 배열과 컬렉션 프레임워크를 다루기 위하여 for문과 foreach 등을 이용했지만 스트림이 추가됨으로써 배열과 컬렉션을 조합하여 원하는 결과를 바로 얻을 수 있다. 함수형 프로그래밍이기 때문에 비교적 간결하고 가독성이 좋아진다는 특징이 있고, 쉬운 병렬 처리를 수행할 수 있다. 또한, 최근 부각되고 있는 reactive programming에서 사용되는 reactor를 잘 사용하기 위해 스트림에 대한 이해가 필요하기 때문에 중요하다고 할 수 있다. 여기서 Reactor는 Reactive Streams 명세를 기반으로 하는 non-blocking 앱을 개발하기 위한 자바 라이브러리를 말한다.(Spr..

Language/Java 2023.03.03

List 사용 - 동시성 문제 (Synchronized vs Concurrent)

List 사용시 갑자기 생겨나는 null 발생한 상황과 문제 스프링 스케쥴러를 통하여 하루 한 번 db에서 사라진 이미지 파일 url 값을 감지해 s3 버킷에서 삭제하는 기능을 만들고 있던 도중 생겨난 문제이다. S3에서 모든 파일 object 리스트를 받아와서 db에 현재 존재하는 file 이름 값과 대조하여 s3에 남은 고아 object들을 stream.forEach를 통해 진행하던 도중 처음 이미지가 많이 없을 때는 문제가 없었으나 이미지가 많아지고 나니 null값이 뜨며 NullPointerException이 터졌음. 발생 환경 SpringBoot version - 2.7.2 Java Complier version - 11 h2 db IDE - Intelli J 해결 및 시도 방법 1. S3에서 ..

Troubleshooting 2022.08.09

JAVA - Enum 파헤치기

Enum이 궁금한 이유. -> 과제 프로젝트를 하면서 각 기능들에 대한 테스트를 진행 중이었다. 그러던 중 postman의 너저분한 trace 보고는 `와.. 이건 아니지..`라는 생각이 들었고, exceptionHandling을 하고 싶어 졌다. Exception 발생에 대한 핸들링을 하기 위해서 나만의 에러코드와 메세지 그리고 어떻게 리턴해줄 것인가에 대한 생각을 해봐야겠다고 생각을 했고, 에러 코드와 같이 정해져있어야 하는 상수같은 값을 Enum 열거형으로 만들어야 겠다?(사용하시는걸 보고 따라해봐야겠다)라고 생각했다. 자바 공부할 때 간단하게 보고 넘어갔지만 더 좋은 활용을 위해서는 공부를 왜 쓰는지에 대해 하는 것이 좋겠다고 판단하여 포스팅을 해본다. Enum Enum은 Enumerated Ty..

Language/Java 2022.07.26

JVM 정리하기!

JVM이란? JVM은 Java Virtual Machine의 줄임말로 자바를 실행하기 위해 필요한 가상 머신을 말한다. Java의 특징으로 OS에 종속적이지 않은데 이는 Window든 Mac이든 Linux계열이든 상관없이 각 OS 에 맞는 플랫폼 JVM만 존재한다면 마치 가상 컴퓨터를 사용하듯 java class 파일들을 사용할 수 있는 것이다. JVM은 OS로부터 우리가 사용하고 싶은 프로그램이 필요로하는 메모리를 할당 받고 자바 파일이 compiler에 의해 자바 바이트 코드로 변환된 다음 클래스 로더를 통해 로딩되어 수행이 이루어지게 된다. 이 와중에 GC(Garbage Collection)같은 메모리 효율을 높이기 위한 작업을 수행하고, 각 해석된 자바 바이트 코드는 런타임 데이터 영역에 배치되게..

Language/Java 2022.07.24

객체지향처럼 생각하기

잘 정리된 References 블로그 글, 책 등이 많아서 읽어보면서 궁금한 점이나 배운 점을 정리하려고 한다. Java | 객체 지향의 3가지 특징 - 캡슐화, 상속, 다형성 객체 지향 프로그래밍(Object Oriented Programming, OOP)은 각각의 기능들을 객체화(클래스화)시켜 메인함수에서는 객체화시킨 기능들을 호출해서 사용하는 프로그래밍 기법으로 캡슐화, 상속, 다형성의 특징을 가지고 있다. 캡슐화(Encapsulation) → 캡슐화란 객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것을 말한다. 상속(Inheritance) → 자식 클래스가 부모(상위) 클래스의 모든 자원을 물려받는 것을 의미한다. 상속을 통해서 비효율적인 코드의 중복을 줄여주어 효율성을 올리고 개..

Web Dev 2022.07.21