책에서 소개하는 예제를 통해서 스프링은 왜이렇게 생겼는가 이해해 볼수 있는 챕터 스프링의 철학 ejb 가 커지면서 잃어버렸던 객체지향을 다시 잘 적용해보자 ejb 가 많은 기능을 제공하지만 서비스로직에 컨테이너를 쓰기위한 코드들이 많이 침투됐다함 객체지향을 해야하니까 오브젝트에 많은 관심을 둔다. 오브젝트가 어떻게 생기고 없어지고 사용되는지 오브젝트를 다루는 베스트프랙티스를 프레임워크단에서 제공해버리기 첫번째, 관심사의 분리 왜 해야 하는가? 소프트웨어는 여러가지 요구사항에 의해 항상 변화하고 개발자는 변화를 어느정도 대비하면서 개발을 해야함 관심사를 분리하지 않으면 db 암호를 바꾸려고 모든 dao를 변경해야하는등 수정에 유연하지 못하게 됨 응집도 높고 결합도 낮은 코드를 만들기 위해 노력하자 User..
실무중에 클라이언트에서 request를 form-url-encoded 방식으로 보내는데 그중에 배열의 표기가 [ ] 를 사용할때 매핑에러가 났었다 list[]=1&list[]=2 이런식으로 배열을 url 방식으로 표기할때 명확한 표준이 없는 것 같다. list=1&list=2도 가능하다 @RestController class TestController { @PostMapping("/url-encode") fun urlEncode(body: TestBody): String { println(body) return "ok" } @PostMapping("/json") fun json(@RequestBody body: TestBody): String { println(body) return "ok" } } da..
class Test(){ fun hi(){ println("hi") } } var test: Test? = Test() fun ifFunc(){ if(test != null){ println(test!!.hi()) // 가변이기 때문에 스마트캐스팅이 불가능 } } fun letFunc(){ test?.let{it.hi()} } 이렇게 가변 변수이지만 public static final void ifFunc() { if (test != null) { Test var10000 = test; Intrinsics.checkNotNull(var10000); var10000.hi(); Unit var0 = Unit . INSTANCE; System.out.println(var0); } } public static ..
이펙티브 코틀린 아이템1 에서 "값을 사용하는 시점에 따라서 다른 결과가 나올 수 있기 때문입니다" 와 함께 보여준 예제가 잘 와닫지 않아서 예제를 만들고 자바로 변환해봄 fun nameOrNullByRandom(): String? { return listOf(null, "huni").random() } val nameGetter: String? get() = nameOrNullByRandom() val nameFinalProperty: String? = nameOrNullByRandom() fun main() { if(nameGetter != null){ println(nameGetter!!.length) // 캐스팅 안됌 } if(nameFinalProperty != null){ println(nam..