객체 참조는 객체 지향 프로그래밍에서 한 객체가 다른 객체를 참조하거나 사용하는 것을 의미합니다. 객체 참조를 사용하면 객체 간의 관계를 형성하고 데이터 및 기능을 공유할 수 있습니다. 아래 예제를 통해 객체 참조를 사용하는 방법을 살펴보겠습니다.
가정: 주문(Order) 객체가 상품(Product) 객체를 참조한다고 가정해봅시다.
public class Order {
private Long orderId;
private List<Product> products; // 상품 목록을 참조하는 필드
// 생성자, 메서드 등
public void addProduct(Product product) {
products.add(product);
}
public List<Product> getProducts() {
return products;
}
}
public class Product {
private Long productId;
private String name;
private int price;
// 생성자, 메서드 등
public String getName() {
return name;
}
public int getPrice() {
return price;
}
}
위 코드에서 Order 클래스는 Product 클래스를 참조하고 있습니다. products 필드는 주문 객체가 여러 상품을 참조할 수 있게 합니다. addProduct 메서드를 사용하여 상품을 주문에 추가하고, getProducts 메서드를 사용하여 주문에 포함된 상품 목록을 가져올 수 있습니다.
이제 객체 참조를 활용해 위의 클래스들을 사용하는 예제를 살펴보겠습니다
public class Main {
public static void main(String[] args) {
Product product1 = new Product(1L, "사과", 1000);
Product product2 = new Product(2L, "바나나", 1500);
Order order = new Order(1L);
order.addProduct(product1);
order.addProduct(product2);
List<Product> productsInOrder = order.getProducts();
for (Product product : productsInOrder) {
System.out.println("상품명: " + product.getName() + ", 가격: " + product.getPrice());
}
}
}
====== 출력 =====
상품명: 사과, 가격: 1000
상품명: 바나나, 가격: 1500
위 예제에서 Order 객체가 Product 객체를 참조하여 상품 목록을 유지하고 출력하는 것을 볼 수 있습니다. 이처럼 객체 참조를 사용하면 객체 간의 관계를 표현하고 상호 작용을 구현할 수 있습니다.
@OneToMany / @ManyToOne 예제
@OneToMany는 JPA(Java Persistence API)에서 사용되는 어노테이션으로, 엔티티 간의 일대다(1:N) 관계를 매핑하기 위해 사용됩니다.
이 관계는 한 엔티티가 다른 엔티티 여러 개와 관계를 가지는 것을 의미합니다. 예를 들어, 한 회원(Member)이 여러 개의 주문(Order)을 가지는 경우가 일대다 관계입니다.
아래는 @OneToMany 어노테이션을 사용하여 일대다 관계를 매핑하는 예제입니다
@Entity
public class Member {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "member") // 회원과의 관계를 매핑하기 위한 필드를 지정
private List<Order> orders = new ArrayList<>();
// 생성자, 메서드 등
// Getter, Setter
}
@Entity
public class Order {
@Id
@GeneratedValue
private Long id;
private LocalDateTime orderDate;
@ManyToOne // 다대일 관계 매핑
@JoinColumn(name = "member_id") // 외래키를 가지는 컬럼 이름
private Member member; // 주문을 한 회원
// 생성자, 메서드 등
// Getter, Setter
}
위 코드에서 Member 엔티티는 orders 필드를 통해 여러 개의 주문(Order)을 가질 수 있습니다. @OneToMany 어노테이션을 사용하여 회원과 주문 간의 관계를 설정합니다. mappedBy 속성은 일대다 관계에서 다 쪽(여기서는 주문)이 관계의 주인임을 나타내며, 매핑을 위한 필드명을 지정합니다.
Order 엔티티는 다대일(@ManyToOne) 관계로 회원과의 관계를 매핑하고, @JoinColumn 어노테이션을 통해 외래 키 컬럼의 이름을 지정합니다.
이렇게 설정하면 Member 엔티티에서 해당 회원과 관련된 주문 목록을 조회할 수 있습니다. 이는 한 회원이 여러 개의 주문을 가지는 일대다 관계를 나타내는 예제입니다.
다음은 JPA에서 단방향 연관 관계를 구현하는 예제입니다. 주문(Order) 객체와 회원(Member) 객체 간의 단방향 연관 관계를 가정합니다.
@Entity
public class Order {
@Id
@GeneratedValue
private Long id;
@ManyToOne
@JoinColumn(name = "member_id") // 외래키를 가지는 컬럼 이름
private Member member; // 주문을 한 회원
// ...
}
@Entity
public class Member {
@Id
@GeneratedValue
private Long id;
// 회원 정보
// ...
}
위 예제에서 @ManyToOne 어노테이션은 다대일 단방향 연관 관계를 표현하며, @JoinColumn 어노테이션을 통해 외래키(Foreign Key) 컬럼의 이름을 지정합니다. 이렇게 설정하면 주문(Order) 객체가 회원(Member) 객체를 참조할 수 있게 됩니다. 회원 객체는 주문을 참조하지 않으므로 이것이 단방향 연관 관계입니다.
이런 단방향 연관 관계를 사용하면 주문 객체에서 주문한 회원 정보를 조회할 수 있습니다.
Order order = entityManager.find(Order.class, orderId);
Member member = order.getMember(); // 주문을 한 회원 정보를 가져옴
단방향 연관 관계는 한쪽 객체에서만 관련된 객체를 참조하므로 객체 간의 의존성을 관리하기 용이하고 간단한 구조를 갖게 됩니다.
'[ BACKEND] > Spring' 카테고리의 다른 글
[SPRING] 고급 매핑 - 구현 클래스 , 조인 전략 (0) | 2023.08.16 |
---|---|
[SPRING] 연관관계 고급 매핑 (0) | 2023.08.15 |
[SPRING] 다양한 연관관계의 종류 (0) | 2023.08.11 |
[SPRING] 양방향 연관관계 (0) | 2023.08.09 |
[SPRING] 연관 관계 매핑 (단방향) (0) | 2023.08.08 |