목록Java (38)
Java / Spring

프로젝트를 진행하다가 회원의 월별 주간별로 데이터를 구해야 하는 경우가 발생하였고 구글링하다보니 유용한 패키지가 있어 기록하게 되었다. 예를 들어 어떤 회원의 월별에 특정 주차의 데이터를 구하려고 할때아래 2개의 패키지를 import 해준다import java.time.LocalDate;import java.time.temporal.WeekFields; 코드의 로직은 아래와 같다. 테스트를 위해 별도의 src 파일에 작성하였다.package study;import java.util.Locale;import java.time.LocalDate;import java.time.temporal.IsoFields;import java.time.temporal.WeekFields;public class WeekO..

기본적으로 Exception(예외처리) 에는 check 와 uncheck 예외가 존재한다. 두 종류의 예외를 어떤 경우에 사용해야 할까?- 기본적으로는 언체크(런타임) 예외를 사용한다 (체크 예외는 비즈니스 로직상 의도적으로 던지는 예외에만 사용). 1. 체크 예외 (컴파일 시점에 발생하는 예외 -> try catch 또는 throws 처리)※ 체크예외 사용 예)계좌 이체 실패 예외- 계좌 이체 실패처럼 매우 심각한 문제는 개발자가 실수로 예외를 놓치면 안된다고 판단 할 수 있다. 이 경우 체크 예외로 만들어 두면 컴파일러를 통해 놓친 예외를 인지할 수 있다.결제 시 포인트 부족 예외로그인 ID, PW 불일치 예외 ** 체크 예외의 문제점위 그림의 흐름(체크예외)을 보면 제일 먼저 Repository ..

메모리 가시성(memory visibility) 이란?멀티스레드 환경에서 한 스레드가 변경한 값이 다른 스레드에서 언제 보이는지에 대한 문제를 메모리 가시성(memory visibility)라 한다. public class VolatileFagMain { public static void main(String[] args) { MyTask task = new MyTask(); Thread t = new Thread(task, "work"); log("runFlag = " + task.runFlag); t.start(); sleep(1000); log("runFlag false 로 변경 시도"); task.runF..

1. reduce() 란 ?스트림의 요소를 하나씩 줄여가며 누적연산 수행 스트림의 요소를 결합하여 단일 값을 생성하는 연산 String[] strArr = { "Inheritance", "Java", "Lambda", "stream", "OptionalDouble", "IntStream", "count", "sum"};(문자열 배열 strArr 을 생성하였고, 해당 문자열 배열을 reduce() 메서드를 사용하여 조건에 만족하는 계산식을 출력)' reduce() 함수를 사용하여 출력할 조건1) count() : strArr 배열 내의 모든 요소의 수2) max() : strArr 배열 내의 모든 요소 중 가장 긴 문자열3) min() : strArr 배열 내의 모든 요소 중 가장..

스트림이란 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 놓았다. 여기서 데이터 소스를 추상화 하였다는 것은, 데이터 소스가 무엇이던 간에 같은 방식으로 다룰 수 있게 되었다는 것과 코드의 재 사용성이 높아진다는 것을 의미 한다..(스트림을 이용하면, 배열이나 Collection 뿐만 아니라 파일에 저장된 데이터도 모두 같은 방식으로 다룰 수 있다.) 0. 스트림의 표준 함수형 인터페이스 요약Runnable : 매개변수가 없고 반환 값이 없을 때Supplier : 매개변수가 없고 반환값이 있을 때Consumer : 매개변수가 있고 반환값이 없을 때Function : 매개변수가 있고 반환값이 있을 때Predicate : 매개변수가 있고 반환 값이 boolean Type 일때 ..

1) New (새로운 상태)스레드가 생성되고 아직 시작 되지 않은 상태이며 Thread 객체는 생성 되었지만 start() 메서드가 실행되지 않은 상태 2) Runnable (실행 가능 상태)스레드가 실행될 준비가 된 상태 (실제 CPU 에서 실행될 수 있음)start() 메서드가 호출되면 스레드는 이 상태로 들어간다 (ex : thread.start() )(※ 참조 : Runnable 상태에 있는 모든 스레드가 동시에 실행 되는 것은 아니다. OS 의 스케줄러가 각 스레드에 CPU 시간을 할당하여 실행, Runnable 상태에 있는 스레드는 스케줄러의 실행 대기열에 포함되어 있다가 차례로 CPU 에서 실행된다.)실제 스케줄러에서 실행중인 스레드나 실행 대기중인 상태도 모두 실행 상태라고 한다 (자바에서..

람다식의 -> 형식의 코드를 더 짧게 줄일 수 있는 메서드 참조 형식public class LambdaEx8 { public static void main(String[] args) { Function f = s -> Integer.parseInt(s); Function f2 = Integer::parseInt; Integer fResult = f.apply("20"); Integer f2Result = f2.apply("20"); System.out.println("f2Result = " + f2Result); System.out.println("fResult = " + fResult); // IntBinary..
Function 인터페이스의 apply 메서드apply() 메서드는 제네릭 타입인 한 개의 매개변수를 전달받아 특정 작업을 수행 후 값을 반환하는 메서드이다내부에 있는 메서드의 계산을 실행하기 위해 외부에서 값을 받아 메서드를 실행하는 parameter 와 비슷하다 먼저 세 개의 Function 타입의 객체를 생성하여 특정 작업을 수행 후 값을 반환하는 람다 표현식을 할당한다.세 개의 함수형 인터페이스에 매개변수를 전달 받기 위해 apply() 메서드를 사용하여 매개변수를 적용 후 계산식을 진행public class ApplyMethod { public static void main(String[] args) { // 함수형 인터페이스로 세개의 계산식을 정의(Add, Minus, Mul..
1. 인터프리터 언어 (Interpreted Language)인터프리터 언어는 코드가 실행될 때 한 줄씩 읽고 즉시 실행합니다.에러 처리: 인터프리터 언어에서 프로그램을 실행하다가 에러가 발생하면, 프로그램이 그 시점에서 멈추고 에러를 출력합니다. 에러가 발생한 이후의 코드는 실행되지 않습니다.1. 컴파일러 언어 (Compiled Language)컴파일러 언어는 프로그램을 실행하기 전에 전체 코드를 미리 컴파일(번역)합니다.에러 처리: 컴파일러는 프로그램 전체를 한 번에 분석하고, 모든 에러를 보고합니다. 컴파일 도중 발견된 에러는 모두 출력되며, 에러가 해결되지 않으면 프로그램은 실행되지 않습니다. 컴파일이 성공적으로 완료된 후에야 프로그램이 실행됩니다.즉, 인터프리터 언어는 에러가 발생한 시점에서 실..
Thread.sleep() 메서드를 사용할 때는 항상 IntteruptException 예외 처리를 해주어야 했다하지만 아래와 같이 Thread.sleep() 의 예외처리를 먼저 수행하는 별도의 클래스를 생성하고 해당 메서드를 정적으로 호출하는 방식을 사용 하면 아래와 같이 코드의 수를 줄이고 시인성을 높일 수 있다. 1. Thread.sleep(); 클래스 정의 전package thread.control;public class CheckedExceptionMain { public static void main(String[] args) throws Exception { throw new Exception(); } static class CheckedRunnable imple..