BackEnd/Java11 [Java]@Transactionaleventlistener 다루기 문제 상황 실제 근무 중인 곳에서 발생한 문제입니다. 엔티티를 DB에 저장한 후 외부 api를 호출하는 메서드가 있습니다. 이 메서드는 트랜잭션으로 묶여있기 때문에 외부 api 호출 시 장애가 발생하면 DB 저장 작업까지 모두 RollBack이 되었습니다. 문제는 메서드가 호출되면 DB 저장은 필수로 이루어져야 하기 때문에 RollBack 현상이 발생하면 안 된다는 것입니다. @Transactionaleventlistener이란? 메서드를 트랜잭션을 묶어서 처리하는 경우 트랜잭션이 끝나는 시점에 호출하는 이벤트 리스너입니다. 예를 들어 회원가입 후 쿠폰을 발급하는 로직이 있다고 가정했을 때, 회원가입은 정상적으로 완료되었지만 쿠폰 발급이 실패한 경우 회원가입 처리까지 rollback 되는 현상이 발생하게.. BackEnd/Java 2023. 9. 15. [Java] Default Methods(디폴트 메소드) Default Method 란? 인터페이스는 기능에 대한 선언만 하기 때문에, 실제 코드를 구현한 로직은 포함될 수 없다. 하지만 자바 8에서 이러한 규칙을 깨는 기능이 나왔다. 그것이 Default Method(디폴트 메소드)이다. 메소드 선언 시 default를 명시하게되면 인터페이스 내부에서도 로직이 포함된 메소드를 선언할 수 있다. ** 접근 제어자에서 사용하는 default와 키워드가 같다. 하지만 접근 제어자에선 아무 것도 명시하지 않아도 'default'라고하고, 인터페이스의 default method는 'default'라는 키워드를 명시해야 한다. 1 2 3 4 5 interface TestInterface { default void print() { System.out.println("H.. BackEnd/Java 2022. 10. 20. [Java] 싱글톤(Singleton)이란? 싱글톤 패턴이란? 객체의 인스턴스가 오직 1개만 생성되는 패턴 생성자가 여러번 호출되어도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최로에 생성한 객체를 리턴한다. 아래는 예시이다. 1 2 3 4 5 6 7 8 9 10 11 public class SingleTonEX{ private static SingleTonEx instance; //singleTonEx클래스를 static으로 선언하여 다른곳에서 사용할 수 있게 함 private SingleTonEx(){} //생성자를 외부에서 호출 못하게 private으로 생성 public static SingleTonEx getInstance(){ if(instance==null){ SingleTon = new SingleTonEx();.. BackEnd/Java 2022. 10. 10. [Java] 메소드 레퍼런스란? 메소드 레퍼런스란? 람다식에서 불필요한 매개변수를 제거하여 사용할 수 있게 해주는 것 즉, 람다 표현식을 더 간력하게 만드는 표현방법이라고 할 수 있다. 메소드 레퍼런스를 이해하기 위해선 람다식을 이해해야 한다. 람다식 이해에 관한 글은 아래 링크에서 확인할 수 있다. https://grandma-coding.tistory.com/entry/Java-함수형-인터페이스란 [Java] 함수형 인터페이스란? 함수형 인터페이스란? 추상 메서드를 하나만 갖는 인터페이스 @FuncationInterface 어노테이션을 갖는 인터페이스 Single Abstract Method(SAM) 인터페이스 예시 1 2 3 public interface FunctionalInterface {.. grandma-coding.tis.. BackEnd/Java 2022. 10. 9. [Java] 함수형 인터페이스란? 함수형 인터페이스란? 추상 메서드를 하나만 갖는 인터페이스 @FuncationInterface 어노테이션을 갖는 인터페이스 Single Abstract Method(SAM) 인터페이스 예시 1 2 3 public interface FunctionalInterface { public abstract void doSomething(); } Colored by Color Scripter cs 함수형 인터페이스를 사용하는 이유 자바의 람다식을 사용할 때 함수형 인터페이스로만 접근이 가능하기 때문이다. @FuncationInterface 어노테이션을 붙여주면 함수형 인터페이스의 규칙을 위반했을 때 에러를 발생시킨다. 기존 방식 1 2 3 4 5 6 7 8 FunctionalInterface func = new F.. BackEnd/Java 2022. 10. 2. [JAVA] LinkedList의 개념 및 사용법 LinkedList란 ? 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조 풀어쓰자면 다음과 같다. 데이터를 담고 있는 노드들이 연결되어 있고, 노드의 포인터가 이전 노드와 다음 노드와의 연결을 담당한다. 중간에 데이터를 추가하거나 삭제해도 인덱스가 당겨지거나 밀리는 현상이 없다. 따라서 ArrayList에 비해 데이터 추가/삭제가 용이하지만 인덱스가 없기 때문에 탐색 속도가 느리다. 따라서 탐색 또는 정렬을 자주 하는 경우엔 배열을 사용하고 데이터의 추가/삭제가 많은 경우 연결리스트를 사용하는 것이 좋다. LinkedList 사용법 1. LinkedList 선언 1 2 3 4 5 LinkedList list = new LinkedList();//타입 미설정. Object로 선언.. BackEnd/Java 2022. 9. 7. [JAVA] for문 리팩토링하기(List) JAVA에서 반복문을 사용할 때 for문이나 for-each문을 사용한다. for문과 for-each문 중 어떤 것을 사용하는 것이 더 빠를까? 실제로 실험해본 결과 ArrayList, Array => for문 win LinkedList => for-each문 win 이라는 결과가 나왔다. 따라서 ArryaList/Array를 사용할 경우 for문을, LinkedList를 사용할 경우 for-each문을 사용하는 것이 속도 개선에 좋은 영향을 준다! 그런데 for-each문의 단점은 인덱스를 사용할 수 없다는 것이다. 인덱스가 꼭 필요하다면? 1 2 3 4 5 6 7 static void main(List list){ int i = 0; for(T s : list){ //개발자가 작성한 코드 i++; }.. BackEnd/Java 2022. 9. 4. [JAVA] 생성자 정리 필기로 정리한 내용을 포스팅하려고 한다. BackEnd/Java 2022. 9. 4. [Java]java.math.BigDecimal cannot be cast to java.lang.Integer 에러 자바에서 발생하는 에러이다. 원인: MySQL 의 INT형 컬럼 데이터를 HashMap 타입으로 받아 java에서 사용하려고 할 때 발생 해결: String.valueOf() 를 사용 ----------------------------------------------------------------------------------------------- 예시. before : (int) num.get(key); after: Integer.ParseInt(String.valueOf(num.get(key))); BackEnd/Java 2022. 3. 4. java.lang.nullpointerexception 오류 JAVA, C를 이용하여 개발하다 보면 java.lang.nullpointerexception 오류가 적잖이 발생한다. 널 어쩌구 하는 걸 보니 뭔가 빠졌다는 것 같은데.,, 원인은 간단하다. 원인: 객체 생성 후 인스턴스를 생성하지 않은 상태에서 NULL 오브젝트를 사용해서 발생 해결방법은 여러 가지이다. 1. 방어 코드 사용 try~catch를 사용하여 java.lang.nullpointerexception을 예외 처리하고 null인지 아닌지 비교할 수도 있다. 2.null Parameter를 넘기지 말자. 뒷단에서 방어 코드를 짜 놓는다고 하더라도 "의미 없는 NULL"은 파라미터로 넘기지 말자. 예를 들어 size라는 변수를 null로 선언을 한 뒤 문자의 길이를 받아온 뒤 연산을 하는 로직을 만.. BackEnd/Java 2022. 2. 27. Java - 문자열(String)에 큰따옴표("), 작은 따옴표(') 넣는 방법 자바에서는 문자열(String)을 큰 따옴표로 감싸줍니다. 그렇기 때문에 문장 안에 큰 따옴표를 구분하기 위해선 이스케이프 시퀀스를 사용해주어야 합니다. 큰 따옴표는 \" 로 사용해주시면 됩니다. 1 2 3 String example = "\"큰 따옴표 넣기\""; System.out.println(example); // return "큰 따옴표 넣기" cs 반환 값: "큰 따옴표 넣기" 마찬가지로 작은 따옴표는 \' 로 사용하시면 됩니다. 1 2 3 String example = "\'작은 따옴표 넣기\'"; System.out.println(example); // return '작은 따옴표 넣기' cs 반환 값: '작은 따옴표 넣기' 참조: https://coding-factory.tistory.co.. BackEnd/Java 2021. 11. 18. 이전 1 다음