kotlin 에서 java 프레임워크(대표적으로 spring, hibernate)를 이용할때 가장 문제가 되는건 상속이다. java 프레임워크들은 상속을 적극적으로 이용해서 개발자들의 코드를 확장하는데 kotlin 은 기본적으로 final class 이기때문에 상속이 되지않기때문이다. open 키워드를 붙이면 상속이 되게되는데 이를 수작업으로 할 경우 빼먹기도 쉽고 일일이 타이핑을 해줘야한다는 불편함이 존재한다. 이를 해소하기위해 jetbrains 에서 kotlin-allopen 이라는 플러그인을 지원하고있다. IDE 에서 언어를 kotlin 으로 지정해 spring 프로젝트를 생성하면 기본적으로 들어가는 플러그인이기때문에 저 플러그인을 제대로 인지하지 못하고 있어도 자연스럽게 개발하는데 문제가 없게되기..
간혹 커뮤니티 등에서 AOP 에 대한 얘기를 하면 많이들 잘 알고있는 내용이 이렇다. "spring 에서는 인터페이스가 있으면 기본적으로 JDK 에서 제공하는 dynamic proxy 를 이용하고, 없으면 CGLIB 를 이용한 상속 기반 프록시를 구현해서 AOP 를 구현한다." 나도 머리로는 잘 이해하고 있긴한데 돌이켜 생각해보면 제가 작성하는 AOP 가 dynamic proxy 로 도는지, CGLIB 로 돌아가는지에 대해 크게 고민해본적이 없다. 그리고 더 곰곰히 생각해보면 dynamic proxy 로 돌아가는 AOP 를 본적이 거의 없다. 그리고 실제로 인터페이스를 구현하게 해서 AOP 를 사용하면 인터페이스가 있음에도 불구하고 CGLIB 로 도는걸 볼 수 있다! (참고로 포스팅 작성 시점 기준 sp..
spring 에서는 멀티스레드 활용을 위해 jdk 에서 제공하는 Executor 인터페이스를 확장한 TaskExecutor 인터페이스를 근간으로 활용하고있다. 아마도 개발자들은 TaskExecutor 구현체로 ThreadPoolTaskExecutor 를 사용하고, spring 에서 제공하는 @Async 애노테이션을 활용한 멀티스레드 프로그래밍을 많이 할 것 같다. 보통 spring-batch 로 spring 을 처음 접하는 경우는 흔치 않을 것이고, spring-mvc 와 같은 web 프로젝트로 spring 에 대해 접한 후 spring-batch 도 접하게 되는 경우가 많을텐데, 이때 기존에 알고있던 spring 의 멀티스레드 프로그래밍 경험으로 코드를 작성하면 job 실행 이후 jvm 이 종료되지 않..
- Total
- Today
- Yesterday
- http
- 정규표현식
- java8
- frontend개발환경
- spring cloud
- JavaScript Core
- frontcode
- programming
- EffectiveJava
- mariadb
- OOP
- generics
- Jackson
- toby
- java
- db
- Git
- Spring
- DesignPattern
- Kotlin
- javascript
- JPA
- Design Pattern
- code
- TEST
- servlet
- go-core
- clean code
- backend개발환경
- MySQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |