반응형 전체 글346 다양한 연관관계 매핑 (일대일, 다대다) 2023. 02.07 14:30 복습 시작 일대일 [ 1: 1 ] 일대일 관계는 아래와 같은 특징이 있다. 일대일 관계는 그 반대도 일대일 관계다. 테이블 관계에서 일대다, 다대일은 항상 다쪽이 외래 키를 가진다. 반면에 일대일 관계는 주 테이블이나 대상 테이블 둘 중 어느 곳이나 외래 키를 가질 수 있다. 주 테이블에 외래 키 주 객체가 대상 객체를 참조하는 것처럼 주 테이블에 외래 키를 두고 대상 테이블을 참조한다. 외래 키를 객체 참조와 비슷하게 사용할 수 있어서 객체지향 개발자들이 선호한다. 이 방법의 장점은 주 테이블이 외래 키를 가지고 있으므로 주 테이블만 확인해도 대상 테이블과 연관관계가 있는지 알 수 있다. 대상 테이블에 외래 키 전통적인 데이터베이스 개발자들은 보통 대상 테이블에 외래 키.. 개발/JPA 2022. 2. 28. 다양한 연관관계 매핑 (다대일, 일대다) 2023. 02.07 14:00 복습 시작 다양한 연관관계 매핑 연관 관계 매핑 시에 고려해야 할 3가지가 있다. 다중성 단방향, 양방향 연관 관계의 주인 이 점을 유의하면서 다양한 연관관계들을 살펴보겠다. 다대일 단방향 먼저 다대일 [ N : 1 ]이다. 예시 코드는 아래와 같다. @Entity public class Member{ @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; //getter, setter } @Entity public class Team{ @Id @Generated.. 개발/JPA 2022. 2. 28. 접근 제어자 접근 제어자 접근 제어자는 멤버 또는 클래스에 사용되어, 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다. 클래스나 멤버 변수, 생성자에 접근 제어자가 지정되어 있지 않다면, 접근 제어자가 default(package-private)임을 뜻한다. 접근 제어자는 클래스, 멤버 변수, 메서드, 생성자에서 사용 가능하며 접근 제어자는 아래와 같이 정리할 수 있다. private : 같은 클래스 내에서만 접근이 가능하다. protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근이 가능하다. default(package-private) : 같은 패키지 내에서만 접근이 가능하다. public : 접근 제한이 전혀 없다. 접근 범위가 넓은 쪽에서 좁은 쪽의 순.. 개발/Java 2022. 2. 28. final 제어자 final 제어자 final은 '마지막의' 또는 '변경될 수 없는'의 의미를 가지고 있으며 거의 모든 대상에 사용될 수 있다. 변수에 사용되면 값을 변경할 수 없는 상수가 되며, 메서드에 사용되면 오버라이딩을 할 수 없게 되고, 클래스에 사용되면 자신을 확장하는 자손 클래스를 정의하지 못하게 된다. 아래는 final 제어자 사용에 대해 정리한 표다. 클래스 변경될 수 없는 클래스. 확장될 수 없는 클래스가 된다. 그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다. 메서드 변경될 수 없는 메서드, final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없다. 멤버변수 변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 된다. 지역변수 변수 앞에 final이 붙으면, 값을 .. 개발/Java 2022. 2. 28. package(패키지) Package(패키지 ) package, 즉 패키지란 클래스의 묶음이다. 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있다. 또한 서로 관련된 클래스를 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다. 사실 클래스의 실제 이름은 패키지명을 포함한 것이다. 예를 들면 String클래스의 실제 이름은 java.lang.String이다. 그래서 같은 이름의 클래스일 지라도 서로 다른 패키지에 속하면 패키지명으로 구별이 가능하다. 클래스가 물리적으로 하나의 클래스파일(.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리다. 패키지의 선언은 아주 간단한다. package 패키지명; 클래스나 인터페이스의 소스파일의 맨 위에 다음과 같이 한 줄만 적어주면 된다. 위와 같은 패키지 선언문은.. 개발/Java 2022. 2. 28. 가변인자(varargs) 기존에는 메서드의 매개변수 개수가 고정적이었으나, JDK1.5부터 동적으로 지정해 줄 수 있게 되었으며, 이 기능을 가변 인자라고 한다. 가변 인자는 '타입... 변수명'과 같은 형식으로 선언하며. PrintStream 클래스의 printf()가 대표적인 예다. public PrintStream printf(String format, Object... args) { ... } 위와 같이 가변 인자 외에도 매개변수가 더 있다면, 가변 인자를 매개변수 중에서 제일 마지막에 선언해야 한다. 그렇지 않다면, 컴파일 에러가 발생한다. 가변 인자인지 아닌지를 구별할 방법이 없기 때문에 허용하지 않는 것이다. 이제 아래 코드를 살펴보자. String concatenate(String s1, String s2){ .... 개발/Java 2022. 2. 27. 오버로딩과 오버라이딩 오버로딩 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 메서드 오버로딩, 즉 오버로딩이라고 한다. 오버로딩에는 몇 가지 조건이 있다. 메서드 이름이 같아야 한다. 매개변수의 개수 또는 타입이 달라야 한다. 메서드의 이름이 같다 하더라도 매개변수가 다르면 서로 구별될 수 있다. 매개변수에 의해서만 구별되므로 반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다. 위의 조건을 만족시키지 못하는 메서드는 중복 정의로 간주되어 컴파일 시 오류가 발생한다. 이제 예시를 통해 알아보겠다. long add(int a, long b) { return a+b;} long add(long a, int b) { return a+b;} 두 메서드는 int형과 long형 매개변수가 하나씩 선언되어 있지만,.. 개발/Java 2022. 2. 26. 연관관계 매핑 기초 2023. 02.07 13:00 복습 시작 연관관계 엔티티들은 대부분 다른 엔티티와 연관관계가 있다. 객체는 참조(주소)를 사용해서 관계를 맺고 테이블은 외래 키를 사용해서 관계를 맺는다. 이 둘은 완전히 다른 특징을 가지며, 객체 관계 매핑(ORM)에서 가장 어려운 부분이 바로 객체 연관관계와 테이블의 연관 관계를 매핑하는 일이다. 이제 객체의 참조와 테이블의 외래 키를 매핑하는 방법을 알아보겠다. 알아둬야 할 용어들이 있다. 방향 : 단방향과, 양방향이 있다. 한쪽만 참조하는 것을 단방향, 양 쪽 모두 서로 참조하는 것을 양방향이라고 한다. 방향은 객체 관계에만 존재하고, 테이블은 항상 양방향이다. 다중성: 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해 연관관계의 주인 :.. 개발/JPA 2022. 2. 25. 기본 키 매핑 2023. 02.07 12:00 복습 시작 기본 키 매핑 기본키를 애플리케이션에서 직접 할당하는 대신에 데이터베이스가 생성해주는 값을 사용하려면 어떻게 매핑해야 할까? 오라클의 시퀀스 오브젝트라던가 아니면 MySQL의 AUTO_INCREMENT 같은 기능을 사용해서 생성된 값을 기본 키로 사용하려면 어떻게 해야 할까? 데이터베이스마다 기본 키를 생성하는 방식이 서로 다르므로 이 문제를 해결하기는 쉽지 않다. JPA는 이런 문제를 어떻게 해결하는지 알아보자. 직접 할당 : @Id만 사용 자동 생성 (@GeneratedValue) IDENTITY : 기본 키 생성을 데이터베이스에 위임. (MySQL) SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용. (ORACLE) @SequenceGenerator 필.. 개발/JPA 2022. 2. 25. 클래스 메서드(static 메서드)와 인스턴스 메서드 메서드 앞에 static이 붙어 있으면 클래스 메서드, 붙어 있지 않으면 인스턴스 메서드다. 클래스 메서드도 클래스 변수처럼, 객체를 생성하지 않고도 '클래스이름.메서드이름'과 같은 식으로 호출이 가능하다. 반면에 인스턴스 메서드는 반드시 객체를 생성해야만 호출할 수 있다. 인스턴스 메서드는 인스턴스 변수와 관련된 작업을 하는, 즉 메서드의 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드다. 인스턴스 변수는 인스턴스를 생성해야만 만들어지므로 인스턴스 메서드 역시 인스턴스를 생성해야만 호출이 가능하다. 반면에 메서드 중에서 인스턴스와 관계없는(인스턴스 변수나 인스턴스 메서드를 사용하지 않는) 메서드를 클래스 메서드(static) 메서드로 정의한다. 클래스를 설계할 때, 멤버 변수 중 모든 인스턴스에 .. 개발/Java 2022. 2. 24. 클래스 변수, 인스턴스 변수, 지역 변수 변수는 클래스 변수, 인스턴스 변수, 지역변수 모두 세 종류가 있다. 변수의 종류를 결정짓는 중요한 요소는 '변수의 선언된 위치'이므로, 변수의 종류를 파악하기 위해서는 변수가 어느 영역에 선언되었는지를 확인하는 것이 중요하다. 멤버 변수를 제외한 나머지 변수들은 모두 지역 변수다. 멤버 변수 중 static이 붙은 것은 클래스 변수, 붙지 않은 것은 인스턴스 변수다. 변수 예시 class Variables{ int iv; //인스턴스 변수 static int cv; //클래스 변수, static 변수 void method(){ int lv=0; //지역 변수 } } 인스턴스 변수 클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어진다. 인스턴스 변수의 값을 읽어 오거나 저장하기 위해서는 먼저.. 개발/Java 2022. 2. 24. 객체와 테이블 매핑, DB 스키마 자동 생성, 필드와 컬럼 매핑 2023. 02.07 11:15 복습 시작 객체와 테이블 매핑 JPA를 사용하는 데 가장 중요한 일은 엔티티와 테이블을 정확히 매핑하는 것. 이에 대해 학습해보자. @Entity @Entity가 붙은 클래스는 JPA가 관리하며 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수이다. @Entity 적용 시 주의해야 할 점이 몇 가지 있다. 기본 생성자는 필수다. 즉, 파라미터가 없는 public or protected 생성자가 필수다. final 클래스, enum, interface, inner 클래스에서는 사용 불가하다. 저장할 필드에 final을 사용할 수 없다. @Entity에는 name이라는 속성도 있다. 이는 엔티티 이름을 지정하는데 name을 설정하지 않는다면 클래.. 개발/JPA 2022. 2. 24. 이전 1 ··· 19 20 21 22 23 24 25 ··· 29 다음 반응형