JPA란? JPA는 Java Persistence API의 약자입니다. Persistence라는 단어는 Java DTO(Data Transfer Object)에게 '없어지지 않고 오랫동안 지속'되는 '영속성(persistence)'을 부여해준다는 의미입니다. 즉, 데이터를 DB상에 영구적으로 저장해주는 API라고 생각하면 됩니다. 기존 JDBC만을 이용하는 경우 반복적이며 비슷한 SQL문을 많이 만들어야하고, 데이터베이스의 테이블과 자바 객체간의 매핑하는 소모적인 작업을 지속해야 합니다. JPA를 사용하게 되면 SQL문을 개발자가 만들지 않기 때문에 객체 중심적인 개발로 생산성과 유지보수의 능률이 크게 오르고, 특정 DBMS 문법에 종속적이지 않은 개발이 가능합니다. 또한 JPA의 영속성 컨텍스트는 효율..
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..
카카오2017 신입 공채 1차 코딩테스트의 1번 문제가 비트연산자를 이용한 문제가 나와서 해당 문제를 풀기 위해 비트연산자를 다시 공부해보았다. 비트연산자에 대해 학습 흥미도가 떨어진다면 해당 문제를 푸는 것을 목표로 삼아보자. 카카오 2017 신입 공채 1차 코딩 테스트 문제 해설비트연산자란? 피연산자(숫자)를 비트 단위(2진수)로 다루기 위한 연산자이다. (설명은 Java로 진행한다.) 10진수를 2진수 문자열(String)으로 변환하기 비트연산자 일지라도 자바에서 비트연산자는 10진수의 숫자로 진행해야 한다. 하지만 2진수로 변환된 숫자를 직접 보지 않으면, 연산이 제대로 되고 있는지 알기가 어렵다. Integer.toBinaryString() 메소드를 이용하여 10진수의 숫자를 2진수의 문자열로 ..
제네릭스의 와일드카드 "?"에 대한 내용은 이전 포스팅을 참고 ☞ 제네릭스(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("순간 가속도를 최대로 올린다."); } }..