본문 바로가기
728x90

[JAVA]/JAVA 기본44

try - catch 문을 여러 경우의 수로 한 번에 이해해보자. try - catch - finally 문 try { // 예외 발생 가능성이 있는 코드 } catch (Exception1 e1) { // Exception1 유형의 예외 발생 시 실행할 코드 } catch (Exception2 e2) { // Exception2 유형의 예외 발생 시 실행할 코드 } finally { // finally의 사용 여부는 옵션, 예외 발생 여부와 관게없이 항상 실행함. } try 안에 발생 가능성이 있는 Exception을 catch에 넣고 에러 발생 시 처리하는 테스트 private static void test1() { /** * 메서드 내 try 문에서 에러가 발생하고 catch에서 잡아 throw를 하지 않았기 때문에 그대로 넘어간다. */ System.out.pr.. 2023. 5. 24.
JAVA + Spring Data JPA 프로젝트에 다중 DB를 연결해보자. 💡 회사에서 새롭게 서버를 리팩터링 하는 도중에 하나의 프로젝트에 2개 이상의 데이터베이스를 연결해야 했다. 구글링을 통해 검색해 본 결과 생각보다 간단하게 할 수 있었다. 집에 와서 프로젝트를 간단하게 요약하여 재구성한 후 테스트를 진행해보려고 한다. Spring Initializr Spring Initializr 설정이다. 원래 H2로도 테스트를 해보고 싶었는데 못해서 의미가 없게 됐다. 프로젝트 패키지 구조 이 테스트의 핵심은 데이터베이스 2개를 하나의 프로젝트에 연결하고, 패키지 별로 사용 db를 나눈 후에 이를 기준으로 정상적으로 데이터베이스와 해당 패키지의 클래스가 연결되는지 보는 것이다. 따라서 db1(main), db2(second) 서버와 연결할 각각의 Entity와 Repository .. 2023. 5. 23.
DTO 클래스 ↔︎ Entity 클래스 Mapping에 대한 정리(ModelMapper, Mapstruct, 수동매핑) DTO(Data Transfer Object)란? 데이터를 전송하기 위한 객체이다. 클라이언트에서 서버 쪽으로 요청하는 요청 데이터와 서버에서 클라이언트 쪽으로 전송하는 응답 데이터 사이에서 사용된다. 어떠한 비즈니스 로직도 가져서는 안 되며 저장, 검색, 직렬화, 역직렬화 로직만 가져야 한다. DTO 클래스를 활용할 때의 장점 요청 및 응답 데이터를 하나의 객체로 전달하거나 받음으로써 코드를 간결하게 유지할 수 있다. HTTP 요청 및 응답을 받는 핸들러 메서드는 말 그대로 요청 및 응답을 받는 것이 주목적이기 때문에 최대한 간결하게 작성되어야 한다. 데이터의 유효성(Validation) 검증을 단순화할 수 있다. DTO 클래스를 사용하면 유효성 검증 로직을 DTO 클래스로 빼내어 핸들러 메서드의 간결.. 2023. 5. 8.
JVM과 자바 메모리 구조 간단 요약 정리 💡 회사에서 받은 맥북으로 실무 과제를 진행하다가 java.lang.OutOfMemoryError: Java heap space라는 에러를 만났다. 이 에러는 힙 영역의 메모리 공간 부족 때문에 발생하는 에러이다. 평소 스택 영역, 힙 영역 등 자바의 메모리 부분에 대해 자세히 모르는 것이 찜찜했었기 때문에 이번 기회에 공부해 보자는 생각이 들었다. JVM(Java Virtual Machine) 자바는 컴파일러를 통해 기계어로 변환되는 언어이다. 컴파일이란 특정 프로그래밍 언어를 기계가 이해할 수 있게 번역하는 과정이다. 자바소스를 자바 컴파일러가 바이트 코드로 변환시키고 JVM은 바이트 코드를 운영체제에 맞는 기계어로 변환해 준다. 자바의 장점이라고 불리는 플랫폼 독립성, Write Once Run A.. 2023. 5. 5.
자바에서의 문자열 비교 ==, equals의 차이 String 변수 생성 시 주소 할당 방법 1. 리터럴(literal)을 이용한 방식 String str1 = "hello"; // literal Heap 영역의 string constant pool이라는 영역에 저장된다. 2. new 연산자를 이용한 방식 String str2 = new String("hello"); //new 연산자 Heap 영역에 저장된다. 주소값 비교(==)와 값 비교(equals) == 연산자 비교하고자 하는 두 대상의 주소값을 비교한다. equals 메서드 String 클래스의 메서드로 비교하고자 하는 두 대상의 값 자체를 비교한다. 기본 타입(int, char) 등은 Call by value 형태로 기본적으로 대상의 주소값을 가지지 않지만, String은 일반적인 타입이 아니.. 2023. 3. 24.
예외 던지기(throw & throws) 30초 요약 정리 예외 발생시키기(throw) 프로그램적인 에러가 아닌 로직상 개발자가 일부러 에러를 내어 로그에 기록하고 싶을 때 사용한다. 사용 시에 new 생성자로 예외 클래스를 초기화하여 던진다. 예외 떠넘기기(throws) 예외가 발생할 수 있는 코드를 작성할 때 다른 곳에서 예외를 처리하도록 호출한 곳으로 예외를 떠넘기기 위해 사용한다. 해당 메서드 안에 try - catch 문이 없으면 해당 메서드를 호출한 상위 스택 메서드로 가서 예외를 처리한다. 참고 https://inpa.tistory.com/entry/JAVA-☕-예외-던지기throw-예외-연결Chained-Exception 2023. 3. 15.
import 문, static import 문 import 문 클래스를 사용할 때 패키지 이름을 생략할 수 있게 한다. 컴파일러에게 클래스가 속한 패키지를 알려주는 역할을 한다. static import 문 static을 사용할 때 클래스 이름을 생략할 수 있게 한다. 2023. 2. 27.
[JAVA] 다형성 다형성 상위 클래스 타입의 참조변수를 통해서 하위 클래스의 객체를 참조할 수 있도록 허용한 것 public class Main { public static void main(String[] args) { Burger Burger = new Burger(); // 객체 타입과 참조변수 타입이 같음 Bigmac Bigmac = new Bigmac(); // 객체 타입과 참조변수 타입이 같음 Burger burger = new Whopper(); // 상위 클래스 타입(Burger)의 참조변수로 하위클래스(Whopper)의 객체를 참조 가능 Shakeshak burger = new Burger(); /** * 하위 클래스 타입의 참조변수로 상위클래스의 객체를 참조 불가능 * 실제 객체인 Burger의 멤버개수.. 2023. 2. 10.
728x90