Programming
-
AOP 용어 정리Programming/Spring 2022. 9. 19. 21:28
AOP 용어 정리 이 용어들은 Spring AOP에 국한되지 않음 Aspect 여러 클래스를 횡단하는 관심사를 모듈화한 것. 스프링 AOP에서 Aspect는 일반적인 클래스에 @Aspect 를 통해 구현된다. Join point Advice가 적용될 수 있는 위치, 프로그램 실행 동안의 한 지점을 뜻한다. 예를들어, 메서드의 실행이나 예외 핸들링 같은 부분이다. Spring AOP에서 Join point는 항상 메서드의 실행을 나타낸다. Target object에서 구현한 인터페이스의 모든 메서드는 Join point가 된다. Advice 특정한 Join point 에서 Aspect에 의해 취해지는 행동을 뜻한다. 즉, 타깃에게 제공할 부가기능을 담은 모듈이다. 다양한 advice 타입이 있는데, 핵심적..
-
@Transactional의 롤백Programming/Spring 2022. 5. 18. 19:37
@Transactional 은 메서드 단위의 비즈니스 로직에서 쿼리가 실행된 뒤 예외가 발생했을 때 롤백 해주는 역할을 수행한다. RuntimeException을 상속한 예외에 대해서 롤백을 해준다는 배경지식만 있던 터라 미션에서 사용하고 있는 JdbcTemplate 은 어떻게 롤백이 진행되는 것인지 궁금하게 되었다. @Transactional 에서의 JdbcTemplate 쿼리 실행은 어떻게 롤백되지? @Transactional 은 기본적으로 rollbackFor 의 옵션이 RuntimeException.class 와 Error.class 로 설정 되어있다. JdbcTemplate 에서 예외가 터지면 SQLException 이 발생하는 줄 알았지만, JdbcTemplate의 쿼리 실행 메서드를 들어가보..
-
@Configuration이 붙지 않은 클래스의 메서드에 @Bean을 붙이면 어떻게 될까?Programming/Spring 2022. 5. 18. 14:40
Spring에서 Container에 Bean을 등록하는 방법중 하나로 다음과 같이 Java Config 을 이용하는 방법이 있다. @Configuration public class AuthenticationPrincipalConfig { @Bean public AuthService authService() { return new AuthService(); } } @Configure 은 해당 클래스가 빈 정의를 위한 목적이라는 것을 표시해주는 목적으로 사용된다. 그런데, 다음과 같이 @Configuration 없이 @Bean 만 존재한다면 어떻게 될까? public class AuthenticationPrincipalConfig { @Bean public AuthService authService() { ..
-
DI(Dependency Injection)의 종류와 장단점Programming/Spring 2022. 4. 26. 01:01
필드 주입 장점 의존성 주입하기가 쉬움 단점 외부에서 접근이 불가능하기 때문에 테스트시 객체를 수정할 수 없음 final 키워드를 붙이기 못하기 때문에 객체의 불변을 보장하지 못함 DI 프레임워크가 존재해야만 가능한 방식이기 때문에, 프레임워크에 의존적임 SRP 위반 Setter 주입 장점 의존성이 선택적으로 필요한 경우에 사용 가능 의존성이 변경될 가능성이 있는 경우에 사용 가능 단점 final 키워드를 붙이기 못하기 때문에 객체의 불변을 보장하지 못함 구현체를 주입해주지 않아도 생성이 가능해지는데, 이때 메서드를 호출하면 NullPointerException이 발생하게 됨. 즉, 주입이 필요한 객체가 주입되지 않아도 객체를 생성할 수 있게 된다는 것이 문제 생성자 주입 장점 의존 객체 주입 없이는 객..
-
불변 객체는 어떻게 만드는가?Programming/Java 2022. 3. 4. 03:23
불변 객체란? 불변 객체는 생성된 시점 이후로 상태가 변하지 않는 객체를 뜻한다. 예를 들어, 다음과 같이 Lottery 클래스가 있다고 하자. public class Lottery { private Set numbers; public Lottery(final Set numbers) { this.numbers = numbers; } } 위와 같은 Lottery 클래스를 클라이언트 코드에서 객체 생성한다고 하면, Lottery의 인스턴스 필드인 numbers의 상태가 주입되게 된다. 그런데, 불변 객체는 이렇게 생성된 시점에서 주입된 상태가 변하지 않음을 보장하고 유지되는 것을 말한다. 왜 불변 객체를 만들어야 하는가? 불변 객체를 보장함으로써 얻는 이점은 다양하다. 불변 객체는 Thread-Safety를..
-
String.matches() VS Pattern.compile()Programming/Java 2022. 2. 18. 02:03
문제 상황 정규표현식을 사용하여 문자열을 검증할 때, 가장 간단한 방법은 String.matches()를 사용하는 것이다. 다음은 입력 받은 문자열이 숫자만으로 이루어져있는지 검증하는 코드이다. private static boolean isNumber(String line) { return line.matches("^[0-9]+$"); } 그런데, 이 방법은 여러번 반복해서 해당 코드가 실행될 경우 성능 상 이슈가 있다! Pattern 클래스는 객체 생성에 대한 비용이 비싼데, String.matches() 를 사용할 때 마다 Pattern 클래스의 인스턴스를 생성하기 때문이다. public boolean matches(String regex) { return Pattern.matches(regex, t..