JPA란? JPA는 Java Persistence API의 약자입니다. Persistence라는 단어는 Java DTO(Data Transfer Object)에게 '없어지지 않고 오랫동안 지속'되는 '영속성(persistence)'을 부여해준다는 의미입니다. 즉, 데이터를 DB상에 영구적으로 저장해주는 API라고 생각하면 됩니다. 기존 JDBC만을 이용하는 경우 반복적이며 비슷한 SQL문을 많이 만들어야하고, 데이터베이스의 테이블과 자바 객체간의 매핑하는 소모적인 작업을 지속해야 합니다. JPA를 사용하게 되면 SQL문을 개발자가 만들지 않기 때문에 객체 중심적인 개발로 생산성과 유지보수의 능률이 크게 오르고, 특정 DBMS 문법에 종속적이지 않은 개발이 가능합니다. 또한 JPA의 영속성 컨텍스트는 효율..
롬복 플러그인의 설치&설정방법은 이전 포스팅을 참고 한다. ☞ 인텔리제이(intelliJ)에서 롬복(Lombok) 설치&설정하기롬복(Lombok) 롬복(Lombok)은 Java에서 반복적으로 작성되는 getters/setters나 equals, hashCode, toString 또는 생성자 관련 코드들을 간결하게 만들어주는 라이브러리다. 사실 자바를 지원하는 웬만한 IDE가 이런 코드들의 자동 생성을 지원하고 있어서 필요성을 못 느낄수도 있으나, 롬복(Lombok)은 유지 보수시에 큰 도움이 된다. 유지보수시에 클래스의 필드의 갯수와 비례해서 길어지는 getters/setters가 없으니 코드가독성이 올라가고, 필드값을 추가삭제 할 때도 getters/setters에 대한 신경을 쓰지 않아도 된다. @G..
Comparable 인터페이스를 이용한 기본정렬에 대한 것은 이전 포스팅을 참고 ☞ List 정렬하기 - 1. Comparable 인터페이스 Comparable vs Comparator 클래스 개발자가 Comparable 인터페이스를 구현해서 정해둔 기본 정렬 이외에 다른 방식으로, 정렬하고 싶은 경우에는 이름 비슷한 Comparator인터페이스를 이용해야 한다. 기본 정렬 이외에 방식이라는 것은 다른 필드값을 기준으로 정렬하고 싶은 경우나, 정렬방식을 변경하고 싶은 경우를 말한다. 아래 예제를 살펴보자 class BookNameComparator implements Comparator { @Override public int compare(Book o1, Book o2) { return o1.getNa..
컬렉션 프레임워크(Collections Framework)에서 List는 '순서'를 기억하고 중요시하는 자료구조다. List의 담겨있는 객체의 특정 필드값을 기준으로 순서를 정렬하고 싶다면 Comparable 인터페이스와 Collections.sort()메소드를 사용한다. 아래 간단한 예제를 보자. public class Book implements Comparable { private String name; private int price; public Book(String name, int price) { this.name = name; this.price = price; } public String getName() { return name; } public int getPrice() { retur..
제네릭스의 와일드카드 "?"에 대한 내용은 이전 포스팅을 참고 ☞ 제네릭스(Generics) - 3. 와일드 카드 제네릭 메소드 제네릭은 클래스에만 국한된 것은 아니다. 메소드 선언부에 제네릭 타입이 선언할 수있으며, 이러한 메서드를 제네릭 메서드라 한다. 제네릭 타입의 선언 위치는 반환 타입 바로 앞이다 static void myMetod(List list){ . . . } 제네릭 메소드 주의사항 제네릭 클래스에 정의된 타입 변수와 제네릭 메서드에 정의된 타입 변수는 별개의 것이다. 마치 지역 변수를 선언한 것과 같다고 생각하자. - 자바의정석 3판 695쪽 class Myclass { .... static void myMetod(List list){ // 제네릭 클래스의 선언된 T와 메소드의 선언된 ..
오버로딩이란? 같은 이름의 메소드를, 다른 매개변수를 받아 동작하도록 재정의 하는 것이다. 예를들어, 아래와 같은 2개의 정수를 받아 합계를 반환하는 sum이라는 함수가 있다고 가정 해보자 public int sum(int a, int b){ return a+b; }그리고 sum과 같은 이름의 메소드를, 다른 매개변수 실수 2개를 받아 동작하도록 재정의 하면, public double sum(double a, double b){ return a+b; } 같은 이름의 메소드가 중복되어 존재할 수 있다. 언제사용할까? 간단히 오버로딩이 불가능 하다고 생각해보자. 위의 예제 sum 함수는 매개변수의 타입 혹은 매개변수의 갯수에 따라서 다른 이름의 메소드들이 존재해야 할 것이다. public int sumInt..
개요 다형성의 사전적 의미는 '여러 개의 형태를 갖는다'라는 뜻이다. 여러 형태를 갖으므로써 사용자는 사용편의성을 취할 수 있다.다형성이라는 것은 객체에게만 국한된 개념은 아니다. 오버로딩과 오버라이딩은 메소드의 다형성을 쉽게 설명할 수 있는 개념이다. 반면에, 객체의 다형성은 쉽지 않아 개념을 정리해보았다. 설명을 위한 예제 클래스는 아래와 같이 구현되어 있다. class 자동차{ void run() { System.out.println("달린다."); } } class 슈퍼카 extends 자동차{ @Override void run() { System.out.println("빨리 달린다."); } void turbo() { System.out.println("순간 가속도를 최대로 올린다."); } }..
오버라이딩이란? 조상(부모) 클래스를 상속받은 자식 클래스를 작성할 때, 상속받은 메소드의 기능을 재정의 하는 것이다. 언제 사용할까? 상속받은 메소드 중 자식 클래스에서 사용할 수 없는 경우나, 자식 클래스를 만드는 개발자의 입장에서 메소드의 기능을 재정의를 하고 싶을 때 사용한다. (모든 클래스를 한명의 개발자가 만드는 것이 아님을 항상 염두하자) 오버라이딩 선언 조건 상속받은 메소드와 오버라이딩한 메소드의 이름이 같아야 한다.상속받은 메소드와 오버라이딩한 메소드의 매개변수가 같아야 한다. (매개변수의 타입, 갯수)상속받은 메소드와 오버라이딩한 메소드의 리턴타입이 같아야 한다. 오버라이딩시 주의사항오버라이딩 된 경우, 부모클래스의 메소드는 무시되고 자식클래스의 오버라이딩 된 메소드가 호출된다.자식 클..