JUnit Test를 진행하는데 실제 DB에 있는 데이터를 건들지 않고 테스트를 하고 싶은 마음에 시작한 프로젝트이다. 연습하는 김에 Java로 설정해 보았다. 먼저 Gradle로 라이브러리를 빌드하자 build.gradle compile group: 'org.springframework', name: 'spring-context', version: '4.3.7.RELEASE' compile group: 'commons-dbcp', name: 'commons-dbcp', version: '1.2.2' compile group: 'org.springframework', name: 'spring-jdbc', version: '4.3.7.RELEASE' compile group: 'org.mybatis', n..
hibernate-validator를 이용하여 유효성을 체크하는 방법이다. 먼저 필요한 라이브러리들을 빌드 한다. build.gradle compile 'javax.servlet:jstl:1.2' compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1' compile group: 'org.hibernate', name: 'hibernate-validator', version: '5.1.3.Final' compile 'org.springframework:spring-webmvc:4.0.0.RELEASE' 만약 Maven을 사용한다면 pom.xml javax.servlet jstl 1.2 javax.servlet javax.ser..
ArrayList와 LinkedList는 Java에서 제공하는 Collection으로 List 인터페이스를 상속한다. 먼저 둘에 대해 알아보자. ArrayList는 배열을 사용한다고 생각하면 되는데 데이터를 추가하거나 삭제할 때 이미 크기가 정해져 있어 임시 배열을 생성해서 데이터를 복사하는 방법을 사용하고 있다. LinkedList는 각 노드의 앞과 뒤에 있는 노드의 주소로 연결되어 있어서 데이터를 추가하거나 삭제할 때 알고 있는 앞과 뒤쪽 노드의 주소 값만 바꿔주면 된다. 이제 앞에서 본 두 리스트의 차이점을 보자. 1. 검색 ArrayList는 각 데이터의 index를 가지고 있으므로 바로 검색할 수 있어 빠르다. LinkedList는 제일 앞에 있는 데이터부터 차례대로 찾아야 하기 때문에 느리다...
먼저 일차원 배열을 복사해보자 boolean[] bool1 = new boolean[1]; boolean[] bool2 = bool1; bool2[0] = true; 위와 같이 작성했을 때 boo1[0]은 false가 아닌 true를 return 한다. 왜냐하면, 배열 또한 객체이기 때문이다. 즉 bool2에 bool1의 값을 넘겨주는 게 아닌 주솟값을 넘겨준다. 그렇다면 어떻게 복사해야 같은 주솟값을 가지지 않을까? 세 가지 방법이 있다 (boolean 배열은 초기화하지 않아도 false를 담고 있다). 1. 새로운 배열을 만들어 해당 배열에 값을 넣어준다. boolean[] bool1 = { true }; boolean[] bool2 = new boolean[1]; for(int i = 0; i < ..
final 예약어를 예제와 함께 알아보자. - 순서 - 1. 클래스에 final이 붙으면? 2. 메소드에 final이 붙으면? - 변수에 final이 붙을 때 공통 - 3. 클래스 변수에 final이 붙으면? 4. 인스턴스 변수에 final이 붙으면? 5. 지역 변수에 final이 붙으면? 6. 매개 변수에 final이 붙으면? 7. 변수가 참조 자료형일 때 final이 붙으면? -------------------------------------------------------------------------- 1. 클래스에 final이 붙으면? final class SuperClass { } public class SubClass extends SuperClass { // 에러가 난다. } 상속되지 않..
제네릭이란 클래스 내부에서 사용할 데이터 타입을 외부에서 정할 수 있게 하는 기법으로 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 고칠 수 있게 해준다. 주로 Collections에서 많이 쓰이며 Java 5 버전에 추가되었다. 우선 간단하게 사용법을 보자 List list = new ArrayList(); list.add("S"); list.add(1); // 에러 String s = list.get(0); String i = list.get(1); // 에러 나지 않음 위 코드에서
형변환이란 Type을 바꿔주는 것으로 두 가지가 있는데 업 캐스팅과 다운 캐스팅이다. 먼저 기본형에 대한 형변환을 * 업 캐스팅(작은 Type -> 큰 Type) : 작은 Type을 큰 Type으로 Type을 바꾸는 경우로 Type이 바뀌면서 데이터의 손실이 발생하지 않음으로 묵시적 형변환이 가능하다. ex) double d1 = 1; ex) double d2 = 1.0F; * 다운 캐스팅(큰 Type -> 작은 Type) : 큰 Type을 작은 Type으로 Type을 바꾸는 경우로 Type이 바뀌면서 데이터의 손실이 발생하기 때문에 명시적 형변환을 해야한다. ex) int i = (int)1.7; // i에는 0.7의 손실이 발생하여 1만 남는다. * 만약 기본형 끼리의 연산을 한다면 연산에 사용된 기..
소켓이 어딘가에서 이미 끈긴 상태에서 끈긴 소켓과 통신을 하려고 할 때 나는 Exception이다. 아래는 경험해본 예제이다. Class Request {public Request(inputStream in){BufferedReader br = new BufferedReader(new InputStreamReader(in));br.close();}} Class RequestHandler {InputStream in = connection.getInputStream();OutputStream out = connection.getOutputStream();Request request = new Request(in);DataOutputStream dos = new DataOutputStream(out);dos..
Comparable와 Comparator은 객체를 정렬할 때 입맛에 맞게 정렬하기 위해 사용한다. 각각의 인터페이스를 사용하는 방법에 차이가 있고 정렬하는 방식은 같다. 음수는 앞으로 가고 0은 제자리에 머물고 양수는 뒤로 간다는 것이다. 먼저 Comparable를 보면 클래스 안에서 implements 하여 compareTo 메소드를 재정의 하여 사용하는데 현재의 객체와 파라미터로 들어오는 객체를 비교한다. class Example implements Comparable { int a; int b; example(int a, int b){ this.a=a; this.b=b; } public int compareTo(Example o) { if(a > o.a){ return 1; } else if(a <..