반응형 IT/Java394 전략 패턴 예제(Strategy Pattern) 이전 포스팅에서 템플릿 메서드 패턴에 대해서 다룬 포스팅이 있다.이번 포스팅을 읽기 전에 템플릿 메서드 패턴에 대해서 먼저 보고 오는 것을 추천한다. 참고 포스팅에 이어서 코드를 변하는 부분과 변하지 않는 부분으로 나눠야 하는데,템플릿 메서드 패턴은 추상 클래스를 상속 받게 되어부모의 클래스가 변경이 된다면 자식 클래스도 변경이 불가피 한 상황이 된다. 이럴 경우에 좀 더 나은 코드로 변화하기 위해서 전략 패턴이 생겼다. 바로 예제 코드로 알아보면, 우선 실행할 메서드를 갖고있는 인터페이스를 하나 만들어준다.public interface Strategy { void call();}그리고 공통 로직을 담을 일반 클래스를 하나 만들어준다.@Slf4jpublic class StrategyContext.. 2024. 10. 25. 템플릿 메서드 패턴 예제(Template Method Pattern) 디자인 패턴에 대해서 예제를 적어두고자 포스팅한다. 프로그래밍 코드를 짤 때 변하는 부분과 변하지 않는 부분을 구분해서 개발을 해야한다. 실제로 개발을 진행하다보면 작게는 로그 찍는 부분부터크게는 호출관계 도출을 위해 이력을 쌓거나 디비에 적재 등 공통 부분들이 상당히 많이 존재한다. 예를 들어,A라는 서비스와 B라는 서비스를 호출하는 메인서비스 개발 하였고서비스가 실행되기 전과 후에는 언제 실행이 되었는지 로그를 찍고, 호출 시간을 DB에 저장하는 로직이 있다고 하면public class Test(){ // A 서비스 관련 log.info("서비스 실행"); // A 비지니스 로직 실행 // 현재 시간 DB 저장 log.info("서비스 종료"); // B 서.. 2024. 10. 24. 익명클래스 -> Lambda(람다식) 변환 예제 Java 8 이상 부터는 익명 내부 클래스를 Lambda 식으로 변환하여 코드를 간결하게 바꿀수 있게 되었다.익명 클래스에 대해서는 아래 참고 포스팅 참고 바란다. 많이 쓰이는Eclipse 에서는 익명클래스에 커서 두고 Ctrl+1 을 눌러서 replace with lambda 를 클릭해서 자동으로 바꿀수도 있고,Intellij 에서는 옵션+엔터를 해서 replace with lambda 를 만날수 있다. 그럼 이 Lambda 식이 뭐고 어떻게 변환이 되는지 간단하게 예제 코드로 알아보자.(이하는 편의상 람다라고 칭함) 우선 chatGPT 에 간단하게 바꾸는 예제 코드를 알려달라고 하면 Runnable 인터페이스를 예시로 들어주었다.아래와 같다. 익명클래스 예제 코드public class Main { .. 2024. 10. 22. [Spring Security] WebSecurityConfigurerAdapter / antMatchers 관련(SecurityFilterChain / requestMatchers) 이전에 만들어둔 코드가 있는데 새로운 프로젝트를 생성하면서 다시 가져다 쓰려니 deprecated 가 되어있었다. 바로 WebSecurityConfigurerAdapter 이다. 기존에 사용하던 코드는 아래와 같다.@Slf4j@EnableGlobalMethodSecurity(prePostEnabled = true)@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {..이상 생략 @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception{ auth.userDetailsService(s.. 2024. 10. 21. [Error] Executing an update/delete query JPA 를 사용중 네이티브 쿼리를 사용하다가 아래와 같은 에러를 만났다. Executing an update/delete query 문제 발생 코드는 아래와 같다.@Query(value="INSERT INTO TEST(param1, param2) VALUES(:id, :name)", nativeQuery=true)int test(int param1, String param2); 이유는 TransactionRequiredException 이 발생해서인데,cud 쿼리를 진행할 때는 @Transactional / @Modifying 을 붙여주지 않았기에 발생한다. Repository 에 붙여도 되고 상위 클래스인 Service나 Controller 에 붙여도 가능하다. 2024. 10. 20. [Error] Encoded password does not look like BCrypt 로그인 기능을 구현하다가 아래와 같은 에러가 발생하였다. Encoded password does not look like BCrypt Spring Security에서 비밀번호를 인코딩할 때 발생하는 대표적인 오류 중 하나이고,이 오류는 주로 Spring Security가 사용하려는 PasswordEncoder가 암호화된 비밀번호의 형식을 인식하지 못할 때 발생 하곤 한다. 그럼 비밀번호의 형식을 인코더에 맞게 바꿔주면 된다. 에러에서 보면 나와있지만 BCrypt 암호화를 사용중이어서 DB 등 저장되어있는 패스워드를 BCrypt 암호화 하면 된다. BCrypt 암호화 관련해서는 아래 참고 포스팅을 참고 바란다. 참고 포스팅https://thenicesj.tistory.com/99 암호화란?(Sha256, .. 2024. 10. 19. Generic Type 2 이전 포스팅에서 Generic Type 에 대해서 다룬 글이 있다.자세한 내용은 아래 참고 포스팅 참고 바란다. 포스팅 내용에는 아래와 같은 예제 코드가 있다.class Test{List lists = new ArrayList(); public void add(T list) { lists.add(list); }} Generic 로 선언한 클래스를 명시해줬는데,조금 변형해서 아래와 같이 만들어보았다.class Test{List lists = new ArrayList(); public void add(T list) { lists.add(list); }} 그리고 객체 생성하는 코드를 아래와 같이 짜보았다. TestInteger> intTest2 =.. 2024. 10. 14. Generic Type 대부분의 코드 등에서 자료형이라는 개념이 있다.크게 기본적으로 문자형 String, 숫자형 Int, True/False 형 Boolean 등이 있다. 그리하여 객체를 생성할때는 이 자료형을 명시해주곤 한다. 아래와 같이 말이다. (Test 클래스는 미리 있다고 가정).Test test = new Test(); 하지만 객체가 String 이 들어올수도 있지만 다른 자료형으로 만들어질 경우까지 생각하면어떤 자료형이든 받을수 있도록 Generic 형으로 만들어주면 된다.Test클래스는 아래와 같다.class Test{List lists = new ArrayList(); public void add(T list) { lists.add(list); }}이렇게 되면 아래와 같이 여러 .. 2024. 10. 13. [Error] Deprecated unwrapped fragment expression "~/~" found in template ~/~ Spring 과 thymeleaf 를 사용하면서 아래와 같은 에러를 만났다. Deprecated unwrapped fragment expression "~/~" found in template ~/~, line 9, col 7. Please use the complete syntax of fragment expressions instead ("~{~/~}"). The old, unwrapped syntax for fragment expressions will be removed in future versions of Thymeleaf.굉장히 길어보이는데 주요 문구 몇개만 확인하면 내용은 쉽게 이해 된다. html 내의 기존 구문은 아래와 같았다. 당연히 test 라는 폴더 내에 test_modal.htm.. 2024. 10. 11. 이전 1 2 3 4 5 ··· 44 다음 반응형