Spring Boot를 배우면서 코딩 용어에 대해서 제가 이해하기 쉽도록 정리를 하는 시간을 가져보기로 했습니다.
잘 모르는 건지 아는건지 확실치 않는 내용들이 존재했었기 때문이죠.
계속 수정하면서 추가할 예정입니다.
인스턴스
Spring Boot에서 "인스턴스"라는 용어는 일반적으로 객체 지향 프로그래밍 (OOP) 컨텍스트에서 사용되며, 객체를 생성하고 사용하는 개념을 나타냅니다.객체 지향 프로그래밍에서 "인스턴스"는 클래스의 정의에 따라 생성된 구체적인 객체를 의미합니다. 클래스는 객체의 특성과 동작을 정의한 것이며, 실제로 프로그램에서 사용할 때는 클래스를 기반으로 객체를 생성합니다. 이렇게 생성된 객체를 "인스턴스"라고 부릅니다.
쉽게말하자면, 자동차를 만들고 싶습니다. 개발자는 '클래스'라는 자동차 설계도를 가지고, 자동차를 만듭니다. 이 때 여기서 생성된 자동차가 '인스턴스'입니다. 이러한 인스턴스들은 프로그램에서 실제로 작동하고 데이터를 다루는 역할을 수행합니다.
// 커피를 만들기 위한 커피 설계도 클래스,
public class Coffee {
private String size;
private String type;
private double price;
public Coffee(String size, String type, double price) {
this.size = size;
this.type = type;
this.price = price;
}
public void make() {
System.out.println("Making a " + size + " " + type + " coffee...");
}
public void serve() {
System.out.println("Serving a " + size + " " + type + " coffee. Price: $" + price);
}
}
먼저 위처럼 커피를 만들기 위한 커피 클래스를 만듭니다.
여기엔 make, serve와 같은 동작을 하는 메서드가 존재합니다.
public class CoffeeShop {
public static void main(String[] args) {
// 커피 인스턴스 생성
Coffee smallLatte = new Coffee("Small", "Latte", 3.99);
Coffee mediumCappuccino = new Coffee("Medium", "Cappuccino", 4.49);
// 커피 만들기
smallLatte.make();
mediumCappuccino.make();
// 커피 제공
smallLatte.serve();
mediumCappuccino.serve();
}
}
그리고 main에서 위에서 만든 커피 설계도(클래스)를 통해서 smallLatte, mediumCappuccino라는 커피(인스턴스)를 만듭니다. 각각의 인스턴스는 클래스의 특성을 따르며, make, serve와 같은 메서드를 통해서 만들고 서빙하는 동작을 수행할 수 있습니다.
Entity
Entity란 DB에서 영속적으로 저장된 데이터를 자바 객체로 매핑하여 '인스턴스의 형태'로 존재하는 데이터를 말합니다.
즉, 엔티티(Entity)는 데이터베이스에서 사용하는 개념을 프로그래밍에서 표현하는 방식 중 하나입니다.
예를 들어, 블로그 애플리케이션을 만든다고 가정해봅시다. 이 애플리케이션에서는 블로그 게시물을 저장하고 관리해야 합니다. 이때 각각의 블로그 게시물은 "엔티티"가 될 수 있습니다.
엔티티는 클래스로 표현되며, 해당 클래스에는 데이터베이스에서 저장하고 다루고자 하는 정보가 포함됩니다. 이 정보들을 "속성"이라고 부르며, 클래스 안에 변수로 정의됩니다. 또한, 엔티티의 속성을 조작하거나 활용하는 "동작"도 클래스 안에 메서드로 정의할 수 있습니다.
설계도 작성
import javax.persistence.*;
import java.util.Date;
@Entity
@Table(name = "posts")
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String content;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_at", nullable = false)
private Date createdAt;
// Getter, Setter, 생성자 등...
}
블로그 게시물을 나타내는 Post라는 이름의 엔티티 클래스를 만들어봅니다. 이 클래스에는 게시물의 속성(제목, 내용, 작성일 등)과 동작(게시물 작성)이 정의됩니다.
@Entity 어노테이션은 이 클래스가 JPA 엔티티임을 나타내고, @Table 어노테이션은 데이터베이스 테이블과 매핑됨을 나타냅니다. 해당 엔티티가 데이터베이스에서 "posts"라는 이름의 테이블과 매핑됨을 나타냅니다.즉, Post 엔티티의 인스턴스가 데이터베이스의 "posts" 테이블에 저장되거나 조회될 것임을 의미합니다.
엔티티 인스턴스 생성
import org.springframework.data.repository.CrudRepository;
public interface PostRepository extends CrudRepository<Post, Long> {
}
위에서 정의한 Post 엔티티 클래스를 사용하여 실제 블로그 게시물을 만들어보겠습니다. 실제 데이터베이스에 게시물을 저장하는 과정을 코드로 표현합니다.
PostRepository는 Spring Data JPA의 CrudRepository를 상속받아서, 데이터베이스에 게시물을 저장하고 조회하는 메서드들을 자동으로 가지게 됩니다.
Spring Boot에서 @Entity로 정의한 클래스들은 엔티티로서 데이터베이스와 매핑되며, 해당 클래스의 인스턴스를 생성하여 데이터베이스에 저장하거나 조회할 수 있습니다.
'Backend > Spring Boot' 카테고리의 다른 글
JPA - 양방향관계매핑 (0) | 2023.12.13 |
---|---|
Spring boot - 트랜잭션(Transaction) (0) | 2023.12.07 |
Spring Boot - 연관관계 매핑 (0) | 2023.07.30 |
Spring Boot - MVC 모델 (0) | 2023.07.30 |
Spring Boot - Spring Data JPA 활용 (0) | 2023.07.29 |