분류 전체보기 92

[SpringBoot + Java] 스프링 기본(Bean 의 생명주기 콜백)

들어가며 - 인프런 김영한 님의 빈 생명주기 강의 정리 입니다. - 강의의 예시를 가져와 보자면 외부 네트워크에 연결 해야 하는 객체를 생성 한다고 가정 할 때 다음 문제가 발생 할 수 있습니다. . 객체가 생성 됨과 동시에 모든 의존 주입을 마친다면 url 과 같이 외부에서 데이터를 받아서 주입 해야 하는 데이터의 경우 원치 않는 값으로 생성 되게 됩니다. . 또한 스프링 컨테이너가 종료 되기 직전에 스프링 빈을 안전하게 소멸 시켜야 안전한 종료가 가능 합니다. 스프링 빈의 생명주기 - 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료 - 위의 생명주기를 따르게 되면 빈이 생성 된 후 의존 관계를 주입 하게 되고 사용 준비가 ..

백준_22251 : 빌런 호석 - C++

문제 https://www.acmicpc.net/problem/22251 22251번: 빌런 호석 LED를 2개까지 바꿀 수 있을 때, 5층에서 3층, 6층, 8층, 그리고 9층으로 바꿔버릴 수 있다. www.acmicpc.net 문제 해석 - N(최대 층수), K(표기 자릿수), P(최대 변경 가능 횟수), X(현재 층수) 가 주어진다. - 이 때 현재 층수 K 를 최대 변경 가능 횟수인 P 만큼 변경해 몇개의 다른 숫자로 변경 가능 한지 찾아내면 되는 문제이다. 문제 풀이 - 우선 전자시계식 숫자는 사람은 알아 보기 쉽지만 컴퓨터는 판별이 어려우니 이를 배열화 하여 저장 하여야 한다. . 이를테면 0 -> 1, 1, 1, 0, 1, 1, 1 이런 식으로 표시등 7개에 번호를 붙여 점등시 1 아닐시 0..

알고리즘/백준 2023.08.07

[SpringBoot + Java] 스프링 기본(의존 관계 자동 주입의 4가지 방법)

들어가며 - 앞서 생성자를 통해 의존 관계를 주입 하는 방법에 대해 알아 보았습니다. - 이러한 방법은 생성자를 사용 하기에 해당 class 가 생성 될 때 의존 관계가 주입 되고 그 후 변화 하지 않는다는 특성을 지닙니다. - 하지만 프로그램을 짜다 보면 다른 형태가 필요 할 때도 존재 합니다. 4가지 방법 - 스프링 에서 의존관계를 주입 하는 방법에는 크게 4가지가 존재 합니다. . 생성자 주입 . 수정자 주입 . 필드 주입 . 일반 메서드 주입 생성자 주입 - 지금까지 사용 하였던 방법입니다. . class 의 생성자에 의존 관계 주입 코드를 넣어 객체가 생성됨과 동시에 의존 관계가 주입 됩니다. . 따라서 단 한번만 주입이 실행 됩니다. . 한번만 호출 되기에 불변의 측성을 가지며, final 로..

[SpringBoot + Java] 스프링 기본(Autowired, Component)

들어가며 - 인드런 김영한 님의 강의 '컴포넌트 스캔' 의 정리 입니다. - 앞서 @Bean 을 통한 스프링 빈의 관리에 대해 알아 보았습니다. - 하지만 아주 큰 프로젝트에서 스프링 빈이 굉장히 많아 지면 어떨까요 - 설정 정보고 커지고 유지 보수가 어렵게 되고 무엇보다 실수 할 가능성이 커지게 됩니다. - 이러한 문제를 ComponentScan 과 Autowired 로 해결 할 수 있습니다. ComponentScan - 위에 언급 한 것 처럼 너무 많은 Bean 을 수동으로 등록 하게 되면 문제가 발 생 할 수 있습니다. - ComponentScan 은 Scan 대상 중 @Component 어노테이션이 달린 모든 class 를 자동으로 스프링 빈에 등록 해 줍니다. ComponentScan 사용법 -..

백준_1863 : 스카이라인 쉬운거 - C++

문제 https://www.acmicpc.net/problem/1863 1863번: 스카이라인 쉬운거 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 50,000) 다음 n개의 줄에는 왼쪽부터 스카이라인을 보아 갈 때 스카이라인의 고도가 바뀌는 지점의 좌표 x와 y가 주어진다. (1 ≤ x ≤ 1,000,000. 0 ≤ y ≤ 500,000) 첫 www.acmicpc.net 문제 해석 - 밤에 태양이 질 때 보이는 건물의 윤곽을 스카이 라인이라 한다. - 이 스카이 라인을 보고 건물이 최소 몇개 있는지 구하는 문제이다. - 예시로 아래처럼 윤곽이 보인다면 건물이 3개 존재 하는데 다음과 같다. .......... .....XX... .XXX.XX... XXXXXXXXXX .......... .....XX.....

알고리즘/백준 2023.08.05

백준_7682 : 틱택토 - C++

문제 https://www.acmicpc.net/problem/7682 7682번: 틱택토 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 줄은 9개의 문자를 포함하며, 'X', 'O', '.' 중 하나이다. '.'은 빈칸을 의미하며, 9개의 문자는 게임판에서 제일 윗 줄 왼쪽부터의 순서이다. 입 www.acmicpc.net 문제 해석 - 입력값으로 3*3 의 게임 판에 O, X 를 표기하여 주어진다. - 주어진 게임판의 상황이 나올 수 있는 상황인지, 끝난 상황인지 확인 하는 문제이다. - 예를 들어 "X.OO..X.." 는 나올 수는 있는 상황이지만 게임의 최동 모습이 아니기 때문에 "invalid" 이다. 문제 풀이 - 게임이 정상적으로 끝났다면 다음 상황 중 하나이다. . O 를 표기 한 사..

알고리즘/백준 2023.08.04

[SpringBoot + Java] 좋은 객체 지향 설계(싱글톤)

들어가며 - 인프런 김영한 님의 싱글톤 강의 정리입니다. - 웹 어플리케이션은 보통 수십, 수백명의 고객의 요청을 동시에 수행 합니다. - 이 때 각 요청이 들어 올 때 마다 Service class 에서 객체를 새로 만들어 요청을 수행 한다면 너무 많은 객체가 생성 되어 메모리가 낭비 됩니다. 싱글톤(순수 자바) - 싱글톤을 간단히 정의 하면 클래스의 인스턴스가 딱 하나만 생성 되는것을 보장 하는 패턴 입니다. - 즉 위와 같은 상황에서 단 하나의 인스턴스 만을 만들어 이를 공유 하며 사용 하게 하는 것입니다. - 이렇게 하기 위한 방법중 하나가 아에 2개가 생성되지 못하게 하는 것 입니다. . 아래와 같이 Service 를 만들게 되면 생성자가 private 이기 때문에 외부에서는 생성 할 수 없게 ..

[SpringBoot + Java] 좋은 객체 지향 설계(spring 의 container)

들어가며 - 앞서 Config 를 사용 했던방식이 자바 설정 class 로 Spring Container를 흉내 낸 것입니다. - 기존 코드를 수정하여 Spring 에서 는 어떻게 사용 하는지 알아 보겠습니다. 개념 - 우선 Spring 이 어떻게 작동 되는지를 알아 보겠습니다. - Container 에는 Bean 에 등록 된 객체들이 들어 가게 됩니다. . 따라서 Config 에 @Bean annotation 을 등록 해 준 class 가 container 에 들어가게 됩니다. - 이 후 Container 를 생성 해 주면 파라미터로 넘어온 class 정보를 이용해 Bean 을 등록 한다. 사용법 - 기존의 Config class 위에 @Configuation annotation 을 달아 주어 conf..

[SpringBoot + Java] 좋은 객체 지향 설계(DI)

들어가며 - 인프런 김영한 님의 "객체 지향 원리 적용" 강의 정리 내용입니다. - 앞선 설명에서 SOLID 를 지킨 설계가 좋은 객체 지향 설계라고 하였습니다. - 이번 시간에는 쉽게 위반 될 수 있는 원칙과 해결 법에 대해 알아 보겠습니다. - SpringBoot 를 사용하면 쉽게 할 수 있지만 우선 JAVA 로만 해보도록 하겠습니다. 문제 발견 - "Service" 객체와 여기서 사용 하는 "Repository" class 가 있다고 생각 해 보겠습니다. - 보통 Service 에서 "Repository"구현체를 사용 하기 위해 하는 방법은 다음 과 같습니다. import ~.ARepository; // Repository 를 import 함 //... public class SerivceImpl ..

[SpringBoot + Java] 좋은 객체 지향 설계(SOLID)

들어가며 - 인프런 김영한 님의 "좋은 객체 지향 설계과 스프링" 강의 정리 내용입니다. - 좋은 프로젝트 설계란 프로그램을 유연하고 변경에 용이하게 만들었을 때를 말한다. . 이렇게 개발 하게 되면 말 그대로 유지 보수에 효과적이며 보다 체계적으로 만들 수 있다. 객체지향과 다형성 - 객체 지향의 특징으로는 "추상화, 캡슐화, 상속성" 등이 있지만 좋은 설계에 가장 중요한 요소는 "다형성" 이다. - 다형성 . 다형성이란 하나의 객체가 여러가지 타입을 가질 수 있는 것을 의미 하며 여기서는 기능을 역할과 구현으로 구분 한다고 보았다. . 예를 들어 운전을 하기 위해서 "운전자 역할" 과 "자동차 역할" 을 구분 하고 이 자동차를 또 자동차 구현으로 구분 짓는다. . 이렇게 하게되면 미래에 자동자가 바뀌..