본문 바로가기

MimetypesFileTypeMap 첨부파일의 타입을 체크해야 할 때 해당 파일의 MimeType 을 살펴보면 어떤 파일인지 알 수 있는데, png 이미지 파일의 MimeType 이 image/png 이 아닌 application/octet-stream 로 넘어오는 현상을 발견했다. new MimetypesFileTypeMap().getContentType(filename); 위와 비슷하게 MimetypesFileTypeMap() 을 사용했는데 이 메소드는 주어진 파일의 확장자를 이용하여 MimeType 을 확인하기 위해 사용자 시스템에서 다음의 순서로 mime.types 파일을 찾는다. 프로그래밍 방식으로 MimetypesFileTypeMap 인스턴스에 항목 추가사용자의 홈 디렉토리에 있는 .mime.types/lib/mime.types..
DAO Pattern DAO(Data Access Object) 디자인 패턴은 비즈니스 계층에서 퍼시스턴스 계층을 분리하는데 사용되는 구조적 패턴이다. 쉽게말해 퍼시스턴스(Persistence) 계층... DB 의 데이터 처리(CRUD) 부분을 분리하여 계층간에 복잡성을 숨기는데 필요하다.이 때 필요한건 세가지 이다.Model Object : DAO 클래스에서 검색된 데이터를 저장하는 get/set 메소드가 포함된 간단한 POJO 이다. (Damain Class / Value Object 라고도 함.)DAO Interface : 모델 객체에서 수행할 표준 연산을 정의한다.DAO Class : 인터페이스를 구현한 클래스로서 DataSource 에서 데이터를 가져와야 한다.아래 예는 학번과 이름으로 학생들을 관리하는 프로그램 예..
Integer vs int Integer 와 int 이 둘의 차이를 흘려넘겼다가는 예상치 못한 곳에서 시간 낭비를 할 수도 있다.기능1. Integer : int 의 랩퍼 클래스로 산술 연산이 불가능하고, null 로 초기화가 가능하다. int를 처리 할 때 유용한 상수 및 메소드를 제공한다.2. int : 원시 자료형으로 산술 연산이 가능하고, 키워드로 쓰이며 null 로 초기화 할 수 없다.상호 변환 1. Boxing : Integer integer = new Integer(i);2. Unboxing : int i = integer.intValue();문자열 변환1. String -> Integer : Integer.valueOf(String)2. String -> int : Integer.parseInt(String)사이즈1..
Built-in annotations 자바 소스 코드에서 @Override 처럼 @ 기호를 앞에 붙인 메타데이터 형태를 어노테이션(annotation) 이라고 하며 Java5 에서 추가되었다.한글로 번역하면 comment 와 같은 '주석' 이 될 수 있지만 이 어노테이션은 단순한 주석이 아닌 메타 데이터의 일종으로 데이터의 데이터를 정의할 수 있다.소스 코드에서 클래스, 메소드, 변수, 매개 변수, 패키지 등에 사용되어, 클래스가 컴파일되거나 실행될 때 어노테이션에 설정된 값에 따라 클래스의 방향이 결정된다.컴파일러에 의해 생성된 클래스 파일의 어노테이션은 리플렉션(reflection) 을 통해 동작하게 된다.자바 코드에 적용되는 내장 어노테이션@Override - 메소드가 재정의(override) 된 것인지 확인한다. 부모 클래스나 구현된..
java uses unchecked or unsafe operations Note: xxx.java uses unchecked or unsafe operations.Note: Recompile with -Xlint:unchecked for details.cs정상적(?)으로 컴파일 되었고, 실행도 정상적이지만 나타나는 경고.보통 map, list, collection, class 등 캐스팅시에 명시적인 정의가 안되어 있을 경우 나타나지만, 어떤 타입이 올지 불명확한 상태에서의 캐스팅을 강제하는 것 역시 위 경고가 나타난다.해당 코드를 확인하고 명확하게 수정해 주려면 아래 파라미터를 추가하고, 해당 파일을 지정하면 상세 로그가 나타난다.> javac -Xlint:unchecked xxxxx.javacs예를 들어, 아래처럼 타입을 명시하였더라도,HashMap
Object class toString Object 클래스는 java.lang 패키지 소속이며, 컴파일시 자동 import 됩니다.또한 모든 클래스는 이 Object 클래스를 자동으로 상속합니다. 명시하지 않아도 아래의 import 와 extends 를 사용한 것과 같습니다. import java.lang.* class DataObject extends Object { } 여기에 더불어 Object 정보를 출력했을 때 default 로 표시되는 메소드는 toString() 입니다.Object 정보는 클래스이름@고유번호(참조값) 으로 출력됩니다. getClass().getName() + '@' + Integer.toHexString(hashCode()) 보다시피 hashCode()는 객체의 고유번호를 10진수로 가져오고 toHe..
Object Stream 바이트, 문자, 데이터 타입에 더하여 Object 역시 스트림 처리가 가능합니다.저장 대상이 되는 클래스에 인터페이스(Serializable)만 붙여주면 ObjectInputStream / ObjectOutputStream 사용이 가능합니다. import java.io.*; class SampleData implements Serializable { public String str; public int id; public SampleData(String str, int id) { this.str = str; this.id = id; } public String getSampleData() { return id + "=" + str; } } public class ObjectStreamMain { publ..
Data Stream 바이트나 문자 단위가 아닌 데이터 타입 단위로 처리하는 스트림입니다.DataOutputStream / DataInputStream 으로 변환하며,데이터 타입 별 write / read 메소드를 제공합니다. import java.io.*; public class DataStreamMain { public static void main(String[] args) throws IOException { // DataOutputStream을 이용하여 파일 바이트 단위에서 데이터 타입 단위 스트림으로 데이터 기록하기 FileOutputStream fos = new FileOutputStream("test.txt"); DataOutputStream dos = new DataOutputStream(fos); dos.w..