728x90

 

객체 참조는 객체 지향 프로그래밍에서 한 객체가 다른 객체를 참조하거나 사용하는 것을 의미합니다. 객체 참조를 사용하면 객체 간의 관계를 형성하고 데이터 및 기능을 공유할 수 있습니다. 아래 예제를 통해 객체 참조를 사용하는 방법을 살펴보겠습니다.

 

가정: 주문(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(); // 주문을 한 회원 정보를 가져옴

 

단방향 연관 관계는 한쪽 객체에서만 관련된 객체를 참조하므로 객체 간의 의존성을 관리하기 용이하고 간단한 구조를 갖게 됩니다.

728x90
반응형

+ Recent posts