깨짐 현상

 

1. build tool 설정

gradle(디폴트) -> IntelliJ IDEA로 변경후 저장

 

'인강 > 자바 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

+ Recent posts