본문 바로가기

Java

JPA - ORM components 현대의 어플리케이션은 관계정데이터베이스를 이용해 데이터를 저장한다. 최근데 많은 벤더들은 데이터 관리의 부담을 줄이기 위해 객체형 데이터베이스로 교체한다. 이 뜻은 객체형 데이터베이스나 객체 관계형 기술이 데이터를 저장, 검색, 수정, 관리를 담당하는 것을 의미한다. 객체관계형 기술의 핵심부는 orm.xml 매핑이다. xml은 컴파일이 필요 없기때문에 우리는 쉽개 수정하고 여러 데이터소스로 쉽게 관리할 수 있다. Object Relational Mapping ORM은 ORM이 무엇이고 어떻게 동작하는지 간단히 알려준다. ORM은 객체유형에서 관계형으로, 또는 그 반대로 데이터를 변환할 수 있는 프로그래밍 기능이다.ORM의 주요 기능은 객체를 데이터베이스 데이터에 매핑하거나 바인딩 하는 것이다.매핑하는 동.. 더보기
JPA - 소개 모든 기업 어플리케이션은 많은 데이터를 데이터베이스에 저장하고 검색한다. 저장소 관리를 할수 있는 모든 기술들이 있지만 개발자들은 데이터베이스 최적화에 힘쓴다. 일반적으로 자바개발자는 많은 코드를 사용하거나 단일프레임워크를 사용해 데이터베이스와 연동한다. 그러나 JPA를 사용하면 데이터베이스와 연동하는 부담이 현저하게 줄어든다. 이 형태는 객체모델(자바프로그램)과 관계모델(데이터베이스) 사이에 다리를 놓는다. 관계모델과 객체모델의 불일치 관계모델은 표형태로 표현하며, 반대로 객체모델은 서로 연결된 그래프형태로 표현된다.객체모델이 관계형 데이터베이스에서 저장하고 검색하는 동안 아래의 이유들로 일부 불일치가 발생한다.세분성 : 때때로 데이터베이스의 테이블 수보다 많은 클래스를 가지고 있는 객체모델을 볼수있다.. 더보기
JPA - ORM 튜토리얼 JPA Tutorial Java Persistence API는 거대한 데이터를 지속적으로 데이터베이스에 저장하는 클래스와 메소드의 모음이다.이 튜토리얼은 Persistence(데이터베이스 객체의 복사본을 임시메모리에 저장)에 대한 기본적인 이해를 제공하고, Java Persistence API(JPA)에 대해 배우게 된다. 대상이 튜토리얼은 데이터베이스를 이용한 자바프로그래밍을 추구하는 사람과, Persistence API를 사용하는 모든 열정적인 독자를 위해 디자인 되었다. 전제조건이 튜토리얼은 초보자를 위해 제작되었다. JDK1.6 이상 버전의 자바프로그래밍 그리고 JDBC를 알고있다고 가정한다. 원문 : https://www.tutorialspoint.com/jpa/jpa_introduction.h.. 더보기
java8 functionalInterface Function Java 8 FunctionalInterface 1/4 Function Function 예제/** * Function, The Transformer * function consumer predicate supplier */ /* //abstract class instance Function toInt = new Function(){ @Override public Integer apply(String value){ return Integer.parseInt(value); } }; int result = toInt.apply("100"); System.out.println(result); */ //mapper, String -> Integer Function toInt = value->Integer.pars.. 더보기
Lambda Expression, 람다 예제 Lambda(람다), 익명클래스 표현식 람다는 java 뿐만 아니라 javascript에서도 사용된다. Function toInt = new Function(){ @Override public Integer apply(String value){ return Integer.parseInt(value); } }; int result = toInt.apply("100"); System.out.println(result); 위 toInt라는 익명클래스를 간소화하여 표현할 수 있다. Function toInt = (value)->Integer.parseInt(value); //Lambda Expression int result = toInt.apply("123"); System.out.println(result).. 더보기
String StringBuffer StringBuilder 차이 1. String vs StringBuffer, StringBuilder String immutable(불변함) String 객체는 한번 생성되면 할당된 메모리 공간이 변하지 않는다. +연산 혹은 concat메소드를 이용해 value가 변경이 되어도 기존 문자열에 붙는 것이 아니라 새로운 String 객체를 만든다. 따라서 기존 객체는 GC에 의해 회수된다. StringBuffer, StringBuilder mutable(가변) 문자열 연산으로 기존 객체의 공간이 부족해지면, 버퍼 크기를 늘려서 유연하게 동작한다. 2. StringBuffer vs StringBuilder 두 클래스가 제공하는 메소드는 서로 동일하다. 그러나 StringBuffer는 메소드에 Synchronized 키워드가 존재하여 멀티.. 더보기
Spring DI와 IoC [ Dependency Injection + Inversion of Control ] 요약 *의존성- A클래스가 B클래스를 선언하여 사용하고 있으면 A는 B에 의존하고 있다고 말할 수 있다. 그럼 의존성 주입은 무엇일까?말 그대로 A클래스에 B에 의존하도록 의존성을 주입하는 것이다. 그렇다면 A클래스에서 B클래스를 선언해서 사용하는 것과 Spring에서 의존성을 주입하는 것과 무엇 이 다를까?그건 바로 개발자가 코드를 이용하여 명시적으로 의존성을 주는 것이 아니라 Application Context(IoC Container)가 선언된 어노테이션을 기반으로 의존성을 주입한다. 즉, DI와 IoC는 한몸이라고 볼 수 있다.그리고 DI를 원하는(의존성을 주입받기 원하는)객체는 먼저 그 자신이 컨테이너가 관리하는 빈이 되어야한다. (틀린내용있으면 댓글로 지적해주세요)( _ _ ) 더보기
엔티티 생명주기 영속성 관리 엔티티에는 4가지 상태가 존재한다. 1. 비영속(new / transient) : 영속성 컨텍스트와 전혀 관계가 없는 상태2. 영속(managed) : 영속성 컨텍스트에 저장된 상태3. 준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태4. 삭제(removed) : 삭제된 상태 비영속- 엔티티 객체를 생성했다. 지금은 순수한 객체상태이며, 아직 저장하지 않았다.- 따라서 영속성 컨텍스트나 데이터베이스와는 전혀 관계가 없다. 이것을 비영속 상태라고 한다. //객체를 생성한 상태(비영속)Member member = new Member();member.setId("member1");member.setUsername("회원1"); 영속- 엔티티 매니저를 통해 엔티티를 영속성 컨텍.. 더보기
String 객체에 대한 개념 String : 문자열을 저장하는 클래스 타입 String name; name = "홍성재"; String hobby = "자바"; 객체를 생성하면 힙 메모리에 생성된다. 이때 스택영역에는 힙메모리의 주소가 기록된다. 하지만 문자열 리터럴이 동일하면 String 객체를 공유한다. String name1 = "홍성재"; String name2 = "홍성재"; 단 new 키워드를 사용한다면 서로 다른 객체를 힙 메모리에 할당한다. String name1 = "홍성재"; String name2 = "홍성재"; String name3 = new String("홍성재"); name1 == name2 //true name1 == name3 //false name1.equals(name3) //true 관련 예제 :.. 더보기
제네릭이란? 제네릭(generic) 예제 제네릭(Generic)사전적 의미 : 포괄적인, 회사 이름이 붙지않은 하지만 프로그래밍적 관점에서 보자면 비슷하지만 다른 의미로 사용된다.클래스 내부에서 사용할 데이터 타입을 외부에서 지정하여 사용하는 방법, 즉 클래스 내부 데이터 타입을 인스턴스 생성할 때 확정하는 것을 제네릭(Generic)이라고 한다. 우선 제네릭이 무엇인지 알아보자. package devhong.tistory.com.generic; class Person{ public T info; Person(T info){ this.info = info; } } public class GenericMain { public static void main(String[] args) { Person p1 = new Person("test"); Pe.. 더보기