[MyBatis] INSERT 성공 후 생성된 자원의 PK 같이 얻어오기 포스팅 썸네일 이미지

Java

[MyBatis] INSERT 성공 후 생성된 자원의 PK 같이 얻어오기

쿼리 매퍼인 MyBatis에서도 자원을 생성하면서 동시에 그 정보(Primary Key)를 객체에 얻어와보자 Servlet + Mybatis + Jsp 를 사용하여 웹 서비스를 만들어볼때는 몰랐는데 Spring + MyBatis로 REST API를 만들려다보니까 Mybatis를 사용해 특정 테이블에 자원을 INSERT 하고 즉시 그 자원에 대한 정보를 가져와야 하는 상황이 발생하게 되었다. 기본적으로 Mybatis 를 통한 CUD 쿼리의 작업 결과는 정수로 결과의 성공여부를 나타내주는 것 같았다. JPA에서는 객체에다가 영속화해줘서 고민해볼 필요가 없는 문제인데 조회 쿼리를 한번 더 날리고 싶지는 않았고 검색하여 본 옛 선배님들의 글들 통해 이를 적용해보았던 내용들을 기록해보았다. 문제 상황: 회원가입 ..

2022.02.26 게시됨

Java

Annotation

어노테이션이란? 어노테이션(Annotation)은 코드에 메타데이터를 추가하는 방법이다. 어노테이션은 @ 기호로 시작하며, 컴파일러나 런타임 시점에 정보를 제공하는데 사용된다. 언제쓸까? 컴파일 시점 체킹 어노테이션을 사용하여 코드를 컴파일할 때 에러를 검출하는 기능을 추가할 수 있다 런타임 처리 어노테이션을 사용하여 런타임에 동작을 변경하는 기능을 추가할 수 있다 문서 어노테이션을 사용하여 문서를 생성하는 기능을 추가할 수 있다. 자바 표준 어노테이션 @Override 선언한 메소드가 상속받은 것임을 나타낸다. @SuppressWarnings 선언한 곳의 컴파일 경고를 무시한다. @Deprecated 선언한 곳이 더이상 사용되지 않는 부분임을 선언하며 사용하면 컴파일 시 경고를 해준다. @Functio..

2022.02.20 게시됨

[java] Reflection 포스팅 썸네일 이미지

Java

[java] Reflection

처음 알게 된 Java Reflection 개념을 맛보고 간단하게 테스트 해보며 이런게 있구나 라는 것을 알아가는 목적으로 공부하고 기록해보았다. Reflection 이란 리플렉션이란 객체를 통해 클래스의 정보를 분석하는 프로그램 기법을 말한다. 구체적인 클래스 타입을 알지 못해도 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API 이다. Class, Constructor, Method, Field 정보를 가져와 객체를 생성하거나 메소드를 호출하거나 멤버 값을 변경할 수 있다. 컴파일 시점이 아니라 런타임 시점에 동적으로 특정 클래스의 정보를 추출해줄 수 있다. 언제 쓰나 동적으로 클래스를 사용할 때 컴파일 시점에는 어떤 클래스를 사용할지 모르나 런타임 시점에 특정 클래스를 가져와..

2022.02.14 게시됨

[Java] ConcurrentModificationException 해결하기 포스팅 썸네일 이미지

Java

[Java] ConcurrentModificationException 해결하기

ConcurrentModificationException이 왜 발생하나 간단하게 알아보고 해결해보자 언제 발생할까? - MultiThread 또는 객체의 변경이 허용되지 않는 환경에서 '변화' 가 일어날 때 발생 - 한 쪽에서 Collection을 Iterating 할 때 다른 스레드에서 해당 Collection 변경을 할 경우 발생 - MultiThread 환경 뿐 아니라 fail-fast iterating 도중 변경이 일어나면 발생함 Fail-Fast Iteration Fail Fast 라는 말 그대로 오류가 발생하면 즉시 던지고 작업을 중단하여 알려주는 방식이다. Iterator 의 remove 메소드 이외의 코드로 Collection 수정 시 예외가 발생한다. 예외발생 예시 컬렉션중 ArrayLi..

2022.02.04 게시됨

[Java] 올바른 Map Iteration 포스팅 썸네일 이미지

Java

[Java] 올바른 Map Iteration

Java 에서 Map 을 반복할 때 상황에 맞는 올바른 방법에 대해 알아보자 분명히 나만 몰랐을 것이다! 사소한 것이지만 정리하고 넘어가고자 한다. 개요 알고리즘 문제를 풀던 뭘 하던 늘 하던대로 Map을 반복했었는데 코드분석 플러그인에서 경고를 보게 되었다. 경고를 받았던 코드의 예시 Map map = new HashMap(); map.put("Hello", 25); map.put("Hell", 18); for (String str : map.keySet()) { System.out.println(str + map.get(str)); } Key, Value 를 루프문에서 모두 필요로 할 때 EntrySet으로 반복하라는 경고 메시지를 받았다. Key,Value 모두 사용할 때의 Non-Compliant..

2022.01.23 게시됨

[Java] 예외란 뭘까 포스팅 썸네일 이미지

Java

[Java] 예외란 뭘까

자바 Exception 에 대하여 간단하게 알아보자! Error vs Exception Unchecked vs Checked Error vs Exception Error 프로그램에서 발생하는 비정상적인 상황을 말한다 시스템 레벨에서 발생되는 심각한 상황으로 개발자가 예측하여 핸들링 할 수 없다. StackOverflowError , OutOfMemoryError 등.. 의 에러는 발생하면 복구 할 수 없다! Exception 예외는 프로그램 레벨에서 발생할 수 있는 프로그램의 정상적인 동작을 방해할 수 있는 상황을 말한다. 사용자에 의해 발생할 수 있는 유사상황으로 미리 예상하여 '처리' 할 수 있다! 예외가 발생하게 되면 발생한 시점의 정보를 포함한 예외객체가 런타임 시스템으로 전해져 알 수 있게 된다..

2022.01.10 게시됨

[Java] Abstract , Interface 포스팅 썸네일 이미지

Java

[Java] Abstract , Interface

추상클래스와 인터페이스에 대해 간단하게 알아보자 추상클래스 인터페이스 추상클래스? 클래스가 설계도라면 추상클래스는 '미완성 설계도' 라고 할 수 있다. 클래스가 미완성이라는 말은 미완성 메소드(추상 메소드) 가 포함되어있다는 의미를 말하며 미완성 설계도로 제품을 완성할 수 없듯이 추상클래스로는 인스턴스화 할 수 없다. public class Main{ public static void main(String[] args){ // 추상 클래스는 인스턴스 생성 불가 // 라면 r = new 라면(); } } abstract class 라면 { int 면; int 스프; int 물; abstract void 조리하다(); } 추상 클래스만으로는 인스턴스가 될 수 없다는 것을 실생활에 적용해보자 실제 세계에 '라..

2022.01.09 게시됨

[Java] 람다식이란 포스팅 썸네일 이미지

Java

[Java] 람다식이란

알게 모르게 써오던 람다식.. 자바에서의 람다식에 대해 간단하게 공부해보자! Lambda Expression? 람다식은 간단히 말하면 메소드를 하나의 '식' 으로 표현하는 것으로 자바 8에서 나왔다. 함수를 간략하고 명확하게 표현할 수 있게 해준다. 함수 이름과 리턴이 없기 때문에 익명함수라고도 한다. 람다식 사용 이유? 재사용할 일이 없는 기능 구현에 대해서 코드가 간결해진다. 따로 메소드를 정의하고 호출해서 사용하지 않고 간결한 식을 바로 활용하기 때문에 가독성과 생산성이 높아질 수 있다. 병렬처리가 가능하다. 불필요한 데이터 생성 없이 기능 그 자체에 집중하고자 할 때 사용한다고 한다. 함수형 프로그래밍에 대해서 나중에 공부를 더 해보아야 겠다. 익명함수는 1급객체? 1급객체가 될 수 있는 조건 1..

2022.01.06 게시됨