인프런 커뮤니티 질문&답변

호춘님의 프로필 이미지
호춘

작성한 질문수

스프링 핵심 원리 - 고급편

매개변수 전달

args 표현식을 이용한 매개변수 전달 개념 문의

작성

·

409

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

포인트컷 표현식을 이용하여 매개변수를 전달하는 것을 공부했습니다. 이 개념과 본래 포인트컷의 개념이 헷갈려서 문의드립니다.

 

@Around("allMember() && args(arg, ..)")
public Object logArgs2(ProceedingJoinPoint joinPoint, Object arg) throws Throwable {
	log.info("[logArgs2]{}, arg={}", joinPoint.getSignature(), arg);
	return joinPoint.proceed();
}

 

포인트컷은 조인 포인트를 필터링하기 위한 개념으로 공부했습니다. 위 코드에서 args(args, ..) 부분의 args가 매개변수를 나타내는 것은 이해가 됩니다. 하지만 ArgsTest 코드에서 학습했을 때는 args() 표현식 안에 String, Object, java.io.Serializable 등등과 같은 타입을 적어줘서, 매개변수의 타입을 필터링했었거든요. 그러면 args는 어떤 타입을 필터링하는 포인트컷인가요? 무엇이든 상관없는건가요?

답변 2

0

안녕하세요. 호춘님, 공식 서포터즈 코즈위버 입니다. AI 답변에 더하여 답변 드립니다.

질문하신것처럼 어떤 표현식도 가능합니다. 타입을 명시하면 필터를 추가하는 개념으로 이해하시면 됩니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴이에요.

args 표현식을 이용하여 매개변수를 전달하는 내용에 대해 문의하셨는데요.

포인트컷 표현식인 “@Around(“allMember() && args(arg, ..)”)“에서 args(arg, ..) 부분은 매개변수를 전달하는 역할을 합니다. 여기서 arg는 첫 번째 매개변수를 의미하고, 이후에 오는 ” .. “은 0개 이상의 매개변수를 의미합니다.

즉, 위의 코드에서 “allMember()“로 필터링된 조인 포인트에 대해 첫 번째 매개변수를 받아 로그를 출력하게 되는 것입니다.

포인트컷은 조인 포인트를 필터링하여 어떤 메서드에 어떤 조건을 걸지 정의하는데 사용되며, args 표현식은 매개변수의 값에 따라 조건을 추가할 수 있습니다.

포인트컷과 매개변수 전달 개념이 헷갈렸던 것 같은데, 포인트컷은 매개변수를 필터링하여 어떤 메서드에 적용할지를 정하는 역할을 하고, args 표현식은 매개변수의 값을 조건으로 추가하여 필터링하는 역할을 합니다.

더 궁금한 점이 있으시면 언제든지 물어보세요!

호춘님의 프로필 이미지
호춘

작성한 질문수

질문하기