본문 바로가기

Programming/JAVA

(31)
jackson : jackson json parser 쓸 때 field ordering 자바에서는 json parser 로 jackson 을 많이 쓰네요. (라기 보단 이젠 논란없이 그냥 이것만 쓰는듯.) 제목처럼 jackson 은 Object (pure bean) 를 json 형태의 pretty text 로 serialize 할 때 자주 씁니다. 물론 json type으로 pretty text를 Object 로 deserialize 할 때도 당연히 쓰겠죠. Object 를 serialize 할 때 종종 의도하지 않게 결과 text 가 나오는 경우가 있습니다. 예를 들어 class User { private String name; private String email; private int age; private String homepage; private List education; pr..
java : 문득 왜 로컬변수는 초기화를 안할까에 대한 생각. field variable. heap memory에 올라가는 변수.local variable. stack memory에 올라가는 변수. heap, static memory에 올라가는 기본형 변수들은 초기화가 된다.그러나 stack memory에 올라가는 변수들은 초기화되지 않는다. stack memory 의 특성은 push, pop 등을 하며 어떤 목적을 가지고 계산을 하는데에 쓰이는 메모리.즉, local variable은 프로그래머가 어떤 목적을 가지고 선언을 하며 그 목적은 계산이다.data를 선언할 때 이미 목적을 가지고 있기 때문에분명 data를 할당할 것이라 생각하기때문에 설계차원에서 초기화를 하지 않도록 설계되었다. (내 생각)대신 heap memory에는 기본으로 초기화를 해준다.그 값이 ..
java : label break 를 통한 반복문 제어 java에서는 goto 문을 지원하지 않습니다.그래서 2중, 3중 반복문을 돌릴때 안쪽에 있는 반복문에서 특정 조건에 의하여반복문을 빠져나오기 위해 flag 변수를 사용하는 경우가 많죠.(사실 오늘에서야 label break 란 걸 알게되었죠^^;;;; 이럴때마다 왜이리 기초가 부족한지 ㅠㅠㅠㅠ)이러한 flag 변수를 막고 보다 가독성이 나은 방법으로 label break 를 이용합니다.반복문 앞에 label을 붙여주고 해당 label의 반복문 내에 break, 혹은 continue를 걸어주는 거죠.그럼 중첩반복문을 제일 쉽게 사용할만한 구구단 예제를 볼까요? public class MultiplicationTable { public static final int START = 1; public stat..
[java] DTO등 객체의 property에 손쉽게 data set하는 유틸이 있네요. 제목에서 말하는 유틸클래스는 바로 PropertyUtils 라는클래스입니다.http://commons.apache.org/beanutils/apidocs/org/apache/commons/beanutils/PropertyUtils.html위 링크를 따라가시면 해당 클래스에 대한 document가 있습니다. 저는 어떤 경유에 저걸 쓰게 되었냐면;;;client 에서 넘어온 json data를 바로 객체로 생성하려하는 데에 마땅한걸 찾기가 쉽지 않더라구요;;사실 mkyoung 라는 엄청나게 많은 튜토리얼을 제공하는 블로그에서 얼핏 jackson 이라는 json 라이브러리를 보긴 했으나 무심코 지나갔죠 ㅠㅠ그리고 잘못된 키워드 검색으로 json-simple에 목매달게 되었는데 제가 잘 못쓰는건지... 제공을 ..
java : 정규식 표현을 해야할 경우에는 정규식 표현을 사용하는 것이 좋습니다. :) String 클래스에는 정말 많은 메소드들이 있는데 그 안에 그만큼 많은 정규식 파라미터가 있다는 거 아시나요? 모두 열거하기에는... 제가 그만큼 메소드들을 머릿속에 넣어둔게 아니라 패스할게요^^;;; ㅠㅠ 은근히 자주쓰이고, 은근히 많이 접하는 코드에 집중해볼까요? split, replaceAll 메소드들은 data를 특별하게 가공하거나 할 경우에 정말 많이 접하는 메소드들입니다. 그런데 이 녀석들 어떤 때에 많이 쓰시나요? 오늘 제가 한 작업중에는 웹(클라이언트)에서 넘어온 data의 공백을 제거해야하는 일이 있었습니다. clientString = "아버지가 방에 들어가신다."; clientString.replaceAll(" ", ""); 잘 먹혔을까요? ㅠㅠ 알면서도 만들어내는 버그들중 하나가 바..
java : POJO란? Plain Old Java Object. 여러 프레임워크 기술서적에 빠지지 않고 나오는 단어 POJO... 그냥 툭 까놓고 얘기하자면 프레임워크에 종속되지 않는 (의존성없는) 클래스를 지원한다는 것입니다. 이해하기 어려웠고, 지금도 저렇게 정의해놓은 것이 맞는 것인지, 저걸 말하는 것이 맞는 것인지 애매하네요 -_- 여튼 제 추측은 EJB가 문제다. 편하게 작업하려고 이것저것 끼워넣었다... 따라서 처음 개발에 진입하기도전에 온갖 환경설정에 진이 빠지고... 어떤 모듈을 구현할라 치면 이미 모듈과 모듈끼리 의존이 얽히고 얽혀서 따로 구현하여 끼워넣지 못하고 반드시 상속을 받던가 하여서 구현을 해주어야 하는데 처음엔 편하던것이 너무나 광범위하게 편하려다보니 오히려 역행한 꼴이 난 것이 EJB. 그래서 EJ..
java : 구성(composition)과 위임(delegation) 구성, 위임 등은 headfirst OOA&D 에서 자주 상기되던 개념입니다. 구성이라는 것은 클래스가 다른 클래스를 인스턴스 변수로 가진다는 의미로 보실 수 있으며 위임은 클라이언트 코드에서 구성하고 있는 인스턴스 변수 객체(말이 어렵네요. 참조객체라고 하면 쉬울까요 ㅎㅎ;) 를 통하여 메소드 호출 등을 말하는 것입니다. 아마 수개월전에 headfirst OOA&D 학습하면서 끄적였던 것 같은데 이 주제를 다시 또 다루는 이유는 요즘 보고 있는 책에서 꽤 강하게 주장하고 있어서 적습니다. 서적 이름은 thinking in java라는 서적인데, 모두 읽은 것은 아니지만 headfirst java + OOA&D 느낌이 좀 있네요. headfirst 시리즈가 쉬운 용어들과 재밌는 사진들을 이용해서 거부감을..
java : JVM의 메모리 구조. 관련해서 한두번 글을 올린 적이 있는데 가장 기초의 JVM 메모리구조를 다시 작성해볼까 합니다. 그림에서 볼 수 있듯이 자바 가상 머신은(JVM) 클래스 영역, 자바 스택 영역, 힙 영역, 네이티브 메소드 스택 영역으로 구성되어있습니다. 각 영역은 밑과 같은 공간으로 쓰입니다. 클래스 영역 실행에 필요한 클래스들을 로드하여 저장하는 공간으로서 로드된 클래스의 메소드들은 메소드 영역에, 상수들은 상수 영역에 저장이 됩니다. 자바 스택 영역 자바 프로그램을 수행하면서 발생하는 메소드 호출과 복귀에 대한 정보를 생성하여 저장하는 영역인데 Throwable 객체가 생성시에 이 영역에 대한 내용을 복사합니다.(exception 들의 가장 상위 클래스) JVM 수행도중에 발생되는 exception들의 printSt..