본문 바로가기
Backend/이커머스 api

order api - domain(model, product, redis, repository) model(2)

by 큌 2025. 2. 10.
반응형

model(BaseEntity, Product, ProductDto, ProductItem, ProductItemDto)

ProductDto

package com.zerobase.cms.order.domain.model;

import java.util.List;
import java.util.stream.Collectors;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;


@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class ProductDto {
    private Long id;
    private String name;
    private String description;
    private List<ProductItemDto> items;

    public static ProductDto from(Product product) {
        List<ProductItemDto> items = product.getProductItems()
                .stream().map(ProductItemDto::from).collect(Collectors.toList());

        return ProductDto.builder()
                .id(product.getId())
                .name(product.getName())
                .description(product.getDescription())
                .items(items)
                .build();
    }

    public static ProductDto withoutItemsFrom(Product product) {

        return ProductDto.builder()
                .id(product.getId())
                .name(product.getName())
                .description(product.getDescription())
                .build();
    }
}

상품 데이터 전송 객체 (ProductDto)

이 코드는 상품 정보를 담는 데이터 전송 객체 (DTO, Data Transfer Object) 클래스(ProductDto)입니다. DTO는 서비스 간에 데이터를 주고받을 때 사용되며, 데이터베이스의 엔티티와 유사하지만, 영속성을 가지지 않고 단순히 데이터를 담는 역할만 합니다. ProductDto는 상품 ID, 상품 이름, 상품 설명, 상품 아이템 목록 등의 정보를 저장합니다.

1. 클래스 구조 및 어노테이션

  • import java.util.List;: List 인터페이스를 가져옵니다. List는 순서가 있는 데이터 컬렉션을 나타냅니다.
  • import java.util.stream.Collectors;: Collectors 클래스를 가져옵니다. Collectors는 스트림 데이터를 수집하는 데 사용됩니다.
  • import lombok.AllArgsConstructor;: Lombok 라이브러리의 어노테이션으로, 모든 필드를 인수로 받는 생성자를 자동으로 생성해줍니다.
  • import lombok.Builder;: Lombok 라이브러리의 어노테이션으로, 빌더 패턴을 자동으로 생성해줍니다.
  • import lombok.Getter;: Lombok 라이브러리의 어노테이션으로, 모든 필드에 대한 getter 메서드를 자동으로 생성해줍니다.
  • import lombok.NoArgsConstructor;: Lombok 라이브러리의 어노테이션으로, 인수가 없는 기본 생성자를 자동으로 생성해줍니다.
  • import lombok.ToString;: Lombok 라이브러리의 어노테이션으로, toString() 메서드를 자동으로 생성해줍니다.
  • @Getter: Lombok 라이브러리의 어노테이션으로, 모든 필드에 대한 getter 메서드를 자동으로 생성해줍니다. getter 메서드는 객체의 필드 값을 외부에서 읽을 수 있도록 해줍니다.
  • @Builder: Lombok 라이브러리의 어노테이션으로, 빌더 패턴을 자동으로 생성해줍니다. 빌더 패턴은 객체 생성을 더 유연하고 가독성 좋게 만들어줍니다.
  • @NoArgsConstructor: Lombok 라이브러리의 어노테이션으로, 인수가 없는 기본 생성자를 자동으로 생성해줍니다.
  • @AllArgsConstructor: Lombok 라이브러리의 어노테이션으로, 모든 필드를 인수로 받는 생성자를 자동으로 생성해줍니다.
  • @ToString: Lombok 라이브러리의 어노테이션으로, toString() 메서드를 자동으로 생성해줍니다. toString() 메서드는 객체의 필드 값을 문자열로 표현하는 데 사용됩니다.
  • public class ProductDto { ... }: ProductDto 클래스를 정의합니다. public은 이 클래스가 모든 패키지에서 접근 가능하다는 것을 의미합니다.

2. 클래스 필드

  • private Long id;: 상품 ID를 나타내는 속성입니다. private은 이 필드가 ProductDto 클래스 내에서만 접근 가능하다는 것을 의미합니다.
  • private String name;: 상품 이름을 나타내는 속성입니다.
  • private String description;: 상품 설명을 나타내는 속성입니다.
  • private List<ProductItemDto> items;: 상품 아이템 목록을 나타내는 속성입니다. ProductItemDto는 상품 아이템 정보를 담는 또 다른 DTO입니다.

3. 메서드

3.1. from(Product product)

  • 기능: Product 엔티티 객체를 ProductDto 객체로 변환합니다 (상품 아이템 정보 포함).
    1. public static ProductDto from(Product product): from 메서드를 정의합니다.
      • public은 이 메서드가 모든 클래스에서 접근 가능하다는 것을 의미합니다.
      • static은 이 메서드가 클래스 레벨 메서드임을 나타냅니다. 즉, 객체 생성 없이 클래스 이름으로 호출할 수 있습니다.
      • ProductDto는 반환 타입으로, 이 메서드가 ProductDto 클래스의 인스턴스를 반환함을 나타냅니다.
      • Product product는 Product 엔티티 객체를 나타내는 파라미터입니다.
    2. List<ProductItemDto> items = product.getProductItems() ... .collect(Collectors.toList());: 상품 아이템 목록을 ProductItemDto 리스트로 변환합니다.
      • product.getProductItems().stream(): Product 객체에서 상품 아이템 목록을 가져와 스트림으로 변환합니다.
      • .map(ProductItemDto::from): 스트림의 각 요소를 ProductItemDto로 변환합니다. ProductItemDto::from은 ProductItemDto 클래스의 from 메서드를 호출하는 메서드 레퍼런스입니다. 이 메서드는 ProductItem 객체를 ProductItemDto 객체로 변환합니다.
      • .collect(Collectors.toList()): 스트림의 요소들을 List로 수집합니다.
    3. return ProductDto.builder() ... .build();: 빌더 패턴을 사용하여 ProductDto 객체를 생성하고 반환합니다.
      • ProductDto.builder(): ProductDto 클래스의 빌더를 생성합니다.
      • .id(product.getId()): 빌더에 상품 ID를 설정합니다.
      • .name(product.getName()): 빌더에 상품 이름을 설정합니다.
      • .description(product.getDescription()): 빌더에 상품 설명을 설정합니다.
      • .items(items): 빌더에 상품 아이템 리스트를 설정합니다.
      • .build(): 빌더에 설정된 속성들을 사용하여 ProductDto 객체를 생성합니다.

3.2. withoutItemsFrom(Product product)

  • 기능: Product 엔티티 객체를 ProductDto 객체로 변환합니다 (상품 아이템 정보 제외).}`
    1. public static ProductDto withoutItemsFrom(Product product): withoutItemsFrom 메서드를 정의합니다.
      • static은 이 메서드가 클래스 레벨 메서드임을 나타냅니다. 즉, 객체 생성 없이 클래스 이름으로 호출할 수 있습니다.
      • ProductDto는 반환 타입으로, 이 메서드가 ProductDto 클래스의 인스턴스를 반환함을 나타냅니다.
      • Product product는 Product 엔티티 객체를 나타내는 파라미터입니다.
    2. return ProductDto.builder() ... .build();: 빌더 패턴을 사용하여 ProductDto 객체를 생성하고 반환합니다 (상품 아이템 정보 제외).

4. 핵심 개념 및 추가 설명

  • DTO (Data Transfer Object): DTO는 서비스 간에 데이터를 주고받을 때 사용되는 객체입니다. DTO는 데이터베이스의 엔티티와 유사하지만, 영속성을 가지지 않고 단순히 데이터를 담는 역할만 합니다. DTO를 사용하면 엔티티의 모든 속성을 노출하지 않고 필요한 속성만 선택적으로 전송할 수 있으며, 데이터 전송량을 줄일 수 있습니다.
  • 빌더 패턴 (Builder Pattern): 빌더 패턴은 객체 생성을 더 유연하고 가독성 좋게 만들어주는 디자인 패턴입니다. 빌더 패턴을 사용하면 객체 생성 시 필요한 필드만 선택적으로 설정할 수 있습니다.
  • Stream API: Stream API는 Java 8부터 도입된 기능으로, 컬렉션 데이터를 효율적으로 처리하기 위한 기능입니다. stream(), map(), filter(), collect() 등의 메서드를 사용하여 데이터를 변환하고 수집할 수 있습니다.
  • 메서드 레퍼런스 (Method Reference): 메서드 레퍼런스는 람다 표현식을 간결하게 표현하는 방법입니다. 메서드 레퍼런스는 클래스::메서드 또는 객체::메서드 형식으로 작성됩니다.
  • toString() 메서드: toString() 메서드는 객체의 필드 값을 문자열로 표현하는 데 사용됩니다. toString() 메서드를 오버라이드하면 객체의 상태를 디버깅하거나 로깅할 때 유용합니다.

ProductItem

package com.zerobase.cms.order.domain.model;

import com.zerobase.cms.order.domain.product.AddProductItemForm;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.envers.AuditOverride;
import org.hibernate.envers.Audited;

@Entity
@Setter
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@AuditOverride(forClass = BaseEntity.class)
public class ProductItem extends BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private Long sellerId;

    @Audited // 변화가 발생하면 무조건 저장해라.
    private String name;

    @Audited
    private Integer price;
    private Integer count;

    @ManyToOne
    @JoinColumn(name = "product_id")
    private Product product;

    public static ProductItem of(Long sellerId, AddProductItemForm form) {
        return ProductItem.builder()
                .sellerId(sellerId)
                .name(form.getName())
                .price(form.getPrice())
                .count(form.getCount())
                .build();
    }
}

상품 아이템 엔티티 (ProductItem)

이 코드는 상품 아이템 정보를 나타내는 엔티티 클래스(ProductItem)입니다. 엔티티는 데이터베이스 테이블에 매핑되는 Java 객체이며, 각 속성은 테이블의 컬럼에 해당합니다. ProductItem 엔티티는 상품 아이템 ID, 판매자 ID, 상품 아이템 이름, 가격, 수량, 상품 정보 등을 저장합니다.

1. 클래스 구조 및 어노테이션

  • package com.zerobase.cms.order.domain.model;: 이 클래스가 com.zerobase.cms.order.domain.model 패키지에 속해 있음을 나타냅니다. 패키지는 관련 있는 클래스들을 묶어 관리하는 데 사용됩니다.
  • import com.zerobase.cms.order.domain.product.AddProductItemForm;: AddProductItemForm 클래스를 가져옵니다. 이 클래스는 상품 아이템 추가 폼 데이터를 담는 객체입니다.
  • import javax.persistence.Entity;: Entity 어노테이션을 가져옵니다. 이 어노테이션은 해당 클래스가 JPA 엔티티임을 나타냅니다.
  • import javax.persistence.GeneratedValue;: GeneratedValue 어노테이션을 가져옵니다. 이 어노테이션은 기본 키 생성 전략을 지정합니다.
  • import javax.persistence.GenerationType;: GenerationType 열거형을 가져옵니다. GenerationType은 기본 키 생성 전략의 타입을 정의합니다.
  • import javax.persistence.Id;: Id 어노테이션을 가져옵니다. 이 어노테이션은 해당 필드가 엔티티의 기본 키임을 나타냅니다.
  • import javax.persistence.JoinColumn;: JoinColumn 어노테이션을 가져옵니다. 이 어노테이션은 외래 키 컬럼을 지정합니다.
  • import javax.persistence.ManyToOne;: ManyToOne 어노테이션을 가져옵니다. 이 어노테이션은 엔티티 간의 다대일 연관 관계를 지정합니다.
  • import lombok.AllArgsConstructor;: Lombok 라이브러리의 어노테이션으로, 모든 필드를 인수로 받는 생성자를 자동으로 생성해줍니다.
  • import lombok.Builder;: Lombok 라이브러리의 어노테이션으로, 빌더 패턴을 자동으로 생성해줍니다.
  • import lombok.Getter;: Lombok 라이브러리의 어노테이션으로, 모든 필드에 대한 getter 메서드를 자동으로 생성해줍니다.
  • import lombok.NoArgsConstructor;: Lombok 라이브러리의 어노테이션으로, 인수가 없는 기본 생성자를 자동으로 생성해줍니다.
  • import lombok.Setter;: Lombok 라이브러리의 어노테이션으로, 모든 필드에 대한 setter 메서드를 자동으로 생성해줍니다.
  • import org.hibernate.envers.AuditOverride;: AuditOverride 어노테이션을 가져옵니다. 이 어노테이션은 특정 클래스에 대한 감사 정보를 재정의합니다.
  • import org.hibernate.envers.Audited;: Audited 어노테이션을 가져옵니다. 이 어노테이션은 해당 필드 또는 엔티티에 대한 감사 기능을 활성화합니다.
  • @Entity: 이 어노테이션은 해당 클래스가 JPA 엔티티임을 나타냅니다. JPA는 Java Persistence API의 약자로, Java 객체를 데이터베이스 테이블에 매핑하는 기술입니다.
  • @Setter: Lombok 라이브러리의 어노테이션으로, 모든 필드에 대한 setter 메서드를 자동으로 생성해줍니다. setter 메서드는 객체의 필드 값을 외부에서 설정할 수 있도록 해줍니다.
  • @Getter: Lombok 라이브러리의 어노테이션으로, 모든 필드에 대한 getter 메서드를 자동으로 생성해줍니다. getter 메서드는 객체의 필드 값을 외부에서 읽을 수 있도록 해줍니다.
  • @Builder: Lombok 라이브러리의 어노테이션으로, 빌더 패턴을 자동으로 생성해줍니다. 빌더 패턴은 객체 생성을 더 유연하고 가독성 좋게 만들어줍니다.
  • @NoArgsConstructor: Lombok 라이브러리의 어노테이션으로, 인수가 없는 기본 생성자를 자동으로 생성해줍니다. JPA는 엔티티에 기본 생성자가 필요합니다.
  • @AllArgsConstructor: Lombok 라이브러리의 어노테이션으로, 모든 필드를 인수로 받는 생성자를 자동으로 생성해줍니다.
  • @AuditOverride(forClass = BaseEntity.class): Hibernate Envers 라이브러리의 어노테이션으로, BaseEntity 클래스에 대한 감사 정보를 재정의합니다. 이 어노테이션을 사용하면 BaseEntity 클래스의 속성 (createdAt, modifiedAt 등)에 대한 감사 정보를 별도로 설정할 수 있습니다.
  • public class ProductItem extends BaseEntity { ... }: ProductItem 클래스를 정의합니다. public은 이 클래스가 모든 패키지에서 접근 가능하다는 것을 의미합니다. extends BaseEntity는 ProductItem 클래스가 BaseEntity 클래스를 상속받음을 나타냅니다. 상속을 통해 ProductItem 클래스는 BaseEntity 클래스의 속성 (createdAt, modifiedAt 등)을 자동으로 갖게 됩니다.

2. 클래스 필드

  • @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
    : 상품 아이템 ID를 나타내는 속성입니다.
    • @Id: 이 어노테이션은 해당 필드가 엔티티의 기본 키임을 나타냅니다. 기본 키는 테이블에서 각 로우를 고유하게 식별하는 데 사용되는 컬럼입니다.
    • @GeneratedValue(strategy = GenerationType.IDENTITY): 이 어노테이션은 기본 키 생성 전략을 지정합니다. GenerationType.IDENTITY는 데이터베이스의 자동 증가 기능을 사용하여 기본 키를 생성함을 나타냅니다.
    • private Long id;: Long 타입의 id 필드를 정의합니다. Long은 long 타입의 래퍼 클래스이며, null 값을 가질 수 있습니다. private은 이 필드가 ProductItem 클래스 내에서만 접근 가능하다는 것을 의미합니다.
  • private Long sellerId;: 판매자 ID를 나타내는 속성입니다.
  • @Audited private String name;: 상품 아이템 이름을 나타내는 속성입니다.
    • @Audited: Hibernate Envers 라이브러리의 어노테이션으로, 해당 필드의 변경 이력을 감사하도록 지정합니다.
    • private String name;: String 타입의 name 필드를 정의합니다.
  • @Audited private Integer price;: 상품 아이템 가격을 나타내는 속성입니다.
    • @Audited: Hibernate Envers 라이브러리의 어노테이션으로, 해당 필드의 변경 이력을 감사하도록 지정합니다.
    • private Integer price;: Integer 타입의 price 필드를 정의합니다. Integer는 int 타입의 래퍼 클래스이며, null 값을 가질 수 있습니다.
  • private Integer count;: 상품 아이템 수량을 나타내는 속성입니다.
  • @ManyToOne @JoinColumn(name = "product_id") private Product product;: 상품 정보를 나타내는 속성입니다.
    • @ManyToOne: 이 어노테이션은 엔티티 간의 다대일 연관 관계를 지정합니다. 여러 개의 ProductItem 엔티티가 하나의 Product 엔티티와 연관될 수 있습니다.
    • @JoinColumn(name = "product_id"): 이 어노테이션은 외래 키 컬럼을 지정합니다. name = "product_id"는 ProductItem 테이블의 product_id 컬럼이 Product 테이블의 id 컬럼을 참조하는 외래 키임을 나타냅니다.
    • private Product product;: Product 타입의 product 필드를 정의합니다. Product는 상품 정보를 나타내는 엔티티 클래스입니다.

3. 메서드

3.1. of(Long sellerId, AddProductItemForm form)

  • 기능: AddProductItemForm 객체를 사용하여 ProductItem 객체를 생성합니다.
    1. public static ProductItem of(Long sellerId, AddProductItemForm form): of 메서드를 정의합니다.
      • public은 이 메서드가 모든 클래스에서 접근 가능하다는 것을 의미합니다.
      • static은 이 메서드가 클래스 레벨 메서드임을 나타냅니다. 즉, 객체 생성 없이 클래스 이름으로 호출할 수 있습니다.
      • ProductItem는 반환 타입으로, 이 메서드가 ProductItem 클래스의 인스턴스를 반환함을 나타냅니다.
      • Long sellerId는 판매자 ID를 나타내는 파라미터입니다.
      • AddProductItemForm form은 상품 아이템 추가 폼 데이터를 담는 객체를 나타내는 파라미터입니다.
    2. return ProductItem.builder() ... .build();: 빌더 패턴을 사용하여 ProductItem 객체를 생성하고 반환합니다.

ProductItemDto

package com.zerobase.cms.order.domain.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;


@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class ProductItemDto {
    private Long id;
    private String name;
    private Integer price;
    private Integer count;

    public static ProductItemDto from(ProductItem item) {
        return ProductItemDto.builder()
                .id(item.getId())
                .name(item.getName())
                .price(item.getPrice())
                .count(item.getCount())
                .build();
    }
}

상품 아이템 데이터 전송 객체 (ProductItemDto)

이 코드는 상품 아이템 정보를 담는 데이터 전송 객체 (DTO, Data Transfer Object) 클래스(ProductItemDto)입니다. DTO는 서비스 간에 데이터를 주고받을 때 사용되며, 데이터베이스의 엔티티와 유사하지만, 영속성을 가지지 않고 단순히 데이터를 담는 역할만 합니다. ProductItemDto는 상품 아이템 ID, 상품 아이템 이름, 가격, 수량 등의 정보를 저장합니다.

1. 클래스 구조 및 어노테이션

  • import lombok.AllArgsConstructor;: Lombok 라이브러리의 어노테이션으로, 모든 필드를 인수로 받는 생성자를 자동으로 생성해줍니다.
  • import lombok.Builder;: Lombok 라이브러리의 어노테이션으로, 빌더 패턴을 자동으로 생성해줍니다.
  • import lombok.Getter;: Lombok 라이브러리의 어노테이션으로, 모든 필드에 대한 getter 메서드를 자동으로 생성해줍니다.
  • import lombok.NoArgsConstructor;: Lombok 라이브러리의 어노테이션으로, 인수가 없는 기본 생성자를 자동으로 생성해줍니다.
  • import lombok.ToString;: Lombok 라이브러리의 어노테이션으로, toString() 메서드를 자동으로 생성해줍니다.
  • @Getter: Lombok 라이브러리의 어노테이션으로, 모든 필드에 대한 getter 메서드를 자동으로 생성해줍니다. getter 메서드는 객체의 필드 값을 외부에서 읽을 수 있도록 해줍니다.
  • @Builder: Lombok 라이브러리의 어노테이션으로, 빌더 패턴을 자동으로 생성해줍니다. 빌더 패턴은 객체 생성을 더 유연하고 가독성 좋게 만들어줍니다.
  • @NoArgsConstructor: Lombok 라이브러리의 어노테이션으로, 인수가 없는 기본 생성자를 자동으로 생성해줍니다.
  • @AllArgsConstructor: Lombok 라이브러리의 어노테이션으로, 모든 필드를 인수로 받는 생성자를 자동으로 생성해줍니다.
  • @ToString: Lombok 라이브러리의 어노테이션으로, toString() 메서드를 자동으로 생성해줍니다. toString() 메서드는 객체의 필드 값을 문자열로 표현하는 데 사용됩니다.
  • public class ProductItemDto { ... }: ProductItemDto 클래스를 정의합니다. public은 이 클래스가 모든 패키지에서 접근 가능하다는 것을 의미합니다.

2. 클래스 필드

  • private Long id;: 상품 아이템 ID를 나타내는 속성입니다. private은 이 필드가 ProductItemDto 클래스 내에서만 접근 가능하다는 것을 의미합니다.
  • private String name;: 상품 아이템 이름을 나타내는 속성입니다.
  • private Integer price;: 상품 아이템 가격을 나타내는 속성입니다. Integer는 int 타입의 래퍼 클래스이며, null 값을 가질 수 있습니다.
  • private Integer count;: 상품 아이템 수량을 나타내는 속성입니다.

3. 메서드

3.1. from(ProductItem item)

  • 기능: ProductItem 엔티티 객체를 ProductItemDto 객체로 변환합니다.
    1. public static ProductItemDto from(ProductItem item): from 메서드를 정의합니다.
      • public은 이 메서드가 모든 클래스에서 접근 가능하다는 것을 의미합니다.
      • static은 이 메서드가 클래스 레벨 메서드임을 나타냅니다. 즉, 객체 생성 없이 클래스 이름으로 호출할 수 있습니다.
      • ProductItemDto는 반환 타입으로, 이 메서드가 ProductItemDto 클래스의 인스턴스를 반환함을 나타냅니다.
      • ProductItem item은 ProductItem 엔티티 객체를 나타내는 파라미터입니다.
    2. return ProductItemDto.builder() ... .build();: 빌더 패턴을 사용하여 ProductItemDto 객체를 생성하고 반환합니다.
      • ProductItemDto.builder(): ProductItemDto 클래스의 빌더를 생성합니다.
      • .id(item.getId()): 빌더에 상품 아이템 ID를 설정합니다.
      • .name(item.getName()): 빌더에 상품 아이템 이름을 설정합니다.
      • .price(item.getPrice()): 빌더에 상품 아이템 가격을 설정합니다.
      • .count(item.getCount()): 빌더에 상품 아이템 수량을 설정합니다.
      • .build(): 빌더에 설정된 속성들을 사용하여 ProductItemDto 객체를 생성합니다.

4. 핵심 개념 및 추가 설명

  • DTO (Data Transfer Object): DTO는 서비스 간에 데이터를 주고받을 때 사용되는 객체입니다. DTO는 데이터베이스의 엔티티와 유사하지만, 영속성을 가지지 않고 단순히 데이터를 담는 역할만 합니다. DTO를 사용하면 엔티티의 모든 속성을 노출하지 않고 필요한 속성만 선택적으로 전송할 수 있으며, 데이터 전송량을 줄일 수 있습니다.
  • 빌더 패턴 (Builder Pattern): 빌더 패턴은 객체 생성을 더 유연하고 가독성 좋게 만들어주는 디자인 패턴입니다. 빌더 패턴을 사용하면 객체 생성 시 필요한 필드만 선택적으로 설정할 수 있습니다.
  • toString() 메서드: toString() 메서드는 객체의 필드 값을 문자열로 표현하는 데 사용됩니다. toString() 메서드를 오버라이드하면 객체의 상태를 디버깅하거나 로깅할 때 유용합니다.
반응형