2022/03 14

어노테이션(annotation)이란?

평소 어노테이션을 많이 사용하지만 이에 대해 무엇이라고 설명할 수 없는 자신을 가르치기(?) 위해 이 글을 정리한다. 다음 정리할 내용을 사이트와 함께 java의 정석도 참고했다. 출처 : https://www.geeksforgeeks.org/annotations-in-java/ 1. 어노테이션이란? 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것 - java의 정석 발췌 - 어노테이션은 @로 시작한다. 어노테이션은 컴파일된 프로그램의 행동을 바꾸지 않는다. 어노테이션은 프로그램 elements와 메타데이터를 어울리도록 돕는다. 즉, 인스턴스 변수, 생성자, 메소드, 클래스 등등 어노테이션은 한 프로그램이 컴파일러에 의해 다뤄지는 방식을 바꿀 수 있기에 순수한 주석..

객체 지향 5대 원칙

최근 디자인 패턴 관련해서 객체 지향 설계의 방법론에 대해서 공부하고 있는데 생각해보니 객체 지향의 5개 원칙에 대해서 익히 들었지만 이를 제대로 이해하고 있지는 않은 것 같았다. 그래서 생각난 김에 정리하려고 한다. 사실... 어제 밤에 정리했는데 나의 실수로 정리한 내용을 전부 지워버리고 말았다... 너무 가슴이 아프지만 다시 정리해보겠다... 앞으로 정리할 내용은 다음 사이트를 참고했다. 출처 : https://www.baeldung.com/solid-principles 1. What is SOLID? Simply put, Martin and Feathers' design principles encourage us to create more maintainable, understandable, an..

포인트 컷, 어드바이스, 어드바이저(PointCut, Advice, Advisor)

이 내용은 인프런 김영한 선생님의 스프링 핵심 원리 - 고급편을 바탕으로 정리한 것입니다. 포인트컷, 어드바이스, 어드바이저? AOP관련 지식을 조금 알면 이에 대해 들어봤을 것이다. 오늘은 이에 대한 지식과 함께 어떻게 구현하는지 알아볼 것이다. 1. 용어 정리 포인트컷(Pointcut) 어디에 부가 가능을 적용할지, 어디에 부가 기능을 적용하지 않을지 판단하는 필터링 로직. 이름 그대로 어떤 포인트에 기능을 적용할지 안할지를 잘라서 구분하는 것이다. 이름 그대로 각각의 포인트를 cut해서 구분한다는 느낌? 어드바이스(Advice) 프록시가 호출하는 부가 가능. 프록시 로직. 어드바이저(Advisor) 하나의 포인트컷과 하나의 어드바이스를 가지고 있는 것. 이렇게 구분함으로써 얻을수 있는 장점은 역할과..

디자인 패턴의 종류

필자는 디자인 패턴에 대해 관심을 가지려고 하는데 어떤 방식으로 디자인 패턴을 구분하고 어떤 종류가 있는지 잘 몰랐다. 그래서 인터넷에서 이에 대한 정보를 추합해 정리하고자 한다. 출처 : https://www.geeksforgeeks.org/design-patterns-set-1-introduction/ 출처 : https://sourcemaking.com/design_patterns 1. What is Design Pattern 디자인 패턴은 소프트웨어 디자인에서 발생하는 공통 문제에 일반적이고 재사용 가능한 해결책을 제시한다! 패턴은 전형적으로 클래스와 객체 사이의 관계와 상호작용을 보여준다. 이 아이디어는 잘 검사되고 입증된 개발 패러다임을 제공함으로 개발 프로세스를 빠르게 한다. 디자인 패턴은 ..

ProxyFactory란?

이 내용은 인프런 김영한 선생님의 스프링 핵심 원리 - 고급편을 바탕으로 정리한 것입니다. 1. ProxyFactory란? 이 글을 읽기 전 reflection에 대해 알면 좋다. 참고 : https://tech-monster.tistory.com/138 ProxyFactory는 인터페이스로 Proxy를 구성한 경우 혹은 클래스로 Proxy를 구성한 경우 두개의 경우에 일관성 있게 접근할 수 있고, 더욱 편리하게 사용할 수 있는 추상기능을 제공한다. 프록시 팩토리를 사용하면 Advice 를 호출하는 전용 InvocationHandler , MethodInterceptor 를 내부에서 사용한다. *Advice : 프록시에 적용하는 부가 기능 로직 2. ProxyFactory 구현하기 ServiceInter..

리플렉션(Reflection)과 jdk 동적 프록시(dynamic proxy)

1. 프록시란? 프록시(Proxy)는 '대리'라는 의미다. 다른 개발자분들 께서 이미 잘 정리를 해주셨다. (참고하려면 여기 클릭) 그리고 이 프록시를 사용하는 프록시 패턴에 대해서 전에 학습했다. 뒤에 올 내용도 이것을 바탕으로 추가를 할 예정이다. (프록시 패턴 바로가기) 2. 프록시의 단점? 전에 프록시 패턴의 구조를 한 번 다시 보고 가겠다. 현재 특정 객체에 대한 접근을 제어하거나 기능을 추가하고 있다. 별 거 없어 보이지만 RealSubject가 Subject를 구현하는데 이것을 FirstProxyCache에서 캐싱 처리를 하고 있는 것이다. 만약 FirstProxyCache의 기능이 맘에 안들어서 다른 class를 통해 proxy기능을 구현하려고 한다면 어떻게 해야 할 까? 그러면 새롭게 c..

제네릭 이해하기

사실 제네릭은 어렴풋이 대~강 사용하는 법을 알고있지만, 무언가 내가 직접 어떤것을 만들고 적용하려면 그렇게 바로 할 수 있지는 않았다. 이번에 제대로 제네릭에 대해서 이해하도록 하고, 실제로 어떻게 쓰이는지도 알아볼 것이다. 참고 서적은 Java의 정석이다. 1. Generic란? 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능이다. => 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다. 2. 제네릭 예시 1 Person.java => 일반 class package com.example.generic; public class Person { Object pocket; public Object getPocket..

오류 처리 / API 예외 처리

1. @ResponseStatus ResponseStatus를 사용하면 설정해 준 내용으로 에러를 반환해준다. 이를 시험하기 위해 BadRequestException이라는 Exception을 만들어본다. ApiExceptionController.java ... @Slf4j @RestController public class ApiExceptionController { @GetMapping("/api/response-status-ex1") public String responseStatusEx1() { throw new BadRequestException(); } ... @Data @AllArgsConstructor static class MemberDto { private String memberId; ..

Sliding window

코딩 테스트를 매일은 아니지만 LeetCode 에서 나름 그 주마다 몇개씩, 풀려고 했었다. 그런데 무언가 누간가의 도움이 필요 했으면 해서 최근에 inflearn의 자바 알고리즘 문제풀이를 이용해서 공부를 진행중이다. 이 강의를 이용하여 공부하던 중에 sliding window라는 말을 들었다. 코드를 미끄러지는 창문처럼 해결하도록 알고리즘을 구성한다는 것 같은데... 하여간 이곳에서 소개한 문제중 하나를 긁어왔다. 설명 현수의 아빠는 제과점을 운영합니다. 현수 아빠는 현수에게 N일 동안의 매출기록을 주고 연속된 K일 동안의 최대 매출액이 얼마인지 구하라고 했습니다. 만약 N=10이고 10일 간의 매출기록이 아래와 같습니다. 이때 K=3이면 12 1511 20 2510 20 19 13 15 연속된 3일..

오류 처리 / Bean Validation

1. What is Bean Validation Bean Validation이란 무엇인가? 다음에 대한 설명을 해당 사이트에서 찾아왔다. Jakarta Bean Validation is a Java specification which lets you express constraints on object models via annotations lets you write custom constraints in an extensible way provides the APIs to validate objects and object graphs provides the APIs to validate parameters and return values of methods and constructors reports..