보통 JDK에 기본적으로 내장된 클래스는 완전 무결할 것이라고 믿고 쓰는 경우가 많다. 설령 그 라이브러리에서 문제가 발생하더라도 그건 그걸 잘못활용한 내 잘못이지 JDK내부의 라이브러리가 잘못됐다고 생각하는 경우는 거의 없다. 물론 JDK내의 클래스들은 뛰어난 개발자들이 만든것이니 그럴(완벽할) 확률이 매우 높지만 어쨋든 그 클래스들도 개발자들이 만든지라 문제가 있는 경우도 존재한다. 자바의 날짜 관련 클래스는 그 역사가 참 깊은데 그것들을 모두 묻고 자바8에 다시 새로운 날짜클래스가 추가되었다. 기존에 잘 쓰고있는 클래스들이 있었는데 새로나오게된 이유가 뭔지부터 간단하게 살펴보고 신규 클래스에 대해 알아보자. 1. Date자바에서 가장 역사가 깊은 날짜 클래스다. 객체를 생성하는데 2017년 3월 1..
스프링을 이용하여 개발하다보면 List나 Map같은 컬렉션 프레임워크로 이루어진 빈이 필요할때가 있다.보통은 컬렉션 프레임워크를 필드로 갖고있는 클래스를 생성하고 그 클래스를 빈으로 만들어서 해결하는 경우가 많은데(실제로도 그게 더 바람직한 방법일때가 많은것 같다.) 그런 래퍼클래스(Wrapper Class)가 아닌 컬렉션 클래스 그 자체로 빈을 생성해야하는 경우도 존재한다. 빈 설정파일에 이렇게 등록해주고 주입받으면 된다. 주입받을땐 이유는 모르겠지만 @Qualifier 로는 주입이 되지않았다. 일단 일하느라 바빠서ㅜㅜ 원인은 나중에 찾아보고 @Resources 애노테이션으로 주입받아 사용했다.
프레임워크가 대중화되면서 공부목적이 아닌이상 프레임워크없이 쌩 서블릿으로 웹개발을 하는 경우는 거의 없어졌다. 대표적인 프레임워크로는 스프링 프레임워크가 있을텐데 이번에 설명하고자 하는건 프레임워크에 관련된건 아니고.. 어쨋든 이 프레임워크들도 서블릿 기반에서 구동되기때문에 서블릿 매핑이 1개 이상은 필요하다. appServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/appServlet/servlet-context.xml 1 appServlet *.do web.xml에 기술되는 대표적인 서블릿 매핑 일단 요청을 받는 1개 이상의 서블릿들을 생성하고 해당 서블릿이 다시 각각의 컨트롤러들에..
Spring의 RequestMapping 애노테이션을 구현해보고있는 중이다. 해당 애노테이션을 구현하려면 특정 패키지내의 클래스를 모두 읽어들여야 하는데 자바의 기본 리플렉션으로는 불가능했다.뭐 정확히 말하자면 불가능은 아니고 꽤나 코드량이 길어지는 문제가 발생했다. 패키지 이름으로 가져온다기보다 해당 디렉토리를 들어가서 파일들을 읽어오는 형식으로 짜야했어야해서...찾아보니 Reflections라는 라이브러리가 존재했다. org.reflections reflections 0.9.10 현재 최신버전인 0.9.10버전으로 의존성 추가해주고.. @Test public void 패키지_로드_테스트(){ Reflections ref = new Reflections(new ConfigurationBuilder() ..
Reactive Programming이라는건 영단어 뜻 그대로 무언가에 반응하는 프로그래밍이라는 것이다. 무언가에 반응한다는건 대표적으로 이벤트들이 존재할 것이고, 이에 대한 대표적인 디자인 패턴인 옵저버 패턴이 있다. 1. Duality네이버 사전을 검색해보면 '이중성'이라는 단어로 나오며, 수학적인 용어로는 '쌍대성'이라고 한다. 꽤나 어려운 개념이니 글로 풀어쓰는것보다는 코드로 확인해보자. List list = Arrays.asList("a", "b", "c", "d", "e") for (Iterator iter = list.iterator(); iter.hasNext(); ) { System.out.println(iter.next()); } 크게 어려운것 없는 코드다. 문자열이 들어있는 리스트를 ..
1. Generic Type Intersection제네릭은 Bounded Type Parameter, Bounded Wildcard를 이용해 제네릭에 들어오는 타입을 제한할 수 있다. public class Test { public static void main(String args[]) { method01(new ArrayList()); method02(new ArrayList()); } //Bounded Type Parameter public static void method01(List list) { } //Bounded Wildcard public static void method02(List
1. Genericsjava5에서 부터 추가된 제네릭은 타입을 파라미터로 만들어 넘어오는 파라미터에 따라 다른 타입이 되게끔한다. 이로서 얻을 수 있는 이득은 타입이 동적으로 변하게 되기때문에 개발자가 직접 타입체크를 하고 타입 캐스팅을 하는 코드가 없어지게되어 정적인 타입 안전성을 확보할 수 있다. public class Test { public static void main(String[] arg) { MyOptional stringOptional1 = MyOptional.ofNullable("hello"); MyOptional stringOptional2 = MyOptional.ofNullable(123); } } class MyOptional { T t; private MyOptional(T t)..
토비의 스프링으로 유명한 토비님의 방송을 보고 정리를 시작한다. 1. Dispatch1. (특히 특별한 목적을 위해) 보내다 2. (편지・소포・메시지를) 보내다 3. 신속히 해...네이버 검색결과이다. 자바는 객체지향 프로그래밍언어로서 객체들간의 메세지 전송을 기반으로 문제를 해결하게된다. 메세지 전송이라는 표현은 결국 메서드를 호출하는것인데 그것을 dispatch라고 부르는 것이다.dispatch는 static dispatch와 dynamic dispatch가 있는데 static은 구현클래스를 이용해 컴파일타임에서부터 어떤 메서드가 호출될지 정해져있는것이고, dynamic은 인터페이스를 이용해 참조함으로서 호출되는 메서드가 동적으로 정해지는걸 말한다. public class Test { public s..
자바8을 처음 접했을때 느꼈던 점은 자바8의 꽃은 스트림이라는 것이었다. 그러나 내 맘을 가장 매혹시키고, 언젠가 자바8을 쓸날이 오면 이것만큼은 꼭 잘 쓰고싶다고 생각했던것은 오늘 포스팅할 Optional이었다. 1. null자바는 좀 더 쉽게 프로그래밍하자는 취지에서 개발됐다. OSMU(One Source Multi Use)를 위해 하나의 코드로 OS에 상관없이 돌아갈수 있게 개발됐고, C계열을 처음 공부할때 지옥이라 불리는 포인터를 모두 감췄다. 그러나 단 하나 감추지 못한 포인터가 있는데 그것이 null포인터다.자바 프로그래밍에서 NullPointerException은 언제 터질지 모르는 에러의 근원이었고 이를 방지하기위해 대부분의 메서드 앞줄에선 중복적인 방어코드가 들어가는 문제가 있었다. pu..
- Total
- Today
- Yesterday
- Design Pattern
- JPA
- code
- MySQL
- java
- EffectiveJava
- generics
- servlet
- frontcode
- OOP
- clean code
- java8
- JavaScript Core
- Spring
- go-core
- toby
- db
- Git
- Kotlin
- Jackson
- TEST
- DesignPattern
- programming
- 정규표현식
- backend개발환경
- javascript
- mariadb
- spring cloud
- frontend개발환경
- http
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |