분류 전체보기 176

[Java] 예외 처리

오류(Error)의 종류오류는 세 가지 종류로 나뉘어진다.구문 오류(컴파일 에러)문법에 맞지 않거나, 오타가 발생했을 때 컴파일러가 알려주는 오류이다. 치명적인 오류는 아니다.논리 오류컴파일/실행은 되지만 프로그램이 잘못 동작하고 있는 오류이다.프로그램이 작동하는데는 아무 문제가 없지만, 실행 결과가 개발자가 의도한 바와 다른 경우이다.예를 들어 점수의 평균을 계산하는 메서드에서 총 과목의 수가 3인데 4로 나누도록 만들었다면 논리적 오류에 해당한다. 이 경우 로직이 틀린 것이기 때문에 개발자가 코드를 짰지만 의도한 대로 프로그램이 동작하지 않게 되며, 컴파일/실행했을 때는 정상 동작하므로 쉽게 찾기가 힘들다.실행 오류(런타임 에러)프로그램 실행(런타임) 도중에 어떤 특정 컴퓨터에만, 특정한 상황에만 발..

Java 2024.12.18

[JAVA] Comparable로 객체 정렬하기

객체 정렬은 Kruskal로 MST를 구할 때 자주 쓰이는 문법이다.엣지의 가중치를 오름차순으로 정렬한 후 엣지를 앞에서부터 선택하면 MST를 만들 수 있기 때문이다. 그런데 compareTo의 리턴값을 어떻게 설정해야 객체가 오름차순 또는 내림차순으로 정렬되는지 매번 헷갈려서 간단히 정리하고 넘어가려고 한다. 객체를 정렬하는 방법?정렬하고자하는 객체들을 리스트에 넣어 Arrays.sort()를 호출하면 된다. Arrays.sort() 호출 시 Comparable 인터페이스의 compareTo() 메서드가 호출된다. compareTo() 메서드는 두 객체를 특정 기준으로 비교하여 int값을 리턴하는 함수인데, compareTo()에 의해 양수가 리턴되면 두 객체의 자리를 바꾸는 식으로 정렬이 이루어진다...

Java 2024.12.17

[JAVA] 다형성이란? 다형성이 필요한 이유 | 오버라이딩, 오버로딩, 타입 변환(업캐스팅)

다형성은 무엇이고, 왜 필요할까요? 다형성은 객체 지향적 설계를 위한 4가지 원리 중 하나입니다.여기서 알 수 있듯이 다형성의 목적은 객체 지향의 실현입니다. 다형성이 어떻게 객체 지향을 실현하는지 살펴봅시다. 다형성이란?다형성은 어떤 객체의 속성이나 기능이 상황에 따라 다른 역할을 수행할 수 있는 것을 의미합니다.다형성은 오버라이딩, 오버로딩, 타입 변환 등에서 다양하게 나타날 수 있는데요, 하나씩 설명해보겠습니다. (1) 오버라이딩상위 클래스 메서드를 하위클래스에서 재정의하여 사용public interface Vehicle { //Vehicle 인터페이스 void start(); void moveForward(); void moveBackward();}public class Car i..

Java 2024.12.17

[DB/JPA] 엔티티 매핑(@Entity) / 데이터베이스 스키마 자동 생성 기능 (ddl-auto)

JPA는 엔티티 객체와 DB 테이블을 연결해서 개발자가 직접 쿼리를 쓰지 않고 메서드로 간단하게 데이터베이스에 접근할 수 있게 해줍니다. 그런데 어떤 엔티티 객체와 DB 테이블이 대응되는지는 개발자가 직접 어노테이션을 붙여서 JPA에게 알려줘야 합니다. 이번 포스팅에서는 JPA에서 엔티티를 매핑할 때 자주 쓰이는 어노테이션에 대해 알아보겠습니다. @Entity@Table(name="MEMBER")public class Member { ...@Entity테이블과 매칭될 클래스실제로 DB 테이블과 연결되기 때문에, 내용이 DB 테이블과 다르면 안 됨.name : jpa에서 사용할 엔티티 이름 지정. 디폴트값은 클래스 이름인데, 보통 클래스 이름을 사용함. 다른 패키지에 이름이 같은 엔티티 클래스가 있다..

DB 2024.12.16

[JAVA] String과 StringBuffer/StringBuilder

지금까지 코테 문제를 풀면서 StringBuffer을 사용한 이유는 그 순간에 StringBuffer을 사용하는 것이 성능에 도움이 될 것이라 판단했기 때문이라기보다는, 그저 append기능을 쓰기 위해서였습니다.그리고 문자열 연산 시 String의 문자열 합치기 기능보다 더 성능이 낫다고 들어서 정도의 이유였죠..또 StringBuffer보다 StringBuilder가 단일 스레드 연산에 더 효율적이라는 글을 읽은 뒤로는 StringBuilder을 열심히 썼어요. 과연 그 말이 항상 옳을까요? 그리고 셋의 차이점은 무엇일까요? String과 StringBuffer/StringBuilder은 모두 문자열을 다루는 클래스입니다.이중 어느 것을 사용하는 게 성능이 좋을지는 각 클래스의 특징을 알아야 판단할 ..

Java 2024.12.15

[DB/JPA] 기본 키 매핑(직접 할당 @Id /자동 할당 @GeneratedValue), 컬럼 매핑(@Column)

기본 키 매핑기본 키를 할당하는 방식은 두 가지입니다.직접 할당자동 할당기본 키 직접 할당기본키로 지정하고싶은 필드에 @Id를 붙여줍니다. @Id@Column(name = "ID")private int id; @Id 적용 가능 타입 :자바 기본형Wrapper 타입Stringjava.util.Datejava.sql.Datejava.math.BigDecimaljava.math.BigInteger @Id 필드에 개발자가 직접 값을 할당해야 합니다. 그런데 영속성 컨텍스트는 엔티티를 식별자값으로 관리하기 때문에 식별자 값이 할당되어야 영속성 컨텍스트의 관리를 받을 수 있습니다. 식별자 값이 없는 상태로 em.persist하면 예외가 발생하는데, 어떤 예외가 발생하는지는 jpa 표준에 정의되어있지 않습니다. 하이..

DB 2024.12.15