본문 바로가기
728x90

전체 글158

[Java] 예외 처리와 예외 발생과 관련된 개념 정리 오늘은 자바 기본 문법을 공부하며 알게 된, 예외 처리와 예외를 발생시키는 방법에 대해 공부한 과정을 정리해 보려고 합니다. 자바 예외 처리 자바는 코드 상에서 try, catch 구문을 이용해서 예외 처리 구문을 작성할 수 있습니다. 동작 방식을 간단히 정리하면, try 구문에 작성한 코드에서 에러가 발생하는 것을 감지하고, catch 구문에서 예외 처리를 다루는 구조로 동작합니다. catch 구문은 여러 개를 작성할 수 있는데, 이때 각각의 catch 구문에는 어떠한 에러를 다룰 것인지를 명시해 줘야 합니다. 그러면 각각의 오류에 맞는 catch 구문이 예외를 처리하는 구조를 띄게 됩니다. 위 코드와 같이 divide by zero 에러가 런타임에 발생하면, java.lang.ArithmeticExc.. 2023. 1. 12.
[Spring] 빈 스코프 알아보기 빈 스코프란? 지금까지 살펴본 빈은 스프링 컨테이너와 함께 생성되어, 스프링 컨테이너가 종료될 때까지 유지된다고 배웠다. 그러나, 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 여기서 빈 스코프라는 말은 말 그대로 빈이 존재할 수 있는 범위를 의미한다. 스프링은 다양한 스코프를 지원한다. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작부터 종료까지 유지되는 가장 넓은 범위의 빈 스코프 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고, 이후에는 더 관리하지 않음. 매우 짧은 범위의 스코프이다. 웹 관련 스코프 request: 웹 요청이 들어오고 나갈 때까지 유지되는 스코프 session: 웹 세션이 생성되고 종료될 때까지 유지되는 스코프 applicati.. 2023. 1. 7.
[Spring] 빈 생명주기 콜백 빈 생명주기 콜백 시작 데이터베이스 connection pool이나, 네트워크 socket처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화 및 종료 작업이 필요하다. 이번에는 스프링을 통해 이러한 초기화 + 종료 작업이 어떻게 진행되는지 예제와 함께 정리해 보자. 예시 설명) 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정하자. 실제로 네트워크에 연결되는 것은 아니고 단순히 문자열을 출력하는 코드이다. NetworkClient 객체는 애플리케이션의 시작 시점에 connect() method를 호출해서 연결을 맺고 애플리케이션이 종료되면, disconnect() method를 호출해서 연결을 끊는다. 이러한.. 2023. 1. 6.
[Spring] 의존관계 자동 주입 다양한 의존관계 주입 방법 의존관계 주입 방법 4가지 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 이름 그대로 생성자를 이용해 의존관계를 주입하는 방법으로, 앞선 개념 공부에서 사용한 코드가 생성자 주입 방식을 통한 의존관계 주입에 해당한다. 특징 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용한다. MemberRepository, DiscountPolicy 두 개의 추상에 의존하는 OrderServiceImpl(주문 서비스 구현체)을 예시로 들어보자. @Component public class OrderServiceImpl implements OrderService{ private final MemberRepository me.. 2023. 1. 5.
BOJ - 2792, 보석 상자 매개 변수 탐색 (이분 탐색) 이번 문제는 매개 변수 탐색(parametric search) 문제입니다. 2792번: 보석 상자 보석 공장에서 보석 상자를 유치원에 기증했다. 각각의 보석은 M가지 서로 다른 색상 중 한 색상이다. 원장 선생님은 모든 보석을 N명의 학생들에게 나누어 주려고 한다. 이때, 보석을 받지 못하 www.acmicpc.net 그동안 그냥 이분 탐색이겠거니 하고 풀이했는데, 매개 변수 탐색 문제는 이분 탐색 기법을 적용하지만 다음과 같이 약간의 개념 차이가 있었습니다. 매개 변수 탐색이란? 이진 탐색(이분 탐색)을 사용해서 조건에 만족하는 최댓값을 구하는 방법을 의미한다. 정리하면, 기존의 이분(이진) 탐색은 수열 내에서 lower-bound 또는 upper-bound로 대소 비교를 통해 찾고자 하는 수의 위치를.. 2023. 1. 3.
[Spring] 컴포넌트 스캔 컴포넌트 스캔과 의존관계 자동 주입 시작하기 지금까지 스프링 빈을 등록할 때에는 자바 코드의 @Bean이나 XML의 등을 통해 설정 정보에 직접 등록할 스프링 빈을 나열했다. 예제에서는 몇 개가 안되었지만, 실제 구현 상황에서는 이렇게 등록해야 할 스프링 빈이 수십, 수백 개가 되면 일일이 등록하기 귀찮고, 설정 정보가 커지며 누락하는 상황도 발생 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 또 의존 관계를 자동으로 주입해 주는 @Autowired라는 기능도 제공한다. 코드를 통해 컴포넌트 스캔 + 의존관계 자동 주입을 알아보자. 먼저 기존의 AppConfig.java를 남겨두고, 새로운 코드인 AutoAppConfig.java를 만든다. pac.. 2023. 1. 3.
728x90