12월 1일 금요일 TIL

장숭혁·2023년 12월 1일
0

TIL작성

목록 보기
22/60

🚫 예외처리

1. 예외처리 키워드

  • try : 예외가 발생할 수 있는 코드 블록을 try 블록 안에 작성한다.
try{
//예외가 발생할 수 있는 코드
//파일  읽기, 네트워크 통신 등
}
  • catch : try 블록에서 예외가 발생하면 해당 예외를 처리하기 위해 catch 블록을 사용한다. catch 블록은 예외 유형과 일치하는 예외를 처리하고 적절한 작업을 수행한다.
catch(IOException e){
//IOException 예외를 처리하는 코드
//e.printStackTrace(); 예외 정보 출력
//다른 처리 작업 수행 가능
}
  • finally : finally 블록은 에외 발생 여부에 상관없이 항상 실행되는 블록이다. 주로 리소스 해제나 정리 작업에 사용된다.
finally{
//예외 발생 여부와 관계없이 항상 실행되는 코드
//리소스 해제 등
}
  • throw : 예외를 명시적으로 발생시키기 위해 throw 키워드를 사용한다. 이를 통해 사용자가 직접 예외를 발생시킬 수 있다.
public class CustomExceptionExample {
    // 사용자 정의 예외 클래스 생성
    static class MyCustomException extends Exception {
        public MyCustomException(String message) {
            super(message);
        }
    }

    public static void main(String[] args) {
        try {
            throw new MyCustomException("사용자가 직접 발생시킨 예외");
        } catch (MyCustomException e) {
            System.out.println("예외가 발생했습니다: " + e.getMessage());
        }
    }
}
  • throws : 메소드에서 발생할 수 있는 예외를 선언하는 데 사용한다. 이를 통해 해당 메소드를 호출하는 쪽에서 예외를 처리하도록 강제 할 수 있다.
import java.io.IOException;

public class ThrowsExample {
    // IOException을 throws로 선언하여 해당 메소드를 호출하는 쪽에서 처리하도록 함
    static void readDataFromFile() throws IOException {
        // 파일에서 데이터를 읽는 작업 수행
        // 만약 IOException이 발생하면 예외를 호출한 쪽으로 던짐
        throw new IOException("파일을 읽는 도중 예외 발생");
    }

    public static void main(String[] args) {
        try {
            readDataFromFile();
        } catch (IOException e) {
            System.out.println("파일 읽기 도중 예외 발생: " + e.getMessage());
        }
    }
}



👑 외래키의 주인 🗝

외래키(foreign key)의 주인 : JPA에서 양방향 관계를 설정할 때 어떤 엔티티가 외래 키를 관리하고 그 관리 방식을 결정하는 역할을 말한다. 데이터베이스 테이블 간의 관계를 객체 간의 매핑을 표현할 때 중요한 개념이다.

외래키의 주인을 결정하는 방법@OneToMany 와 @ManyToOne 관계에서 mappedBy 속성을 사용하여 설정된다. 이를 통해 한 엔티티가 다른 엔티티에 의해 매핑된 필드를 가지고 있는지를 명시한다. 주인은 mappedBy 속성에 명시된 필드를 통해 외래 키를 관리하고 업데이트한다.

@Entity
public class Department {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @OneToMany(mappedBy = "department")
    private List<Employee> employees = new ArrayList<>();
}
@Entity
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @ManyToOne
    @JoinColumn(name = "department_id")
    private Department department;
}

Department 엔티티와 Employee엔티티의 관계는 일대다의 관계이다. Department엔티티는 @OneToMany(mappedBy = "department")로 설정되어 있다. employee엔티티의 department필드에 의해 매핑되고 있다. 따라서 employee엔티티의 department필드를 통해 외래 키 관리가 이루어지며, Department 엔티티는 외래 키의 주인이 아니다.

employee엔티티가 Department엔티티를 참조하고 있으며, employee엔티티의 department필드를 통해 외래 키가 관리되고 업데이트 된다. employee가 외래 키의 주인이다.

profile
코딩 기록

0개의 댓글