반응형

전체 글 31

Java Streams (2) - 가공하기 ⚒

Java Streams(1)- 스트림 생성하기👀👀 에서 언급했듯이 스트림에 대한 내용은 크게 세 가지로 나눌 수 있습니다. 생성하기 : 스트림 인스턴스 생성 가공하기 : 필터링 및 매핑등 원하는 결과를 만들어가는 중간 작업 (intermediate operations) 결과 만들기 : 최종적으로 결과를 만들어내는 작업 (termianl operations) 이번 포스팅에서는 가공하기 에 대한 내용을 정리하겠습니다. 가공하기 전체 요소 중에서 다음과 같은 API를 이용해서 내가 원하는 것만 뽑아낼 수 있습니다. 이러한 가공 단계를 중간 작업(intermediate operations) 이라고 하는데, 이러한 작업은 스트림을 리턴하기 때문에 여러 작업을 이어 붙여서(chaining) 작성할 수 있습니다. L..

Dev/Java 2022.12.29

Java Streams (1) - 스트림 생성하기 👀

Streams 자바 8에서 추가한 스트림은 람다를 활용할 수 있는 기술 중 하나입니다. 자바 8 이전에는 배열 또는 컬렉션 인스턴스를 다루는 방법은 for문 혹은 foreach문을 돌면서 요소 하나씩을 꺼내서 다루는 방법이었습니다. 간단한 경우라면 상관없지만 로직이 복잡해질수록 코드의 양이 많아져 여러 로직이 섞이게 되고, 메소드를 나눌 경우 루프를 여러 번 도는 경우가발생합니다. 스트림은 '데이터의 흐름'입니다. 배열 또는 컬렉션 인스턴스 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있습니다. 또한 람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있습니다. 즉, 배열과 컬렉션을 함수형으로 처리할 수 있습니다. 또 하나의 장점은 간단하게 병렬처리(multi-thread..

Dev/Java 2022.12.27

[Java] JVM 메모리 구조

JVM (Java Virtual Machine) 이란? JVM은 Java Virtural Machine의 약자로, 자바 가상 머신이라고 부릅니다. JAVA와 운영체제 사이에서 중계자 역할을 합니다. -> JAVA가 운영체제 종류에 영향받지 않고 돌아 갈 수 있는 이유 메모리 관리를 자동으로 해줍니다(GC : Garbage Collection) 여기서 핵심은 JVM이 운영체제와 플랫폼 종류에 의존적이지 않고 독립적으로 JAVA 프로그램이 실행 된다는 것(WORA) 입니다. WORA : Write Once, Run Anywhere -> 한 번 작성한 코드는 어디서든 실행 할 수 있는 자바의 대표적인 장점 JVM 메모리 구조 자바 소스 파일은 자바 컴파일러에 의해서 바이트 코드 형태인 클래스 파일이 됩니다. ..

Dev/Java 2022.12.05

Servlet & Servlet Container

1. Servlet(서블릿) 이란? 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술 서블릿이란 자바를 사용하여 웹을 만들기 위해 필요한 기술 입니다. 자세히 설명하자면 클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송해주어야 하는데, 이러한 역할을 하는 자바 프로그램입니다. 예를 들어, 어떠한 사용자가 저의 게시글을 보기 위해 게시글 리스트 중 한개를 클릭합니다. 그때 서버는 요청한 게시글의 상세 정보를 확인 하고 사용자에게 저의 글을 띄워줘야 합니다. 이러한 역할을 수행하는 것이 바로 서블릿입니다. 그래서 서블릿은 자바로 구현 된 CGI(Common Gateway Interface)라고 흔히 말합니다. CGI (Common ..

[Java] Default Method in Java8

1. Default Method의등장 배경 1.1기존의 Interface의 문제점 위 그림은 ClassA,ClassB,ClassC 총 3개의 클래스가 InterfaceA를 구현하고 있습니다. 이때 요구사항이 추가 되면서 interfaceA에 특정 추상 메서드 methodA를 추가해야 하는 상황이 발생했습니다. 인터페이스 원칙에 의해 ClassA~C 모두 methodA를 구현해야만 합니다. 클래스의 수가 적으면 상관 없겠지만 (상관없지 않음) 만약 아래와 같은 상황이 온다면 어떨까요? classA~Z 모든 클래스 마다 methodA를 구현해줘야 합니다. 수많은 클래스들마다 methodA를 구현하면서 human mistake를 발생하지 않을 수 있을까요? 설상가상으로 methodA를 수정해야 한다면 어떨까요..

Dev/Java 2022.11.07

[Spring] IoC,DI 란?

IoC(Inversion of Control) : 제어의 역전 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라, 외부에서 결정 되는 것 을 의미합니다. 객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성하게 하여 가독성 및 코드의 중복, 유지보수를 편하게 할 수 있게 합니다. 일반적으로 자바 프로그램은 main() 메소드에서 시작해서 개발자가 미리 정한 순서를 따라 객체가 생성되고 실행됩니다. 1. 객체 생성 2. 의존성 객체 생성 (클래스 내부에서 생성) 3. 의존성 객체 메소드 호출 하지만, 스프링에서는 다음과 같은 순서로 객체가 만들어지고 실행 됩니다. 1. 객체 생성 2. 의존성 객체 주입 (스스로가 만드는 것이 아니라 제어권을 스프링에게 위임하여 스프링이 만들어놓은..

[Spring Boot] @SpringBootApplication 역할 및 내부 구현

@SpringBootApplication 이란? spring boot 프로젝트를 생성하면 프로젝트_이름Application.java가 자동으로 생성이 되고 코드를 확인해보면 @SpringBootApplication 이 있는것을 확인 할 수 있습니다. @SpringBootApplication public class TestApplication { public static void main(String[] args) throws Exception { SpringApplication.run(TestApplication.class, args); } } 아래의 이미지는 @SpringBootApplication 의 내부 구현 코드입니다. @Target({ElementType.TYPE}) @Retention(Rete..

[Java] Garbage Collection(가비지 컬렉션) 톺아보기

1. Garbage Collection(가비지 컬렉션)이란? 프로그램을 개발 하다 보면 유효하지 않은 메모리 인 가비지(Garbage)가 발생하게 됩니다. C언어를 이용하면 free()라는 메서드를 통해 메모리 해제를 해주어야 하지만 Java나 Kotlin을 이용해 개발을 하다 보면 개발자가 직접 메모리를 해제해주는 일이 없습니다. JVM의 가비지 컬렉터가 불필요한 메모리를 알아서 정리해주기 때문입니다. 대신 Java에서 명시적으로 불필요한 데이터를 표현하기 위해서는 일반적으로 null로 선언 해줍니다 Person person = new Person(); person.setName("ahkong"); person = null; // 가비지 발생 person = new Person(); pserson.se..

Dev/Java 2022.10.02

[JAVA] 메모리 누수(Memory Leak)

자바에서의 메모리 누수 자바의 메모리 누수는 더 이상 사용되지 않는 객체들이 가비지 컬렉터에 의해 회수되지 않고 누적이 되는 현상 을 의미합니다. Old 영역에 누적된 객체로 인해서 메이저 GC가 빈번하게 발생하게 되면 프로그램의 응답속도가 늦어지다 결국 OOM(OutOfMemory)오류로 프로그램이 종려 됩니다. 가비지 컬렉션을 통해 소멸 대상이 되는 객체가 되기 위해서는 유효한 참조가 존재하지 않아야 합니다. 즉, 다 쓴 객체에 대한 참조를 해제하지 않으면 가비지 컬렉션의 대상이 되지 않아 계속 메모리가 할당 되는 메모리 누수가 발생하게 됩니다. 메모리 누수가 발생하는 원인 static 변수가 객체를 참조하고 있는 경우 static 변수는 프로그램 종료 시점에 메모리가 반환되고, 사용하지 않아도 메모..

Dev/Java 2022.09.18

당신의 인생은 SSE(Server-Sent Event)를 알기 전과 후로 나뉜다

안녕하세요 ! 오늘의 포스팅은 "SSE"에 대한 글입니다. 제목 어그로를 한번 끌어봤는데요? 어그로가 맞긴 하지만 실제로 저는 SSE를 알게 된 후로 개발의 질이 높아졌기 때문에 완전히 어그로는 아니랍니다^_^ 진행률을 클라이언트에게 전달해야 하는 상황이라면, 어떻게 하실건가요? (feat. 서버의 이벤트를 클라이언트에게 전달하는 방법) 서버가 클라이언트에게 진행률을 알려줘야 하는 상황입니다. 어떻게 구현 할 수 있을까요? 1. polling , Long polling 클라이언트가 일정 주기마다 http reqeust 를 서버로 계속 보내 이벤트 내용을 전달 받는 방식 Long polling 은 말 그대로 일정 주기를 길게 잡는 방식, 그 외의 차이점은 없음 클라이언트가 지속적으로 request를 보내기..

Dev/Web 2022.09.04
반응형