'인강 > 자바 ORM 표준 JPA 프로그래밍 - 기본편' 카테고리의 다른 글

연관관계 매핑  (0) 2024.09.10
엔티티 매핑  (0) 2024.09.09

중요!!

1. 연관관계의 주인은 외래 키의 위치를 기준으로 정해야함

2. 단방향 매핑 설계를 목표로 하고 필요할 때 양방향 매핑을 추가한다.

 

 

 

방향(Direction) : 단방향, 양방향

다중성(Multiplicity) : 다대일, 일대다, 일대일

연관관계의 주인(Owner) : 객체 양뱡향 연관관계는 관리 주인이 필요

 

객체를 테이블에 맞추어 모델링

@Entity
 public class Member { 
     @Id @GeneratedValue
     private Long id;
     
     @Column(name = "USERNAME")
     private String name;
     
     @Column(name = "TEAM_ID") // 참조 대신에 외래 키를 그대로 사용
     private Long teamId; 
 } 
 
 @Entity
 public class Team {
     @Id @GeneratedValue
     private Long id;
     
     private String name; 

 }

객체 지향 모델링

@Entity
 public class Member { 
     @Id @GeneratedValue
     private Long id;
     
     @Column(name = "USERNAME")
     private String name;
     
     @ManyToOne
     @JoinColumn(name = "TEAM_ID") // 객체의 참조와 테이블의 외래 키를 매핑
     private Team team;
 } 
 
 @Entity
 public class Team {
     @Id @GeneratedValue
     private Long id;
     
     private String name; 

 }

 

객체를 테이블에 맞추어 모델링 vs 객체 지향 모델링

 

1. 멤버가 소속해있는 팀을 찾을때

// 객체를 테이블에 맞추어 모델링

// 멤버 조회
Member findMember = em.find(Member.class, member.getId());

// 해당 멤버 팀 id값 저장
Long findTeamId = findMember.getTeamId();

// 팀 조회(위에 저장한 팀 id값을 이용)
Team findTeam = em.find(Team.class, team.getId());




// 객체 지향 모델링

// 멤버 조회
Member findMember = em.find(Member.class, member.getId()); 

//참조를 사용해서 연관관계 조회
Team findTeam = findMember.getTeam();

 

'인강 > 자바 ORM 표준 JPA 프로그래밍 - 기본편' 카테고리의 다른 글

다양한 연관관계 매핑  (0) 2024.10.28
엔티티 매핑  (0) 2024.09.09

@Column

속성 설명 기본값
name 필드와 매핑할 테이블의 컬럼 이름 객체의 필드 이름
insertable
updatable
등록, 변경 가능 여부 설정 true
nullable null값 허용 여부 설정
false -> not null 제약조건 붙음
 
unique 해당 컬럼의 유니크 제약조건
이름이 랜덤하게 들어가서 사용 잘 안함
 
length 문자 길이 제약조건, String 타입에서만 사용 255

 

'인강 > 자바 ORM 표준 JPA 프로그래밍 - 기본편' 카테고리의 다른 글

다양한 연관관계 매핑  (0) 2024.10.28
연관관계 매핑  (0) 2024.09.10

- 클래스 내부 멤버변수에서 사용할 데이터 타입을 외부에서 지정하는 기법이다.
- 제네릭의 타입 인자로 기본형(int, double)은 사용할 수 없다.
- 제네릭은 extends 키워드를 붙여서 타입 매개변수를 제한하고 원하는 타입과 하위 타입들만 받도록 설정할 수 있다.
- 제네릭 메서드를 정의할 때는 메서드의 반환 타입 왼쪽에 <T>와 같이 타입 매개변수를 적어준다.
- 명확한 반환 타입이 필요할때는 제네릭 메서드 반환 타입이 없을때는 와일드카드를 사용하는게 좋다.

 

클래스 수준의 제네릭 타입 파라미터를 사용하는 메서드 vs 메서드 수준의 제네릭 타입 파라미터를 사용하는 제네릭 메서드

package genericTest;

public class Main2 {

    public static void main(String[] args) {
        GenericBox2<Integer> genericBox2 = new GenericBox2<>();

        // 클래스 수준의 제네릭 타입 파라미터를 사용하는 메서드
        genericBox2.genericTypeMethod(123); // value = 123
        //genericBox2.genericTypeMethod("123"); // !! 에러발생 !! GenericBox2객체에 Integer를 할당했기 때문에 

        // 메서드 수준의 제네릭 타입 파라미터를 사용하는 제네릭 메서드
        genericBox2.genericMethod2("kim"); // value = kim
        genericBox2.genericMethod2(123); // value = 123
        genericBox2.genericMethod2(true); // value = true
    }
}
package genericTest;

public class GenericBox2 <T>{

    public T genericTypeMethod (T value) {
        System.out.println("value = " + value);
        return value;
    }
    public <Z> Z genericMethod2 (Z value) {
        System.out.println("value = " + value);
        return value;
    }
}

 

제네릭 클래스 타입 제한 사용법

public class Generic<T extends parent> {

}

 

제네릭 메서드 사용법

public <T> T instanceMethod1 (T value) {                       
        System.out.println("value = " + value);
        return value;
}

public <S extends Number> S instanceMethod2 (S value) {         
	System.out.println("value = " + value);
	return value;
}

static <T> T genericStaticMethod1 (T value) {                 
	System.out.println("value = " + value);
	return value;
}

 

와일드카드를 사용한 메서드

public void wildCard (Box<?> value) {
	System.out.println("value.getValue() = " + value.getValue());
}

public void wildCard2 (Box<? extends Animal> value) {
	System.out.println("value.getValue() = " + value.getValue());
}

- 아래의 코드가 실행되도록 수정하세요.

 

1. Dog, Cat 클래스 추가
2. AnimalMethod 클래스에서 checkUp, bigger 제네릭 메서드 추가
3. checkUp메서드 body에 System.out.println(매개변수); 추가
4. bigger 메서드 호출시 size값이 더 큰 객체 출력

 

// (출력예시)

// checkUp 메서드 호출시
// Dog{name='강아지', size=200}
// Cat{name='고양이', size=100}

// bigger 메서드 호출후 result값 출력시
// result = Dog{name='강아지', size=200}

 

package genericMethod.quiz;

public class Main {

    public static void main(String[] args) {

        Dog dog = new Dog("강아지", 200);
        Cat cat = new Cat("고양이", 100);

        AnimalMethod.checkUp(dog);
        AnimalMethod.checkUp(cat);


        Animal result = AnimalMethod.bigger(dog, cat);
        System.out.println("result = " + result);
    }
}

'자바 문제 > 실습' 카테고리의 다른 글

제네릭 실습 문제  (0) 2024.07.30
다형성 실습 문제  (0) 2024.07.24
상속 실습 문제  (0) 2024.07.22
static 2  (0) 2024.07.17
static 1  (0) 2024.07.15

다음중 옳지 않은 것은?

package genericMethod;

public class GenericMethod<S> {

    public <T> T instanceMethod1 (T value) {                        // 1
        System.out.println("value = " + value);
        return value;
    }

    public <S extends Number> S instanceMethod2 (S value) {         // 2
        System.out.println("value = " + value);
        return value;
    }

    static <T> T genericStaticMethod1 (T value) {                   // 3
        System.out.println("value = " + value);
        return value;
    }

    S instanceMethod3 (S value) {                                   // 4
        System.out.println("value = " + value);
        return value;
    }

    static S genericStaticMethod2 (S value) {                       // 5
        System.out.println("value = " + value);
        return value;
    }
}

 

5

 

다음중 틀린것을 찾으세요.
1. 클래스 내부 멤버변수에서 사용할 데이터 타입을 외부에서 지정하는 기법이다.
2. 제네릭의 타입 인자로 기본형(int, double)은 사용할 수 없다.
3. 제네릭은 extends 키워드를 붙여서 타입 매개변수를 제한하고 원하는 타입과 하위 타입들만 받도록 설정할 수 있다.
4. 복수 타입 파라미터를 지정할 수 없다.

4

'자바 문제 > 이론' 카테고리의 다른 글

추상클래스 이론 문제  (0) 2024.07.24
instanceof 이론 문제  (0) 2024.07.23
상속 이론 문제  (0) 2024.07.17
static  (0) 2024.07.15
접근제어자  (0) 2024.07.11

1. 아래의 코드가 실행되도록 수정하세요.

  - Dog, Cat, Animal(부모) 클래스 추가
  - animalBox 제네릭 클래스 추가
  - animalBox.setValue(객체) 호출후 animalBox.getValue() 출력시 아래 출력예시와 같이 나오도록 코드 수정

 

// (출력예시)

// animalBox.getValue() = Animal{name='고양이', age=12}
// animalBox.getValue() = Animal{name='강아지', age=13}

 

package generic.quiz;

public class Main {
    public static void main(String[] args) {
        
        Animal animal = new Animal("동물", 0);
        Cat cat = new Cat("고양이", 12);
        Dog dog = new Dog("강아지", 13);


        AnimalBox<Animal> animalBox = new AnimalBox<>();
        animalBox.setValue(cat);
        System.out.println("animalBox.getValue() = " + animalBox.getValue()); // animalBox.getValue() = Animal{name='고양이', age=12}
        animalBox.setValue(dog);
        System.out.println("animalBox.getValue() = " + animalBox.getValue()); // animalBox.getValue() = Animal{name='강아지', age=13}
    }
}

'자바 문제 > 실습' 카테고리의 다른 글

제네릭 메서드 실습 문제  (0) 2024.07.31
다형성 실습 문제  (0) 2024.07.24
상속 실습 문제  (0) 2024.07.22
static 2  (0) 2024.07.17
static 1  (0) 2024.07.15

1. useNoticeBoard, useuseNoticeBoard, useInformationBoard 메서드와 같이 중복되는 코드를 useBoard메서드를 구현하여 중복 제거
2. 게임 게시판(gameBoard) 클래스 추가

(출력예시)

공지사항 게시판 사용
공지사항 게시판의 글이 정상적으로 추가 되었습니다.

자유 게시판 사용
자유 게시판의 글이 정상적으로 추가 되었습니다.

정보 게시판 사용
자유 게시판의 글이 정상적으로 추가 되었습니다.

게임 게시판 사용
게임 게시판의 글이 정상적으로 추가 되었습니다.
package abstract1.quiz;

public class Main {
    public static void main(String[] args) {
        NoticeBoard noticeBoard = new NoticeBoard();
        FreeBoard freeBoard = new FreeBoard();
        InformationBoard informationBoard = new InformationBoard();

        useNoticeBoard(noticeBoard);
        useuseNoticeBoard(freeBoard);
        useInformationBoard(informationBoard);


        // TODO 한개의 메서드를 통해 동작 처리
//        useBoard(noticeBoard);
//        useBoard(freeBoard);
//        useBoard(informationBoard);
//        useBoard(gameBoard);
    }
    public static void useNoticeBoard (NoticeBoard noticeBoard) {
        System.out.println("공지사항 게시판 사용");
        noticeBoard.createBoard();
        System.out.println("");
    }

    public static void useuseNoticeBoard (FreeBoard freeBoard) {
        System.out.println("자유 게시판 사용");
        freeBoard.createBoard();
        System.out.println("");
    }

    public static void useInformationBoard (InformationBoard informationBoard) {
        System.out.println("정보 게시판 사용");
        informationBoard.createBoard();
        System.out.println("");
    }

    //TODO 출력예시와 같이 나오도록 아래 메서드 구현(다형적 참조 사용)
    public static void useBoard (Board board) {
        board.createBoard();
    }
}
package abstract1.quiz;

public class Board {
    public void createBoard () {
        System.out.println("");
    }
}
package abstract1.quiz;

public class FreeBoard{
    public void createBoard () {
        System.out.println("글이 정상적으로 작성되었습니다.");
    }
}
package abstract1.quiz;

public class InformationBoard{
    public void createBoard () {
        System.out.println("글이 정상적으로 작성되었습니다.");
    }
}
package abstract1.quiz;

public class NoticeBoard{
    public void createBoard () {
        System.out.println("글이 정상적으로 작성되었습니다.");
    }
}

 

'자바 문제 > 실습' 카테고리의 다른 글

제네릭 메서드 실습 문제  (0) 2024.07.31
제네릭 실습 문제  (0) 2024.07.30
상속 실습 문제  (0) 2024.07.22
static 2  (0) 2024.07.17
static 1  (0) 2024.07.15

+ Recent posts