본문 바로가기

Programming

(29)
[Spring] AOP, Spring AOP AOP Aspect Oriented Programming(관점 지향 프로그래밍) 로직을 기준으로 핵심 관점(비즈니스 로직)과 부가 관점을 나누고, 관점을 기준으로 모듈화하는 것 데이터베이스 연결, 로깅, 파일 입출력, 시간 측정 등의 여러 번 반복해서 사용하는 흩어진 Aspect를 모듈화해 핵심 로직에서 분리하여 재사용이 가능하도록 하는 방법이다 같은 일을 반복하는 코드를 독립적으로 작성하고 적용해야 하는 부분을 개발자가 구체적으로 작성해 적용할 수 있다. 주요 용어 Aspect 흩어진 관심사를 모듈화 한 것 Advice + Pointcut Target Aspect를 적용하는 곳(클래스, 메소드 등) Advice 실질적으로 수행하는 기능 제공할 부가기능을 담고 있다 Join Point Advice가 적용..
[Spring] Bean 주입하기 : DI 스프링에서는 객체의 생성과 소멸 등에 대한 제어를 컨테이너가 관리하고 필요할 때 주입을 받아 사용하게 된다. DI 방법 1. 생성자 기반 주입 종속성을 나타내는 인수로 생성자를 호출하는 컨테이너에 의해 수행된다. 컨테이너가 알아서 생성자에게 객체를 넣어주면서 생성하게 된다. 생성자의 파라미터를 통해 의존 관계를 파악하기 쉽다는 장점이 존재한다. public class SimpleMovieLister { private final MovieFinder movieFinder; public SimpleMovieLister(MovieFinder movieFinder) { this.movieFinder = movieFinder; } } 클래스에 생성자가 한 개만 존재하고 매개 변수 타입이 빈으로 등록되어 있다면 사..
[Spring] Bean Scope와 주의할 점 일반적으로 스프링은 처음 구동될 때 초기에 모든 Bean을 생성하고 인스턴스를 생성한다. 하지만, 매번 다른 객체가 사용되어야 하는 경우에는 Bean의 scope를 변경하면 매번 다른 객체를 생성해 사용할 수 있게 된다. Bean Scope singleton 기본적으로 다른 설정을 지정하지 않았을 때 지정된다. 애플리케이션을 구동하면 bean마다 하나의 객체가 생성되고 스프링을 통해 bean을 주입받게 된다면 언제나 같은 객체를 참조하게 된다. 하나의 객체를 통해 주입하게 되므로 메모리를 절약할 수 있고, 런타임시 성능 최적화에 유리하다는 장점이 존재한다. 하지만, 프로퍼디를 공유하기 때문에 다른 객체에서 값을 변경해도 그대로 참조되어 예상치 않게 값이 변경될 수 있고, 초기에 모든 빈을 생성해야 하기 ..
[Spring] Bean을 등록하는 방법 스프링에서는 빈을 개발자가 직접 생성하지 않고 스프링에게 위임해 생성된 빈을 주입하는 방법으로 사용하게 된다. IOC를 위해 주입할 빈을 등록하고 관리를 위임해야 한다. 1. xml에 직접 설정하기 // application.xml ApplicationContext context = new ClassPathXmlApplicationContext("application.xml"); 단점으로는 모든 빈을 직접 등록하고 의존성도 모두 작성해야 했기 때문에 굉장히 번거롭고 불편하다. 2. Component Scan @Component 가 붙은 객체를 스캔해 등록한다. @Service, @Repository, @Controller, @Configuration 들은 모두 @Component를 상속받고 있기 때문에 ..
[Java] 어노테이션(Annotation) 자바에서 어노테이션(Annotation)은 메타데이터(metadata)라고 볼 수 있다. 💡 메타데이터 애리케이션이 처리해야 할 데이터가 아닌 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지 알려주는 정보. 데이터를 위한 데이터. 데이터를 설명해주는 데이터 컴파일러에게 문법 에러를 체크하거나, 코드를 자동으로 생성하도록 정보를 제공하거나, 실행 시 특정 기능을 실행하는 정보를 제공, 자동으로 파일을 생성하는 용도 등으로 사용할 수 있다. 어노테이션의 대표적인 예는 @Override가 있다. 컴파일러가 정확히 오버라이드가 되지 않았다면 에러를 발생시키게 하는 것이다. 생성하기 public @interface MyAnnotation { // 타입 엘리먼트명() [default 디폴트값];..
[Java] Java란? Java의 특징 Java란? 1995년 썬 마이크로시스템즈에서 발표한 프로그래밍 언어이다. C++에 비해 메모리와 CPU를 많이 사용해 윈도우 프로그래밍 언어로 부적합했지만, 인터넷이 활성화되며 웹 애플리케이션 구축 언어로 급부상 초기의 자바는 가전 제품에 탑재할 언어로 개발되었지만, 현재는 엔터프라이즈 기업환경에서 실행되는 서버 애플리케이션을 개발하는 중추적인 언어 ❓ 프로그래밍 언어란? 사람이 컴퓨터에 명령을 내릴 때에도 언어가 필요하지만 컴퓨터가 이해할 수 있는 언어는 기계어(machine language)이다. 0과 1로 이루어진 이진 코드이기 때문에 사람이 이해하기 어렵기 때문에 사람의 언어와 기계어의 다리 역할을 하는 프로그래밍 언어가 필요하다! 프로그래밍 언어는 고급 언어와 저급 언어로 구분된다. 저급 언어..
[Java] Pattern, Matcher Class 사용법과 메소드 정리 자바에서는 정규식을 활용해 문자열을 검증, 탐색을 돕는 Pattern, Matcher 클래스를 제공해준다. 다음에도 쉽게 활용할 수 있도록 정리하려고 한다. 👨‍🏫 클래스 분석 Pattern 정규 표현식이 컴파일된 클래스. 정규 표현식에 대상 문자열을 검증하거나, 활용하기 위해 사용되는 클래스이다. 주요 메소드 static Pattern compile(String regex) 주어진 정규식을 갖는 패턴을 생성 String pattern() 컴파일된 정규 표현식을 반환 Matcher matcher(CharSequence input) 패턴에 매칭할 문자열을 입력해 Matcher를 생성 static boolean matches(String regex, CharSequence input) 정규식과 문자열이 일치..
[Java] 정규식 문법 정리(Regex) 📝 문법 Character \\ 백슬래시(\) 문자 \t tab(탭) 문자 \n newline 문자(ex. 엔터) \r carriage-return 문자 \d 숫자 : [0-9] \D 숫자를 제외한 모든 문자 : [^0-9] \s 공백 문자 : [ \t\n\x0B\f\r] \S 공백이 아닌 문자 : [^\s] \w 숫자나 영어, _(under-bar) : [a-zA-Z_0-9] \W 숫자나 영어, _가 아닌 모든 문자 : [^\w] . 모든 문자 💡 정규식에서 특수문자를 사용해 검색하고 싶은 경우? 모든 문자를 검색한다는 의미의 *과 Character '*'을 구분할 수 없기 때문에 \\를 붙여 사용해야 한다. * → \\* Character Class [] 문자를 하나의 집합으로 묶는다 [abc] a,..