본문 바로가기

전체 글

Spring의 AOP(Aspect Oriented Programming) 스프링에서는 AOP(Aspect Oriented Programming)를 지원하고 있다. AOP는 관점 지향 프로그래밍 등으로 많이 번역되는데 객체 지향 프로그래밍, 서비스 지향 프로그래밍 등 프로그래밍 개발론의 일종이다. AOP에서는 프로그램을 핵심 기능과 공통 기능으로 분리하여 모듈화, 재사용성을 높이고 핵심 기능 개발에만 집중할 수 있다는 장점이 있다. AOP 프로그램을 핵심 기능과 공통 기능으로 분리한다는 것은 무엇일까? 이는 애플리케이션을 개발할 때 어느 부분에 더 집중해야 하는지, 즉 어디에 좀 더 관심사(concern)를 두어야 하는지 분리하는 것이다. 구글에서 스프링 AOP를 검색하면 지겹도록 나오는 예제지만 들어보자면 어떤 메서드의 실행 시간을 측정하는 로직을 구현해야 한다고 하자. 가장.. 더보기
Running Sum of 1d Array (defaultdict) LeetCode의 Running Sum of 1d Array 문제다. Running Sum of 1d Array - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com [1, 2, 3, 4] 같은 배열이 주어지면 첫 번째 요소까지의 합, 두 번째 요소까지의 합, 세 번째 요소까지의 합, 네 번째 요소까지의 합을 구해서 반환하는 문제다. 즉 [1, 1+2, 1+2+3, 1+2+3+4]를 계산하는 것인데 단순히 생각하면 그냥 매 요소마다 반복문으로 현재 요소까지의 합을 .. 더보기
Number of Students Unable to Eat Lunch (deque) LeetCode의 Number of Students Unable to Eat Lunch 문제다. Number of Students Unable to Eat Lunch - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 별로 어렵지 않은 문제지만 collections 모듈의 Counter 클래스를 활용하는 풀이가 있어 적어본다. 문제는 다음과 같다. 학생들은 선호하는 샌드위치 모양이 있다. 이는 각각 0, 1로 나타낸다. 학생들을 위해 준비된 샌드위치들이 있다. 이.. 더보기
Array Partition I (Pythonic way) LeetCode의 Array Partition I 문제다. Array Partition I - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 딱히 어려울 게 없는 문제지만 책에서 아주 인상적인 풀이를 제공했기 때문에 기록해두려고 한다. 문제 자체는 다음과 같이 간단하다. 2n개의 정수 목록이 주어진다. 정수들을 n개의 한 쌍으로 분리한다. 각 쌍의 최솟값의 합이 나타낼 수 있는 최댓값을 구하라. 쉽게 말해서 [1, 3, 2, 4]가 주어질 때 (1, 3), (2.. 더보기
3Sum (Two Pointers) LeetCode의 3Sum 문제다. 3Sum - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 주어진 수 중에서 3개를 골라 합이 0인 조합을 반환하는 문제인데 중복된 조합은 반환하지 않아야 한다. 정수 배열은 10000개 까지 주어질 수 있기 때문에 최적화되지 않은 코드의 경우 시간 초과가 발생할 수 있다. 실제로 첫 번째로 구현한 아래 코드는 28번째 테스트 케이스에서 시간 초과 에러가 발생했다. class Solution: def threeSum(self,.. 더보기
Spring의 생성자 의존 주입(Constructor Dependency Injection) 원래는 이전 포스트에서 작성하던 부분이었으나 너무 글이 길어지는 관계로 따로 분리하였다. Spring의 의존성 주입(Dependency Injection) 스프링의 큰 특징 중 하나는 Dependency Injection(DI, 의존성 주입)을 지원한다는 것이다. 의존성 주입 자체는 스프링에 한정된 개념이 아니고 객체 간 관계를 다루는 방법 중 하나인데 일단 의존성이 haruhiism.tistory.com 생성자 주입 위의 포스트에서는 의존성 주입 방법으로 필드 주입, Setter 메서드 주입, 생성자 주입 세 가지 방법을 제시했다. 그중 마지막 방법인 생성자 주입은 말 그대로 객체의 생성자에서 의존하는 Bean 객체를 파라미터로 넘겨받는 방식이다. @Component public class Greete.. 더보기
Spring의 빈 범위(Bean Scope) 스프링에서 Bean 객체를 생성한다는 것은 실제로는 Bean 객체를 생성하기 위한 일종의 레시피, 클래스를 정의하는 것이다. 이런 레시피를 작성하는 것은 객체의 의존성이나 설정값뿐 아니라 해당 객체의 범위(scope)를 조절할 수 있다는 특징이 있다. 특히 기존 자바 언어의 스코프와는 다른 스프링 프레임워크만의 스코프를 Bean 객체들에게 적용할 수 있는데 스프링에서는 다음과 같은 다섯 가지 스코프를 제공한다. singleton: 해당 객체는 스프링 컨테이너에서 단 하나만 존재한다. prototype: 해당 객체는 스프링 컨테이너에 몇 개든 존재할 수 있다. request: 해당 객체는 web-aware 스프링 컨테이너에 전송된 HTTP 요청마다 생성된다. session: 해당 객체는 web-aware .. 더보기
Spring의 빈 생명주기(Bean Lifecycle) 스프링의 컨테이너는 Bean 객체들을 관리한다. 객체들을 관리한다는 것은 단순히 싱글턴으로 제공하거나 필요한 곳에 주입하는 것뿐 아니라 객체의 생성과 소멸, 즉 생명주기(Lifecycle)를 관리한다는 것을 의미한다. 컨테이너와 빈의 생명주기 스프링 컨테이너 자체도 생명 주기가 있다. 간단하게는 다음처럼 ApplicationContext 구현 클래스를 이용하여 초기화하고 close 메서드로 종료하는 것을 예로 들 수 있다. public class Main { public static void main(String[] args){ AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext.class); .. 더보기