처음 자바를 배울때 인터페이스, 추상클래스, 구현클래스에 대해서 각각 이렇게 배우고, 암기하게된다. * 인터페이스 : 메서드의 몸통을 가질 수 없음. 추상메서드와 상수만 보유가능.* 추상클래스 : 구현메서드와 추상메서드를 모두 가질 수 있음. 단독으로 객체생성 불가능.* 구현클래스 : 구현메서드만 가질 수 있음. 인터페이스를 구현하거나 추상클래스를 상속받은 경우 해당 추상메서드를 반드시 구현해야 함. 자바를 처음 배울때는 보통 추상 클래스 혹은 구현 클래스를 이용해 중복 코드를 상위 클래스로 뽑아내고 하위 클래스들에서 재사용하는것에 큰 매력을 느끼게되고, 구현부따위없는 인터페이스에는 그다지 매력을 못느끼는 경우가 많다. 코드를 재사용할 수 있는것도 아니고 그저 메서드 시그니처만 강제하는게 무슨 의미가있다..
자바를 처음 공부할때 각종 자바의 장점들에 대해 배우는데 그 중 하나는 자바는 메모리 관리를 할 필요가 없다 라는 것이다. 그 이유는 GC때문인데, 'GC가 관리해주니 메모리를 관리할 필요가 없다' 라는것만 배우고 GC에 대해서는 이해도가 높지않은 경우가 많다. 하지만 GC에 대해서도 어느정도는 알고있어야 내 코드에서 성능 문제가 발생했을때 트러블슈팅을 할 수 있을것이다. GC에 대해 간략하게 정리해본다. 1. JVM 메모리구조 JVM 메모리구조를 간략히 도식화한 것이다. static 영역은 정적으로 로딩되는 데이터들이 들어가게되고 JVM의 모든 스레드들이 공유하게된다. stack 영역은 스레드별로 할당되는 영역이다. 쉽게말해 메서드의 지역변수들이 stack에 선언된다고 보면된다. 스레드별로 할당되기때문..
MVC 구조로 개발을 하게되면 공통적으로 생성되는 자바파일들이 있다.Controller, Service, DAO, DTO가 그것인데 여기서 DTO는 VO라는 명칭으로도 많이 사용된다.같은 뜻이라면 애초에 2가지 용어가 존재하지 않을텐데, 이 두 용어의 차이를 포스팅하고자한다. 1. DTO(Data Transfer Object)Data Transfer Object 의 약자로 레이어를 이동할때 데이터를 들고있는 객체를 말한다. 객체지향적인 요소는 없이 단순히 데이터만 들고 이동시키기때문에 필드를 public 접근제어자를 사용해 직접 접근하도록 하는 경우도 있다. 자바에서는 뭔가를 하려면 일단 객체를 만들어야되니 객체화해서 사용할뿐 실질적으로 객체지향이라는 거리가 있는 객체.DTO와 VO의 혼용은 사실상 DT..
1. JacksonAjax 통신을 할때는 Response Body에 데이터만 담아서 클라이언트로 전송하게된다. 이때 가장 많이 사용하는 포맷은 json 형태일텐데 자바 객체를 json 형태로 변환해주는 여러 라이브러리중 하나인 jackson을 살펴보려한다. 설정은 거의 할게없다. 스프링 프로젝트를 생성한 후 jackson-databind 의존성을 추가해준다. pom.xml org.springframework spring-webmvc 4.3.4.RELEASE com.fasterxml.jackson.core jackson-databind 2.8.8 그리고 컨트롤러를 하나 구현한다.@RestController public class JsonController { @GetMapping("") public Per..
얼마전 포스팅했던 Joda Time에 대해 사내발표를 진행했는데... 사내 프로젝트 내에서 Date타입으로 선언된 필드들을 Joda Time으로 변경하자는 의견이 나왔고, 다른 개발자들이 별다른 설정이나 추가코드를 작성할 필요없이 Joda Time 클래스를 사용할 수 있게 하라는 지시가 내려왔다. 이렇게까지 일을 벌일(?) 생각은 없었는데 그 작업을 맡게되었고 일단 날짜 데이터를 화면에서 보내면 LocalDate(혹은 LocalDateTime)로 자동으로 받을 수 있게끔 작업하는것부터 시작이 됐어야했다. 그 작업을 포스팅으로 남겨두려한다. 1. Spring Data Binding일단 Spring 컨트롤러는 매개변수로 변수를 넣어놓으면 알아서 해당 타입으로 값을 갖다 쓸 수있게 되어있다.@RequestMa..
보통 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() ..
- Total
- Today
- Yesterday
- OOP
- mariadb
- TEST
- go-core
- Kotlin
- EffectiveJava
- JPA
- java
- java8
- frontcode
- MySQL
- code
- DesignPattern
- javascript
- spring cloud
- frontend개발환경
- backend개발환경
- servlet
- Design Pattern
- JavaScript Core
- Jackson
- http
- programming
- 정규표현식
- toby
- Spring
- Git
- clean code
- generics
- db
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |