Java

Java

    JAVA ThreadPoolExecutor을 이용한 스레드 풀(Thread Pool)

    JAVA ThreadPoolExecutor을 이용한 스레드 풀(Thread Pool)

    스레드 풀 스레드 풀(Thread Pool)은 스레드를 미리 생성하고 관리하는 기법입니다. 병렬 작업 처리가 많아지면 스레드의 개수가 증가하게 되고 그에 따른 스레드 생성과 스케줄링으로 인해 어플리케이션 성능이 저하가 됩니다. 스레드 풀을 사용하면 스레드 생성 및 제거에 따른 오버헤드를 줄이고, 스레드의 재사용성을 높여 성능을 향상시킬 수 있습니다. 일반적으로 스레드 풀은 고정된 크기의 스레드 집합을 가지며, 작업을 수행하기 위해 해당 스레드를 사용합니다. 스레드 풀을 생성하고 관리하며 스레드를 처리하기 위해 Java에서는 `Executor` 인터페이스를 제공해줍니다. 개발자는 Runnable을 이용하여 작성만 해주면 스레드를 생성해서 작업을 처리하고, 처리가 완료되면 스레드를 제거하고 종료하는 작업을 ..

    Optional이란?

    Optional 나온 이유? Optional 클래스는 Java 8부터 나온 개념으로 NPE를 방지하기 위해 나왔다. 우리가 자바 개발을 할 때 객체가 null값을 주게되는 경우가 있다. 이때 이 객체를 참조하면 null을 참조하는 것이 되기 때문에 NPE[NullPointerException] 예외가 발생하게 된다. 때문에 개발자들은 NPE 발생을 줄이기 위해 null 확인을 하기 위한 조건문을 추가하였다. User user = userService.getUser(id); if(user != null) { String email = user.getEmail(); } 위와 같이 조건문으로 null 확인을 하여 NPE를 방지한다 하더라도 이러한 방식은 코드를 어지럽히기에 가독성을 저하시킨다. Java는 이를..

    Java 스트림(Stream) 정리

    Java 스트림(Stream) 정리

    읽기 전에 스트림에 대해 몇 가지만 상기도록하자!! 💡 스트림은 데이터 소스를 변경하지 않는다! 스트림은 데이터 소스로 부터 데이터를 읽기만 할 뿐, 데이터 소스를 변경하지 않는다. 필요에 따라, 정렬된 결과를 컬렉션이나 배열에 담아서 반환한다. List sortedList = list.stream() .sorted() .collect(Collectors.toList()); 💡 스트림은 일회용이다. 스트림은 Iterator 처럼 한 번만 탐색할 수 있다. 만약 다시 탐색하고 싶다면 새로운 스트림을 만들어야 한다. Stream strStream = list.stream(); strStream.forEach(System.out::println); strStream.forEach(System.out::prin..

    [Java] 스트림 생성 (리스트, 배열을 스트림으로, 숫자 범위로부터 스트림, 파일로부터 스트림)

    Collection의 Stream 생성 Stream stream = list.stream(); List list = Arrays.asList("kim", "lee", "choo"); 배열의 Stream 생성 Arrays의 stream 메소드 Stream stream = Arrays.stream(strArray); Stream stream = Arrays.stream(new String[] {"kim", "lee", "choo"}); Stream의 of 메소드 Stream stream = Stream.of(new String[] {"kim", "lee", "choo"}); // 가변 인자 Stream stream = Stream.of("kim", "lee", "choo"); 숫자 범위로부터 Stream 생..

    [Java] 변수명, 메소드명 작성법

    Java 변수명 첫 글자 소문자 + 카멜 표기법을 사용 (lower Camel Case) 특수 문자는 '_'과 '$'만 허용 의도 분명한 구체적인 변수명 짓기 boolean 변수인 경우 접두어는 'is' 접미어는 ok/check/found/success/done/error List, Collection 등의 자료형은 복수형으로 표현한다. ex) memberList X → members Java 메소드명 첫 글자 소문자 + 카멜 표기법을 사용 (lower Camel Case) 의도 분명한 메소드명 짓기 고려사항: 왜 존재하는가 / 어떤 작업을 하는가 / 어떻게 작업하는가 메소드 접두어는 동사로 시작한다. get/set is/has/can init find, check etc.. 다른 타입으로 변환하거나 빌..

    [Java] SOLID: 객체 지향 설계 5원칙

    📌SOLID: 객체 지향 설계 5원칙 https://yeo-computerclass.tistory.com/246 [Java] 객체 지향(OOP)의 4대 특성 📌객체 지향(OOP)의 4대 특성 캡슐화: 정보 은닉 상속: 재사용 추상화: 모델링 다형성: 사용 편의 💡추상화: 모델링 추상이란? 나에게 추상적이란 뜻은 구체적의 반대. 즉, 구체성이 없어서 무언 yeo-computerclass.tistory.com 바로 전의 객체 지향(OOP)의 4대 특성에 대해 설명을 하였다. 객체 지향의 4대 특성을 올바르게 사용하는 방법, 객체 지향 언어를 이용해 객체 지향 프로그램을 올바르게 설계해 나가는 원칙이 있다. 그것이 바로 객체 지향 설계 5원칙이며 5가지 원칙의 앞머리 알파벳을 따서 SOLID라 한다. SRP(..

    [Java] 객체 지향(OOP)의 4대 특성

    📌객체 지향(OOP)의 4대 특성 캡슐화: 정보 은닉 상속: 재사용 추상화: 모델링 다형성: 사용 편의 💡추상화: 모델링 추상이란? 나에게 추상적이란 뜻은 구체적의 반대. 즉, 구체성이 없어서 무언가로 표현하기 어려운 것이라는 뜻으로 받아들였다. 나처럼 추상적이란 정의를 이런 뜻으로 받아들이고 있으면 추상화란 의미를 이해하기 힘들 것이다. 정의를 다시 살펴보도록 하겠다. 추상이란 여러 가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용이다. 여기서 공통되는 특성이나 속성 따위를 추출한다는 말에 주목을 하여야 한다. 왜 피카소의 그림을 추상화라 부르고 수학이 추상적인 학문이라 할까? 피카소의 추상화 경우, 눈에 보이는 그대로의 모습이 아닌 작가가 마음속에 느껴지는 그 사람의 특징을..

    [Java] 프로그램 메모리 저장 방식

    [Java] 프로그램 메모리 저장 방식

    📌프로그램이 메모리 사용하는 방식 데이터 저장 영역 = 스태틱 영역 + 스택 영역 + 힙 영역 💡main 메소드 실행될 때 데이터 저장 영역 JRE는 프로그램안에 main() 메소드가 있나 확인한다. main() 메소드 존재가 확인되면 JVM에 전원을 넣어 부팅한다. JVM은 목적 파일을 받아 목적 파일을 실행한다. JVM은 java.lang 패키지를 데이터 영역의 스태틱 영역에 가져다 놓는다. 개발자가 작성한 모든 클래스와 import 패키지를 스태틱 영역에 가져다 놓는다. main() 메소드 구동 위해 스택 프레임이 스택 영역에 할당된다. 정확히 말하면 클래스 정의를 시작하는 중괄호를 제외한 모든 여는 중괄호를 만날 때마다 스택 프레임이 하나씩 스택 영역에 할당된다. 메소드의 인자를 저장할 변수 공간..