Category 133

8. 빈 생명주기 콜백 (-ing)

8.1 빈 생명주기 콜백 시작 애플리케이션은 시작 시점에 필요한 연결을 미리 해두고, 종료 시점에 연결을 안전하게 종료하려면, 객체의 초기화와 종료 작업이 필요하다. 1) 데이터베이스 커넥션 풀 웹 어플리케이션과 데이터베이스는 서로 다른 시스템이므로, 데이터베이스 드라이버를 통해 데이터베이스에 연결 사용자로부터 요청이 올때마다 TCP 소켓을 열고 닫는 것은 시간이 오래 걸림 어플리케이션 서버와 DB를 미리 연결해 놓고, 필요할 때 재활용하여 사용 2) 네트워크 소켓 소켓을 미리 연결해 놓고, 사용자 요청이 들어오면 열러 있는 소켓을 이용하여 빠른 연결 가능 스프링을 통한 초기화와 종료 작업 예제는 다음과 같다. 서버가 뜨기 전에 외부 네트워크에 미리 연결을 해 놓고, 서버 종료 전에 미리 연결을 끊어야 ..

7. 의존관계 자동 주입 (-ing)

7.1 다양한 의존관계 주입 방법 의존관계 주입 4가지 방법 1. 생성자 주입 2. 수정자 주입 (setter 주입) 3. 필드 주입 4. 일반 메서드 주입 1. 생성자 주입 - 생성자를 통해서 의존 관계를 주입 받는 방법이다. [ 특징 ] - 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. (이후에 값을 setting 할 수 없다.) - 불변, 필수 의존관계에 사용 (더 이상 값을 바꿀 수 없기 때문에 버그 가능성이 낮아짐!) @Component public class OrderServiceImpl implements OrderService { // 필수 값 private final MemberRepository memberRepository; private final DiscountPolicy ..

카테고리 없음 2023.05.27

6. 컴포넌트 스캔 (-ing)

6.1 컴포넌트 스캔과 의존관계 자동 주입 시작하기 - 지금까지 스프링 빈을 등록할 때는 자바 코드의 @Bean/ XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열 - 실제로는 이렇게 등록해야 할 스프링 빈이 수십 수백개이므로, 일일이 등록하기도 귀찮고, 설정 정보도 커지고, 누락하는 문제도 발생 - 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. - 의존관계도 자동으로 주입하는 @Autowired 라는 기능도 제공한다. 컴포넌트 스캔과 의존관계 자동 주입을 알아보자. 새로운 AutoAppConfig.java를 다음과 같이 작성한다. package hello.core; import org.springframework.context.an..

카테고리 없음 2023.05.27

5. 싱글톤 컨테이너 (-ing)

5.1 웹 애플리케이션과 싱글톤 - 스프링은 기업용 온라인 서비스 기술을 지원하기 위해 탄생 - 대부분의 스프링 애플리케이션은 웹 애플리케이션이지만, 웹이 아닌 애플리케이션 개발도 모두 가능! - 웹 애플리케이션은 보통 여러 고객이 동시에 요청 3명의 클라이언트가 동시에 요청할 때, 클라이언트 A에게 객체를 new로 생성해서 반환 클라이언트 B에게 객체를 new로 생성해서 반환 클라이언트 C에게 객체를 new로 생성해서 반환 즉, 클라이언트에게 요청이 올때마다 객체를 생성하고 반환해야 한다. 다음은 스프링 없는 순수한 DI 컨테이너 테스트 코드이다. package hello.core.singleton; import hello.core.AppConfig; import hello.core.member.Mem..

카테고리 없음 2023.05.20

4. 스프링 컨테이너와 스프링 빈 (-ing)

4.1 스프링 컨테이너 생성 스프링 컨테이너가 생성되는 과정은 다음과 같다. //스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); - ApplicationContext 를 스프링 컨테이너 - ApplicationContext 는 인터페이스 - AnnotationConfigApplicationContext는 구현체 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. (최근 XML 방식은 거의 사용되지 않는다.) (AppConfig 를 사용했던 방식 -> 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만..

카테고리 없음 2023.05.20

[백준/Python] 9020번 골드바흐의 추측 (기본수학2)

9020번 : 골드바흐의 추측 문제 1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아니다. 골드바흐의 추측은 유명한 정수론의 미해결 문제로, 2보다 큰 모든 짝수는 두 소수의 합으로 나타낼 수 있다는 것이다. 이러한 수를 골드바흐 수라고 한다. 또, 짝수를 두 소수의 합으로 나타내는 표현을 그 수의 골드바흐 파티션이라고 한다. 예를 들면, 4 = 2 + 2, 6 = 3 + 3, 8 = 3 + 5, 10 = 5 + 5, 12 = 5 + 7, 14 = 3 + 11, 14 = 7 + 7이다. 10000보다 작거나 같은 모든 짝수 n에 대한 골드바흐 파티..

[백준/Python] 4948번 베르트랑 공준 (기본수학2)

4948번 : 베르트랑 공준 문제 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼프가 1850년에 증명했다. 예를 들어, 10보다 크고, 20보다 작거나 같은 소수는 4개가 있다. (11, 13, 17, 19) 또, 14보다 크고, 28보다 작거나 같은 소수는 3개가 있다. (17,19, 23) 자연수 n이 주어졌을 때, n보다 크고, 2n보다 작거나 같은 소수의 개수를 구하는 프로그램을 작성하시오. https://www.acmicpc.net/problem/4948 4948번: 베르트랑 공준 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보..

[백준/Python] 1929번 소수 구하기 (기본수학2)

1929번 : 소수 구하기 문제 M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오. https://www.acmicpc.net/problem/1929 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 풀이 코드 m, n = map(int, input().split()) for i in range(m, n+1): if i == 1: continue for j in range(2, int(i ** 0.5) +1): if i % j == 0: break else: print(i) m, n = map(int, input().split()) ..

[백준/Python] 11653번 소인수분해 (기본수학2)

11653번 : 소인수분해 문제 정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오. https://www.acmicpc.net/problem/11653 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net 풀이 코드 n = int(input()) if n == 1: print('') else: for i in range(2, n+1): if n % i == 0: while n % i == 0: print(i) n = n / i n = int(input()) - 입력받은 정수를, 변수 n 에 저장 - input() 을 통해 한 줄의 문자열을 입력받음 - 입력받은 문자열을 정수로 처리하기 위해 int() 함수를 사용 if n =..

[백준/Python] 2581번 소수 (기본수학2)

2581번 : 소수 문제 자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다. https://www.acmicpc.net/problem/2581 2581번: 소수 M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다. www.acmicpc.net 풀이 코드 m = int(input()) ..