Java
-
@Transactional은 모든 예외에 rollback이 될까?Java 2023. 11. 29. 15:21
이전에 @Transactional이 무엇인가에 대해 간단하게 알아봤었다. 그런데 "@Transcational 어노테이션은 모든 예외에 rollback이 될까?" 라는 질문에 해당 내용을 좀 더 정리 해야겠다고 생각을 했다. "@Transcational은 모든 예외에 rollback이 될까?" 정답은 아니다. @Transactional은 디폴트로 RuntimeException(UnCheckedException)과 Error에 대해서 롤백 정책을 설정한다. 그렇기에 @Transactional의 기본값을 사용하면, CheckException이 발생했을 때 롤백이 되지 않는다. //메일 보내기 @Transactional(rollbackFor = {RuntimeException.class, Error.class}..
-
Java 입출력 Scanner와 BufferedReaderJava 2023. 11. 26. 23:59
자바에서 입출력을 배울 때 Scanner를 임포트해서 Scanner객체를 만들어서 사용했었는데, 코딩 테스트 준비를 위해 사람들 코드를 참고하는데, Scanner대신 BufferedReader를 사용하길래 정리를 해봤다. Scanner Scanner 클래스는 Java에서 입력을 쉽게 처리하기 위한 유틸리티 클래스이다. 키보드, 파일, 문자열 등 다양한 소스에서 입력을 읽을 수 있으며, 다양한 데이터 유형을 편리하게 파싱할 수 있다. BufferedReader BufferedReader 클래스는 Java 입력 스트림에서 문자를 읽기 위한 클래스이다. 버퍼를 사용하여 입출력 성능을 향상시키며, read() 메서드를 통해 한 문자씩이 아니라 한 줄씩 데이터를 읽을 수 있습니다. 속도 차이의 이유 Scanner..
-
@Bean과 @ComponentJava 2023. 11. 24. 12:20
개요 스프링에서 Bean을 생성할 때, @Bean어노테이션과 @Component어노테이션 두 개를 사용하는데, 둘의 차이점이 뭘까라는 생각이 들어서 정리해보고자 한다. @Component 싱글톤 클래스 빈을 생성하는 어노테이션으로 선언적(Declarative) 어노테이션이다. 패키지 스캔안에 선언적으로 어노테이션을 작성함으로서 "해당 클래스를 정의했으니 빈으로 등록해줘" 라는 뜻이다. @Component어노테이션은 클래스에 붙여서 해당 클래스를 스프링 빈으로 등록할 때 사용된다. 일반적으로 클래스에 직접 사용하며, 해당 클래스의 객체가 스프링 컨테이너의 빈으로 등록된다. @Component 어노테이션은 컴포넌트 스캔(Component Scan)과 함께 사용되어 클래스를 자동으로 스프링 빈으로 인식하게 만..
-
객체지향 5원칙 SOLIDJava 2023. 11. 23. 15:42
객체지향 5원칙 올바른 객체지향 설계를 위해 수립한 5가지 원칙을 객체지향 5원칙(SOLID)라고 한다. 필수로 적용하지는 않지만, 적어도 이 규칙을 준수하게 되면 올바른 객체지향 설계를 할 수 있다. 1. 단일 책임 원칙 (Single Responsibility Principle) 2. 개방-폐쇄 원칙 (Open-Closed Principle) 3. 리스코프 치환 원칙 (Liskov Substitution Principle) 4. 인터페이스 분리 원칙 (Interface Segregation Principle) 5. 의존성 역전 원칙 (Dependency Inversion Principle) 단일 책임 원칙(SRP) SRP는 Single Responsibility Principle 의 약자로 객체는 단..
-
@Transactional이란 무엇인가Java 2023. 11. 22. 23:58
개요 친구가 문제를 줬다. dao.saveMail(mailDto); 이후에 예외가 발생하면 어떻게 될까? - 첨부파일은 이미 저장되어 있는데 삭제되어야 할까? - DB에 보낸 메일정보를 저장은 삭제되어야 할까? 검색해봤을 땐 스프링은 DB별로 에러코드를 정리해놔서 DB에서 생기는 에러코드를 통해 동적으로 예외를 전환해줄 수 있다는 것이다. 그래서 스프링이 제공하는 에러코드를 통해 동적으로 처리한다고 대답했지만, @Transactional 어노테이션에 대해서 찾아보면 좋을 것 같다고 추천해줘서 정리를 하려한다 트랜잭션이란? 트랜잭션이란 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시..
-
생성자 주입(Constructor Injection)을 권장하는 이유Java 2023. 11. 20. 22:52
개요 스프링에서 의존성 주입(DI : Dependency Injection)하는 방법에는 크게 3가지가 있다. 생성자 주입(Constructor Injection), 필드 주입(Field Injection), 수정자 주입(Setter Injection)으로 각각의 차이점과 왜 생성자 주입을 사용해야하는지 정리해보고자 한다. 의존성 주입 : 필요한 객체를 직접 생성한는 것이 아닌 외부로부터 객체를 받아서 사용하는 것으로 코드의 결합도를 낮추고 재사용성을 증가시킨다. 생성자 주입(Constructor Injection) @Controller Public class TestController() { TestService testService; @Autowired //단일 생성자이기 때문에 @Autowired ..
-
Early ReturnJava 2023. 11. 18. 23:48
개요 친구에게 프로젝트 피드백을 받던 중 라는 피드백을 받게되었다. 해당 기능은 메일을 전송하는 API였는데, 받는 사람이 아무도 없는 경우, 내게 메일 쓰기로 판단하고 내게 메일 쓰기 처리가 되도록 하는 기능이었다. 여러 if문이 중첩되고 부분이 있고, else if문까지 있었기 때문에 가독성이 떨어졌었다.그래서 early return을 정리해보려고 한다! Early Return은 무엇인가? Early Return은 메서드를 만드는 방법 중 하나로 특정 조건이 충족되면 함수나 메서드가 끝나기 전에 일찍 반환되는 것을 말한다. 즉, 함수가 메서드가 실행 중에 조건을 확인하고, 조건이 충족되면 나머지 코드를 실행하지 않고 즉시 반환한다. 프로젝트 코드에 적용하기 Early Return으로 수정 전 //메일..
-
JVMJava 2023. 11. 16. 21:02
JVM이란 자바 가상 머신인 Java Virtual Machine의 약자를 말한다. 가상 머신: 소프트웨어를 통해 구현된 컴퓨터 환경으로 실제 하드웨어와는 독립적으로 동작한다. 자바파일은 기본적으로 Java Compiler를 통해 바이트코드라는 형태의 중간 언어로 컴파일이 된다. 이 바이트코드는 JVM에서 실행이 되는데, JVM은 이 바이트코드를 해당 플랫폼의 기계어로 변환하고 실행한다. 이런 특성으로 자바 프로그램은 운영체제나 하드웨어에 의존하지 않고 여러 플랫폼에서 실행될 수 있으며, 특히 JVM은 자바의 핵심원칙 중 하나인 "Write once, Run Anywhere"의 핵심 역할을 수행한다. JVM구조 JVM은 크게 Class Loader, Execution Engine, Runtime Data..