매번 카톡으로만 답해주기 아까워서 정리하는 컨텐츠
140% 뇌피셜 (뇌피셜 주도개발)
[백후배] 프록시패턴좀 알려줘요
[백후배] 봐도 이해가 안되네
프록시쓰면 프록시 패턴임
[백후배] 왜 굳이
[백후배] 저런짓을해요
AOP때 쓴다고 나오네
[백후배] 근데 aop구현에 쓰는데
[백후배] aop랑 연관성이 이해가 안가요
원래꺼 기능 냅두고
샤바샤바 하고싶잖아
[백후배] 하 ㅠ
데코레이터 패턴은 뭔지아냐
[백후배] 아뇨 ㅠ
안히
AOP가 머여
관점지향프로그래밍이자너
이건 존나 거창하게 AOP 라고 지어놨는데
사실 OOP 나 FP 처럼
뭐 있는게 아니라
걍
방법론이여
[백후배] 그쵸
[백후배] 그 예시를 그거 봤거든
[백후배] 메소드 처음 끝 시간 기록해서 메소드별 실행시간 알고싶은데
[백후배] 모든 메소드에
[백후배] 넣을 순 없으니까
ㅇㅇ
그러면
[백후배] 어노테이션으로 뚝딱하면
[백후배] 만드는건 알겠는데
아니
어노테이션은
지금 안중요하고
[백후배] 제말이 그거죠
[백후배] 내부 돌아가는걸
[백후배] 모르겠어요 ㅜ
어노테이션은뭔데
[백후배] 걍 주석이죠
어노테이션이
어케 걍 주석이냐
그럼 주석을 달지 ㅜ
암튼 AOP하면
함수 앞뒤로
로그 남기는
기능을 추가하고 싶어
그럼
Log( 시작)
원하는거
Log(끝)
일케 코딩할꺼 아냐
[백후배] 그렇죠
그럼 원하는게
계속 바뀌는거니까
Log는 고정이고
원하는걸 파라미터로 받는다고 치자
그럼 함수로
WithLog( 원하는거)
{
Log(시작)
원하는거
Log(끝)
}
일케짜겟지?
[백후배] 그쵸
근데 OOP는
객체단위로 움직여야되니까
저렇게 코딩을 안하고
원하는게 꽥 Quack 이라는 함수라고 치면
프록시꽥 : IQuack
{
IQuack "원래 원하는거 하는객채"
void Quack ()
{
Log();
"원래 원하는거 하는객채".Quack();
Log();
}
}
ㅇㅋ?
[백후배] 하
[백후배] 저게 프록시 클래스?
ㅇㅇ
원래라면
IQuack "원래 원하는거 하는객채" = "원래 원하는거 하는 클래스";
"원래 원하는거 하는객채".Quack();
했는데
로그 남기고 싶으면
IQuack 프록시 : 프록시 클래스 ; 프록시.Quack
하면 너는 이부분만 바꾸고,
함수호출하는데서는 어차피 인터페이스라
IQuack 에 있는 Quack 을 호출하는거니가
호출부분은 전혀 건들일 필요가없지
저 클래스 생성하는 부분만 바꿔주면
ㅇㅋ?
[백후배] ㅇㅎ
[백후배] 다형성이네
ㅇㅇ 이렇게
원래꺼 그대로 기능돌면서 + 알파하면
프록시인거고
원래꺼 기능에 기능을 추가하면 데코레이터 패턴임
[백후배] +알파랑
[백후배] 기능추가랑
[백후배] 같은거 아닌가요
하나하나 따지면 다르긴한데 걍 말장난임
예를들어서 로그다? 그럼
원래꺼 기능은 Fix로 고대로자너 그럼 알파고 프록시고
+50 해주는 함수에 내가 기능을 데코레이터 해서
+50 * 2 해주는걸로 감쌋다?
그럼 데코레이터임
그래서 저 Spring AOP 구현할 때처럼 파이썬에서도 어노테이션마냥 위에 @ 붙이거든?
그거 명칭이 데코레이터임
[백후배] 넹
[백후배] 파이썬에선 데코레이터라 부르는데
[백후배] 저번에 또 찾아보니까
[백후배] 엄연히 다르다고 하더라구요
걍 완전 다른거임
어노테이션은 메타정보를 주는거고
데코레이터는 진짜 데코레이터 해주는거임
어노테이션은 메타 정보를 주니까 그 메타정보에 따라서
컴파일 하기전에 니가 커스터마이징 하는거고
문법적으로 그 기능해주는게 없으니까,
메타정보주면 알아서 메타정보 분석해서 기능만드는건 프로그래밍 해야되는건데,
스프링 내부에 그걸 구현해둔거고
파이썬 데코레이터는 언어 차원에서 데코레이터를 구현되어있는거임
[백후배] 잘하시긴하네
[백후배] ㄹㅇ
'프로그래밍 고찰 > 질문과 답변' 카테고리의 다른 글
[질문과 답변] 인터페이스가 뭔가요? / 추상클래스와 인터페이스차이가 뭐예요? (0) | 2020.08.21 |
---|---|
[질문과 답변] 다형성이 뭐예요? (0) | 2020.08.20 |