전체 글
-
동적 프록시 객체를 생성하는 방법교육 자료 2022. 9. 14. 23:09
동적(Dynamic) 프록시 프록시 객체를 직접 생성하지 않고 런타임 시점에 동적으로 생성된 프록시 동적 프록시를 생성하는 2가지 방법 JDK Dynamic Proxy 인터페이스를 구현하여 프록시 생성 CGLib (= Code Generation Library) 클래스의 바이트 코드를 조작하여 프록시 생성 타겟 클래스를 상속하여 프록시를 생성함 따라서, 타겟 클래스 또는 메소드에 final 키워드나 private 접근 제한자가 있는 경우 오버라이딩을 할 수 없으므로 프록시를 생성할 수 없음 추가 설명 JDK Dynamic Proxy와 CGLib 라이브러리 모두 런타임 위빙(weaving) 방식 스프링 AOP는 동적 프록시 기반으로, JDK Dynamic proxy와 CGLib 기술을 사용하고 있음 프록시..
-
[Kotlin] scope function(범위 함수) - let, also, with, run, apply프로그래밍 language 2022. 9. 1. 23:28
scope 함수 코틀린 표준 라이브러리에는 scope 함수로 5가지가 있음 scope 함수는 호출하면 임시 scope가 생기고, 이 scope 안에서는 전달된 객체에 대해 'this' 혹은 'it'을 통해 context 객체에 접근할 수 있다. context 객체의 함수나 프로퍼티에 연속적으로 접근해야 할 때 유용하게 사용할 수 있음 let, also, with, run, apply scope 함수들 사이에 2가지 주요 차이점 context 객체를 참조하는 방법 (this 혹은 it) run, with, apply 는 context 객체를 this로 접근 let, also 는 context 객체를 it으로 접근 return 값 apply, also는 context 객체를 반환 let, run, with..
-
근황 (~22/09/01)근황 2022. 9. 1. 00:28
# 1. 모든 강의 촬영을 완료했다. 최종 오픈일은 9/5(월)이다. 사실, 촬영했던 기간이 회사 프로젝트 기간과 겹치는 바람에 하루에 3시간 정도 자면서 촬영했던 적도 꽤 있어서 결과물에 아쉬움이 남기도 하지만 그래도 포기하지 않고 끝냈다는 사실에 뿌듯하다. https://fastcampus.co.kr/dev_online_befinal #2. 얼마 전 회사에서 진행했던 레거시 1차 개편 작업을 끝냈다. 생각했던 것 이상으로 볼륨이 컸고 일정도 빠듯하긴 했지만 그보다 생각지 못한 버그들 때문에 개인적으로 아쉬움이 남았던 프로젝트였다. 이 때문에, 프로젝트가 끝난 후 개인적으로 부족했던 점을 생각해봤고 레거시 개편 후 테스트는 어떤 식으로 진행하는지 지인 분들께 물어보기도 했었다. 이를 잘 고려해서 2차 ..
-
변성(Variance) 개념 정리프로그래밍 language 2022. 8. 31. 21:11
변성 타입 파라미터의 관계에 따라, 제네릭 타입의 관계가 어떻게 되는지를 나타내는 개념 변성에는 대표적으로 공변(covariant), 무공변(invariant), 반공변(contravariant) 등이 있음 정적타입 언어에서는 제네릭을 사용함으로써 변성이란 개념이 있음 (ex. Java, Kotlin, TypeScript etc...) 제네릭을 잘 사용하려면 변성에 대한 이해가 필요 변성을 잘 사용하면 타입 안전성을 해치지 않으면서 범용적인 API를 만들 수 있음 공변(covariant) 타입 파라미터의 상하위 타입 관계와 제네릭 타입의 상하위 타입 관계가 같은 개념 타입 S가 타입 T의 하위 타입이면, Class도 Class의 하위 타입임 무공변(또는 불공변, invariant) 타입 파라미터의 상하..
-
DI 프레임워크 만들기교육 자료 2022. 8. 28. 23:42
DI (Dependency Injection) 의존성 주입 한 객체가 다른 객체를 사용할 때 의존성이 있다고 함 "A가 B를 의존한다.(= A가 B에 의존하고 있다)"는 의미는 의존대상 B가 변하면 A에 영향을 미친다는 의미 즉, A가 의존 대상 B의 변화에 취약하다는 의미 만약, 인터페이스에 대해서 의존관계를 만들어 두면 인터페이스 구현 클래스와의 결합도가 느슨해지면서 변화에 영향을 덜 받게 됨 런타임 시 의존 관계를 맺는 대상을 외부에서 결정하고 주입해 주는 것 스프링 프레임워크는 DI 기능을 지원해주는 프레임워크 설정만 해주면 됨 DI 장점 의존성 주입을 인터페이스 기반으로 설계하면, 코드가 유연해짐 느슨한 결합도(loose coupling) 클래스 간의 결합도를 줄일 수 있음 변경에 유연해짐 결합..