스프링부트 공부노트 (5)
본문 바로가기

컴퓨터공부/Springboot

스프링부트 공부노트 (5)

by Life & study 2023. 8. 15.
반응형

스프링부트 공부노트 (5)

 

 

[백엔드 개발자의 스프링부트 공부노트] 연산자

 

연산자기능사용법사용 설명

> 보다 크다 op1 > op2 op1이 op2보다 큰 경우 true, 아니면 false
>= 보다 크거나 작다 op1 >= op2 op1이 op2보다 크거나 같은 경우 true, 아니면 false
< 보다 작다 op1 < op2 op1이 op2보다 작은 경우 true, 아니면 false
<= 보다 작거나 같다 op1 && op2 op1이 op2보다 작거나 같은 경우 true, 아니면 false
== 같다 op1 II op2 op1과 op2가 같은 경우 true, 아니면 false
!= 같지 않다 !op op1과 op2가 같지 않은 경우 true, 아니면 false
instanceof 인스턴스가 같다 op1 instanceof op2 op1이 op2의 인스턴스(객체)인 경우 true, 아니면 false

 

 

[백엔드 개발자의 스프링부트 공부노트]     developmentOnly 'org.springframework.boot:spring-boot-devtools'

 

xml
<dependencies>
    ...
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
</dependencies>

그레이들(build.gradle)을 사용하는 프로젝트의 경우, 다음과 같이 프로젝트의 스프링 부트 버전을 찾을 수 있습니다:

groovy
plugins {
    id 'org.springframework.boot' version '2.5.5'
}

그레이들 프로젝트에서 spring-boot-devtools를 추가할 때는 아래와 같이 작성해 주세요:

groovy
dependencies {
    ...
    developmentOnly ("org.springframework.boot:spring-boot-devtools")
}

spring-boot-devtools는 추가적인 설정 없이도 프로젝트의 다양한 개발 기능들을 자동으로 적용해주기 때문에 프로젝트에 적용하기만 하면 개발 환경이 향상됩니다.

 

[백엔드 개발자의 스프링부트 공부노트] <> 기호는 제네릭(Generic)


제네릭 기능은 자바에서 타입 안정성을 지키면서 재사용 가능한 코드를 작성할 수 있도록 도와주는 기능입니다. 예를 들어 여기서 List<Answer>는 Answer 객체를 요소로 가지는 리스트를 의미합니다. 리스트에 저장되는 요소와 관련된 코드를 작성할 때, 실수로 다른 타입의 객체를 추가하거나 가져오려는 시도를 컴파일 시점에서 방지할 수 있습니다. 

이 경우, private List<Answer> answerList는 Answer 타입의 객체들만 요소로 가질 수 있는 리스트로 선언되어 있습니다.

 이로 인해 answerList 내부에 다른 타입의 객체가 추가되는 것을 컴파일 시점에 자바가 제한합니다. 이 기능을 사용함으로써 프로그래머가 개발 과정에서 발생할 수 있는 오류를 예방하거나 빨리 발견할 수 있습니다.

 

 

// Main 클래스를 정의합니다.
public class Main {

    // 프로그램의 시작점인 main 메서드를 정의합니다.
    public static void main(String[] args) {

        // Integer를 저장할 수 있는 Box 객체를 생성합니다.
        Box<Integer> integerBox = new Box<Integer>();

        // String을 저장할 수 있는 Box 객체를 생성합니다.
        Box<String> stringBox = new Box<String>();

        // integerBox에 Integer 객체를 추가합니다. 값은 10입니다.
        integerBox.add(new Integer(10));

        // stringBox에 String 객체를 추가합니다. 값은 "Hello World"입니다.
        stringBox.add(new String("Hello World"));

        // integerBox에서 get 메서드를 호출하여 값을 가져옵니다. 그리고 결과를 출력합니다.
        System.out.printf("Integer Value :%d\n\n", integerBox.get());

        // stringBox에서 get 메서드를 호출하여 값을 가져옵니다. 그리고 결과를 출력합니다.
        System.out.printf("String Value :%s\n", stringBox.get());
    }

    // 제네릭 타입 T를 사용하는 Box 클래스를 정의합니다.
    public static class Box<T> {
        // T 타입의 객체를 참조하는 private 필드 t를 선언합니다.
        private T t;

        // T 타입의 객체를 Box에 추가하는 메서드를 정의합니다.
        public void add(T t) {
            // 매개변수로 전달된 T 타입의 객체를 필드 t에 저장합니다.
            this.t = t;
        }

        // Box에 저장된 T 타입의 객체를 반환하는 메서드를 정의합니다.
        public T get() {
            // 현재 Box에 저장된 객체를 반환합니다.
            return t;
        }
    }
}

 

 

[백엔드 개발자의 스프링부트 공부노트]  postgres-# \dt 목록 확인하기

Server [localhost]:
Database [postgres]:
Port [5432]:
Username [postgres]:
postgres 사용자의 암호:
psql (11.19)
도움말을 보려면 "help"를 입력하십시오.

postgres-# \dt
          릴레이션(relation) 목록
 스키마 |     이름      |  종류  |  소유주
--------+---------------+--------+----------
 public | board         | 테이블 | postgres
 public | crime_reports | 테이블 | postgres
 public | departments   | 테이블 | postgres
 public | district_2020 | 테이블 | postgres
 public | district_2035 | 테이블 | postgres
 public | employees     | 테이블 | postgres
 public | store_center  | 테이블 | postgres
(7개 행)

 

 

[백엔드 개발자의 스프링부트 공부노트] 

 

 

    // createDate는 LocalDateTime 타입으로 설정
    private LocalDateTime createDate;

 

 

   @Column(length = 200)
    // 컬럼의 길이를 200으로 설정
    private String subject;

 

  @Column(columnDefinition = "TEXT")
    // 컬럼의 데이터 타입을 TEXT로 설정
    private String content;

 

 

 

[백엔드 개발자의 스프링부트 공부노트] 

패키지  javax.persistence

주석 유형 OneToMany

 

 

 @OneToMany(mappedBy = "question", cascade = CascadeType.REMOVE)
    // 일대다 관계 설정 (하나의 Question이 여러 Answer를 가짐)
    // question 필드를 기준으로 관계를 설정하고, Question 엔티티가 삭제되면 관련 Answer도 삭제됨

 

  • @대상({메소드,필드})
    @보유(런타임)
    공개 @인터페이스 OneToMany
     
  •  
  • 일대다 다중성을 갖는 다값 연결을 지정합니다.

    컬렉션이 요소 유형을 지정하기 위해 제네릭을 사용하여 정의된 경우 연결된 대상 엔터티 유형을 지정할 필요가 없습니다. 그렇지 않으면 대상 엔티티 클래스를 지정해야 합니다. 관계가 양방향인 경우 mappedBy요소를 사용하여 관계 소유자인 엔터티의 관계 필드 또는 속성을 지정해야 합니다.

    주석은 OneToMany엔티티 컬렉션에 대한 관계를 지정하기 위해 엔티티 클래스 내에 포함된 포함 가능한 클래스 내에서 사용될 수 있습니다. 관계가 양방향인 경우 mappedBy요소를 사용하여 관계 소유자인 엔터티의 관계 필드 또는 속성을 지정해야 합니다. 컬렉션이 이면 java.util.Map요소 cascade  orphanRemoval요소가 맵 값에 적용됩니다.

        예제 1: 제네릭을 사용한 일대다 연관
    
        // 고객 클래스에서:
    
        @OneToMany(cascade=ALL, mappedBy="고객")
        public Set<Order> getOrders() { 주문 반환; }
    
        주문 클래스:
    
        @ManyToOne
        @JoinColumn(이름="CUST_ID", nullable=false)
        공개 고객 getCustomer() { 고객 반환; }
    
    
        예제 2: 제네릭을 사용하지 않는 일대다 연관
    
        // 고객 클래스에서:
    
        @OneToMany(targetEntity=com.acme.Order.class, cascade=ALL,
                    mappedBy="고객")
        public Set getOrders() { 주문 반환; }
    
        // 주문 클래스에서:
    
        @ManyToOne
        @JoinColumn(이름="CUST_ID", nullable=false)
        공개 고객 getCustomer() { 고객 반환; }
    
    
        예제 3: 외래 키 매핑을 사용한 단방향 일대다 연관
    
        // 고객 클래스에서:
    
        @OneToMany(orphanRemoval=true)
        @JoinColumn(name="CUST_ID") // 조인 열은 Order에 대한 테이블에 있습니다.
        public Set<Order> getOrders() {주문 반환;}
        
     
    부터:1.0
    • 선택적 요소 요약선택적 요소수정자 및 유형선택적 요소설명cascadefetchmappedByorphanRemovaltargetEntity
      CascadeType[]
      (선택 사항) 연결 대상에 계단식으로 연결되어야 하는 작업입니다.
      FetchType
      (선택 사항) 연결을 느리게 로드해야 하는지 또는 적극적으로 가져와야 하는지 여부입니다.
      java.lang.String
      관계를 소유하는 필드입니다.
      boolean
      (선택 사항) 관계에서 제거된 엔터티에 제거 작업을 적용하고 해당 엔터티에 제거 작업을 연속적으로 적용할지 여부입니다.
      java.lang.Class
      (선택 사항) 연결 대상인 엔터티 클래스입니다.
    • 요소 세부 정보
      • targetEntity
        (선택 사항) 연결 대상인 엔터티 클래스입니다. 컬렉션 속성이 Java 제네릭을 사용하여 정의된 경우에만 선택 사항입니다. 달리 지정해야 합니다.

        제네릭을 사용하여 정의된 경우 컬렉션의 매개 변수화된 유형이 기본값입니다.

        기본:무효 클래스
      • java.lang.Class targetEntity
      • 종속
        (선택 사항) 연결 대상에 계단식으로 연결되어야 하는 작업입니다.

        기본적으로 캐스케이드되는 작업이 없습니다.

        대상 컬렉션이 이면 java.util.Map요소 cascade가 맵 값에 적용됩니다.

        기본:{}
      • CascadeType [] 캐스케이드
      • 술책
        (선택 사항) 연결을 느리게 로드해야 하는지 또는 적극적으로 가져와야 하는지 여부입니다. EAGER 전략은 연결된 엔터티를 즉시 가져와야 하는 지속성 공급자 런타임에 대한 요구 사항입니다. LAZY 전략은 지속성 공급자 런타임에 대한 힌트입니다.
        기본:javax.persistence.FetchType.LAZY
      • FetchType  가져오기
      • 매핑된 사람
        관계를 소유하는 필드입니다. 관계가 단방향이 아닌 경우 필수입니다.
        기본:""
      • java.lang.String mappedBy
      • 고아 제거
        (선택 사항) 관계에서 제거된 엔터티에 제거 작업을 적용하고 해당 엔터티에 제거 작업을 연속적으로 적용할지 여부입니다.
        부터:2.0기본:거짓
      • 부울 고아 제거

 

 

#백엔드 #백엔드개발자 #백엔드개발자취업 #스프링부트 #개발자되기 #java백엔드 #개발자채용 #개발자면접 #백엔드스쿨 #백엔드개발자 #코딩공부 #프론트엔드개발자 #개발자노트북 #개발자 #스프링 #개발자팁 #앱개발자 #개발공부 #개발

 

#스프링부트 #스프링부트게시판 #스프링부트jpa #개발자취업 #스프링강의 #개발자채용 #개발자면접 #개발자되기 #백엔드개발자 #백엔드개발자 #스프링부트 ##스프링부트실전활용마스터 #개발자노트북 #개발자 #스프링 #백엔드 #개발자팁

반응형

댓글