전체 글 (61) 썸네일형 리스트형 Offline 개발을 위한 .jar 파일 변환 및 활용 방법 offline 개발을 할 때 사용하기 좋은 기능입니다.현재 사용중인 라이브러리들을 모두 .jar 파일로 변환하는 기능이에요. build.gradle 파일에서 아래 코드를 넣어놓고 실행해주시면 task copyDependencies(type: Copy) { from configurations.runtimeClasspath into 'offline-libs'} {project root}/offline-libs안에 사용중인 library들이 다운로드 됩니다. 사용하시려면 원하는 저장소에 넣어놓고 사용하시거나, {project root}/libs/ 라는 디렉토리를 생성해서 그 안에 .jar파일을 넣고build.gradle에 libs dir에 있는 .jar파일을 implementation한다고 적어주시.. 자바 빌더 패턴: 객체 생성 빌더 패턴은 객체 생성을 단순화하고 유연성을 높여주는 디자인 패턴입니다. Builder 패턴 장점가독성과 유지보수성 향상: 빌더를 사용하면 객체를 생성하는 코드가 명확해지고 가독성이 향상됩니다. 또한, 새로운 속성을 추가하거나 수정할 때에도 해당 빌더만 수정하면 되므로 유지보수성이 더 높아집니다.선택적 매개변수 처리: 객체에 선택적으로 값을 설정해야 하는 경우 빌더 패턴은 편리합니다. 모든 매개변수를 단일 생성자에 전달하는 것보다 빌더를 통해 원하는 속성만 설정할 수 있기 때문입니다.불변성과 불변 객체 생성: 빌더를 사용하면 불변 객체(Immutable Object)를 쉽게 생성할 수 있습니다. 불변 객체는 여러 스레드에서 안전하며, 객체의 상태가 변경되는 것을 방지하는데 도움을 줍니다.Builder 패.. 자바 데코레이터 패턴과 람다 예외 처리: 코드 가독성을 높이는 방법 우선 간단한 예제로 시작하겠습니다. 람다속 예외처리는 다음과 같이 처리합니다.User라는 객체 리스트를 json String으로 변환하는 로직으로 try-catch문 때문에 코드가 복잡해졌습니다. private static final ObjectMapper objectMapper = new ObjectMapper(); public static void main(String[] args) { List users = findUsers(); // JsonProcessingException List jsonList = users.stream().map(user -> { try { return objectMapper.w.. 스프링 MVC에서 커스텀 ArgumentResolver로 코드 중복 줄이기: @UserCache 구현 예제 소스코드: GitHub - youseonghyeon/argument-resolverContribute to youseonghyeon/argument-resolver development by creating an account on GitHub.github.com ArgumentResolver를 이용해서 Controller 파라미터 어노테이션을 만들어보겠습니다 !! 1. 사용 목적컨트롤러(Controller)에서 인증 정보나 헤더 정보를 활용해야 할 때가 종종 있습니다. 예를 들어, 쿠키(cookie)에 저장된 세션 ID를 이용하여 사용자 정보를 가져오는 경우를 생각해보겠습니다.기존 방식으로는 다음과 같이 세션 ID를 이용하여 사용자 정보를 가져오는 코드를 작성할 수 있습니다. @GetMapping.. Lock과 Double Check Lock: 동시성 문제 해결을 위한 효율적 패턴 Lock을 사용하는 이유는 여러 Thread가 하나의 메서드에 동시 접근했을 때 발생할 수 있는 동시성 문제를 해결하기 위해 사용합니다. 예를 들어 private int count = 0; public void addCount() { count = count + 1; }이러한 로직이 있으며 아래 순서대로 쓰레드 2개가 해당 메서드를 호출합니다.[Thread-1] A 쓰레드가 addCount()에 접근하여 count:0 에 1을 더합니다.[Thread-2] B 쓰레드가 addCount()에 접근하여 count:0 에 1을 더합니다.[Thread-1] A 쓰레드가 0+1 의 결과값인 1을 count에 입력합니다.[Thread-2] B 쓰레드가 0+1 의 결과값인 1을 count에.. Java Functional Interface로 API 테스트 모듈 간결하게 만들기: 적용 사례와 코드 개선 회사 API 테스트 모듈을 개발하다가 Functional Interface의 좋은 예가 있어서, 이를 통해 개발된 모듈이 어떻게 더욱 간결하고 효과적이게 작성될 수 있었는지를 공유하고자 합니다. 먼저, Functional Interface는 Java8에 도입된 인터페이스로 단 하나의 메서드만을 가지는 인터페이스를 의미합니다.쉽게말해 인터페이스에 메서드가 하나만 있으면 Functional Interface 이죠. test() 메서드를 만들어서 점진적으로 기능을 추가해보겠습니다. 우선 응답 결과가 성공인지 실패인지 확인하는 모듈을 보시죠.protected static boolean test(Call call) { try (Response response = call.execute()) { .. Stack Overflow Error 발생 원인과 해결 방법: 재귀 호출 피하기 Stack overflow error는 함수를 재귀 호출하거나 순환 참조하거나, 너무 많은 메소드가 실행되어 제한된 스택 메모리 용량을 초과할 경우 발생합니다. 아래는 에러 발생 예시입니다.public class StackOverflowDemo { public static void recursiveMethod() { recursiveMethod(); } public static void main(String[] args) { recursiveMethod(); }}하나의 메서드를 호출하면 하나의 스택이 쌓입니다.이게 반복되어 쌓이면 StackOverflowError가 발생합니다. 에러를 해결하기 위해 '재귀', '순환 참조'로직은 가급적 피하고, 불가피하게 사.. Java에서 제공해주는 Functional Interface 목차FunctionSupplierConsumerPredicateCustom Functional Interface자바에서 제공해주는 Functional 인터페이스중 가장 많이 사용되는 4가지 인터페이스를 알아보겠습니다.1. FunctionI : input typeO : output typeI 라는 입력을 받아서 O라는 출력을 낸다. 라는 인터페이스입니다.사용법은 아래와 같습니다. Function function = (i) -> "[" + i + "]"; String result = function.apply(3); System.out.println("result = " + result);결과 : result = [3] 2. SupplierO : output typeFunction과는 다르게.. 이전 1 ··· 4 5 6 7 8 다음 목록 더보기