2022.12.12.MON

ronglong·2022년 12월 12일
0

코드스테이츠 Day38

  1. 오전 데일리 코딩
    오늘은 문제 난이도가 좀 수월해서 2문제 풀었다. vㅎ0ㅎv
    밑에는 차례대로 24, 25번 푼 것.

24번에서 배열을 리스트로 만들 때, 스트림 써서
List baseList = Arrays.stream(base).boxed().collect(Collectors.toList());
이렇게 풀려고 했는데, 왜인지 계속 에러가 나서 그냥 for문 돌렸다.

내일은 DFS문제던데,, 어려울 듯.

public class Solution { 
	public boolean isSubsetOf(int[] base, int[] sample) {
    // 샘플의 모든 요소가 베이스에 포함되는지. 
	// 리스트로 만들고, 요소 포함하는지 contains로 확인? 
		ArrayList <Integer> baseList = new ArrayList<>(); // 리스트에 베이스 넣기
		for(int element : base){
			baseList.add(element);
		}

		for(int element : sample){ //베이스에 샘플 요소 있는지 확인. 하나라도 false면 false 리턴. 
			if(!baseList.contains(element)){
				return false;
			}
		}
		return true;
	} 
}
public class Solution { 
	public long power(int base, int exponent) {
    // base를 exponenet만큼 거듭제곱하기 ---> for문으로 반복해서 거듭제곱하기.
    
    long result = 1;   // 결과값 설정
    for(int i=0; i<exponent; i++){
      result *= base;
      if(result>94906249) result %=94906249; // 수가 범위를 초과하면 나머지 구해서 이어서 연산
    }
    return result;
	} 
}
  1. AOP (Aspect Oriented Programming)
  • 관점 지향 프로그래밍. 여러 클래스에서 반복되는 부가 기능 분리. OOP 보완.
  • Aspect(공통 기능, 횡단 기능)
    = Advice(부가 기능을 정의한 코드) + PointCut(Advice를 적용할 위치 결정)
  • 조인 포인트 (join point)
    • 애플리케이션 실행 흐름에서의 특정 포인트
    • AOP를 적용할 수 있는 지점
    • Spring AOP는 프록시 방식을 사용하므로 조인 포인트는 항상 메소드 실행 지점으로 제한됨
    • AOP 를 수행하는 메소드(Advice method)는 JoinPoint 인스턴스를 인자로 받음
    • 프록시 방식을 사용하는 스프링 AOP는 스프링 컨테이너가 관리할 수 있는 스프링 빈에만 AOP를 적용 가능
  • 어드바이스 (Advice)
    • 조인 포인트에서 수행되는 코드
    • 시스템 전체 Aspect에 API 호출을 제공
    • 순서 보장 X
    • @Around 를 가장 많이 사용. try ~ catch ~ finally 구문 처리 가능.
    • 어드바이스의 첫 번째 파라미터는 ProceedingJoinPoint
    • proceed()를 통해 대상을 실행. 여러 번 실행 가능.
  • 포인트컷 (Pointcut)
    • Advice가 적용될 위치를 선별
    • 프록시를 사용하는 Spring AOP는 메서드 실행 지점만 포인트컷으로 선별 가능
    • AspectJ 표현식 사용
    • @Pointcut("execution(* hello.aop.order..*(..))")
    • Pointcut 지시자는 execution을 가장 많이 사용.
    • 표현식에서 &&, ||, ! 로 결합 가능
  • 위빙 (Weaving)
    • 포인트컷으로 결정한 타겟의 조인 포인트에 어드바이스를 적용
      = Advice를 핵심 코드에 적용
    • Spring AOP는 런타임, 프록시 방식
  • AOP 프록시 (proxy)
    • AOP 기능을 구현하기 위해 만든 프록시 객체
    • Spring에서 AOP 프록시는 JDK 동적 프록시 or CGLIB 프록시
  • 타겟 (Target)
    • 핵심 기능을 담고 있는 모듈
    • Adivce를 받는 객체
    • 포인트컷으로 결정됨
  • 어드바이저 (Advisor)
    • 1 Advice + 1 Pointcut
  1. 내일 공부할 것
  • 프록시 (proxy), JDK 동적 프록시, CGLIB 프록시
  • 애너테이션(Annotation)을 이용한 AOP, @AspectJ
  • 어드바이스 순서부터 실습

<느낀 점>
AOP의 목적은 알겠으나, 아직 실제 사용에 있어서 전체적인 그림이 그려지지는 않는다.
일단 프록시의 개념이 정리가 안 됐다.

오늘도 인프런 무료 강의를 참고하긴 했는데, 내일 AOP에 대해 정리한 블로그들을 찾아서 좀 읽어보고, 유튜브도 찾아보고 공부한 뒤에 다시 강의를 봐봐야겠다.
DI보다 더 학습 컨텐츠가 부실한 느낌이라 헤매고 있다.

아, 그리고 오늘 실습하다가 @SpringBootTest가 적용이 안돼서 구글링해보니 @AspectJ 사용하려면 터미널에서 brew 통해 gradle을 다운 받아야한다는 이야기를 보고 다운까지 받았으나, 소용이 없었다.

동기인 고구마님께 SOS쳤더니, 내가 수정한 build.gradle 파일을 reload하지 않아서 그런 것이었다. gradle파일 수정하거나 외부 라이브러리에 필요한 게 없으면 reload를 해보자.

0개의 댓글