전체 글 243

[Java] Java에서 예외 처리

예외와 에러 프로그래밍에서 예외(Exception)란 입력 값의 처리가 불가능하거나 참조된 값이 잘못된 경우 등 애플리케이션이 정상적으로 동작하지 못하는 상황을 의미합니다. 예외는 개발자가 직접 처리할 수 있으므로 미리 코드 설계를 통해 처리할 수 있습니다. 에러(Error)란 예외와 비슷한 의미지만 엄연히 다른 용어로, 에러는 주로 자바의 가상머신(JVM)에서 발생시킵니다. 따라서 예외와 달리 애플리케이션에서 처리할 수 있는 것이 없습니다. 대표적인 예로 메모리 부족(OutOfMemory), 스택 오버플로(StackOverFlow)가 있습니다. 이러한 에러는 발생 시점에 처리하는 것이 아니라 미리 애플리케이션의 코드를 살펴보면서 문제가 발생하지 않도록 예방해서 원천적으로 차단해야 합니다. 예외 클래스 ..

[Java] Compile Time과 Runtime의 차이

자바에서는 컴파일 타임과 런타임은 각각 프로그램의 실행의 두 단계를 나타냅니다. 컴파일 타임(Compile Time) 컴파일 타임은 사람이 작성한 소스 코드가 컴퓨터가 이해할 수 있는 기계어로 번역되는 단계입니다. 자바의 컴파일러는 이 단계에서 문법적 에러를 확인합니다. (e.g., missing semicolons, typos, incorrect syntax) 만약 어떤 문제도 발생하지 않으면, 자바 컴파일러(e.g., javac)는 bytecode를 생성합니다. bytecode는 기계어는 아니지만, JVM(Java Virtual Machine)에 의해 해석될 수 있습니다. 또한 아래와 같은 일들이 수행됩니다. 데이터 유형 호환성 확인 클래스 및 방법이 올바르게 선언되었는지 확인 런타임(Runtime)..

[이분 탐색] 프로그래머스 Level 3 입국심사 Java 풀이

https://school.programmers.co.kr/learn/courses/30/lessons/43238 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 times를 오름차순 정렬한다. 가장 큰 시간(times의 마지막 인덱스)에다가 n을 곱해서 가장 오래 걸리는 경우의 시간을 구한다. 즉, 모든 사람이 가장 오래 걸리는 시간의 입국심사대를 가는 상황이다. 시작 시간(start)과 가장 오래 걸리는 시간(end)을 반으로 나눈 값을 mid라는 변수에 저장한다. times 배열을 순회하며 mid 변수를 times 배열의 요소로 나누어서 c..

Development/PS 2024.03.07

[DataStructure] 우선순위 큐(Priority Queue)와 힙(Heap)의 차이

Queue Java의 Queue 인터페이스는 FIFO(First In First Out) 방식의 순차적 자료 구조를 구현 즉, 먼저 추가된 요소가 먼저 제거됨. Queue 인터페이스는 LinkedList, PriorityQueue, ArrayBlockingQueue 등 다양한 클래스에서 구현 Queue 인터페이스는 큐에 요소를 추가, 제거, 검사하는 여러 메서드를 제공하며, 다음은 가장 일반적으로 사용되는 메서드들이다. add(element): 요소를 큐의 맨 뒤에 추가, 큐가 가득 차 있으면 예외를 발생 offer(element): 요소를 큐의 맨 뒤에 추가, 큐가 가득 차 있으면 false를 반환 remove(): 큐의 앞에서 요소를 제거하고 반환, 큐가 비어 있으면 예외를 발생 poll(): 큐의 ..

[DataStructure] Stack과 Queue

ADT(Abstract Data Type) vs DS(Data structure) 'ADT'는 추상 자료형을 의미하며 개념적으로 어떤 동작이 있는지만 정의하고, 구현에 대해서는 다루지 않는다. 'DS'는 자료구조로, 'ADT'에서 정의된 동작을 실제로 구현한 것 Stack과 Queue는 'ADT'를 실제로 구현한 자료 구조이다. 스택(Stack)과 큐(Queue) 스택은 'Last-In-First-Out' 형태로 데이터를 저장하는 구조 데이터를 삽입하는 'push', 데이터를 뽑아내고 삭제하는 'pop', 가장 마지막에 들어온 요소를 추출하는 'peek'과 같은 동작이 있다. Queue는 'First-In-First-Out' 형태로 데이터를 저장하는 구조이며, 데이터를 삽입하는 'enqueue', 추출하..

[Spring] 유효성 검사와 Hibernate Validator

유효성 검사(validation) 애플리케이션의 비즈니스 로직이 올바르게 동작하는지 검증하는 작업을 유효성 검사라고 한다. 유효성 검사의 예로는 여러 계층에서 들어오는 데이터에 대해 의도한 형식대로 값이 들어오는지 체크하는 과정이 있다. 특히 자바에서 가장 신경 써야 하는 것 중 하나로 NullPointException이 있다. Bean Validation 계층별로 진행하는 유효성 검사는 검증 로직이 각 클래스별로 분산돼 있어 관리하기가 어렵다. 그리고 검증 로직에 의외로 중복이 많아 여러 곳에 유사한 기능의 코드가 존재할 수 있다. 검증해야 할 값이 많다면 검증하는 코드가 길어진다. 이러한 문제로 코드가 복잡해지고 가독성이 떨어지는 문제가 있다. 이 같은 문제를 해결하기 위해 자바 진영에서는 2009년..

Development/Spring 2024.03.07

[Database] Join의 의미와 여러 종류의 Join

SQL에서 join join은 SQL에서 두 개 이상 테이블 데이터를 함께 조회하는 것을 말한다. join은 여러 종류의 join이 존재한다. Implicit join과 Explicit join SELECT D.name FROM employee AS E, department AS D WHERE E.id = 1 and E.dept_id = D.id; 위 SQL문은 implicit join을 사용한 예시이다. implicit join은 from 절에는 table들만 나열하고 where절에 join condition을 명시하는 방식이다. implicit join은 where절에 selection condition과 join condition이 같이 있기 때문에 가독성이 떨어지며, 실수할 가능성이 높아서 exp..

[Database] 데이터베이스의 파티셔닝, 샤딩, 레플리케이션

파티셔닝(Partitioning)파티셔닝은 테이블을 더 작은 크기의 테이블로 나누는 것으로, Vertical Partitioning과 Horizontal Partitioning으로 나눌 수 있다.Vertical Partitioning은 컬럼을 기준으로 테이블을 나누는 방식으로, 데이터 테이블을 정규화하기 위해 사용될 수도 있으며, 다른 경우에도 활용할 수 있다.Vertical Partitioning을 통해 컬럼을 나눠 서로 다른 테이블에 저장할 수도 있으며, 게시판에서 게시물의 조회수, 댓글 수 등을 별도의 테이블로 나눠 저장할 수 있다.Horizontal Partitioning은 행을 기준으로 테이블을 나누는 방식이다.Vertical Partitioning으로 컬럼 기준으로 테이블을 나누어 데이터 조회..

[Spring] 영속성 전이(Cascade)와 고아 객체(Orphan)

영속성 전이(Cascade) 영속성 전이란 특정 엔티티의 영속성 상태를 변경할 때 그 엔티티와 연관된 엔티티의 영속성에도 영향을 미쳐 영속성 상태를 변경하는 것 예를 들어 아래 코드에서 @OneToMany 어노테이션의 인터페이스를 살펴보면 cascade()라는 요소를 볼 수 있다. public @interface OneToMany { Class targetEntity() default void.class; CascadeType[] cascade() default {}; FetchType fetch() default FetchType.LAZY; String mappedBy() default ""; boolean orphanRemoval() default false; } 영속성 전이에 사용되는 타입은 엔티티..

Development/Spring 2024.03.05

[Spring] 연관 관계 매핑하기

RDBMS를 사용할 때는 각 도메인에 맞는 테이블을 설계하고 연관관계를 설정해서 조인(Join) 등의 기능을 활용합니다. JPA를 사용하여 테이블의 연관관계를 엔티티 간의 연관관계로 표현할 수 있습니다. 연관관계 매핑 종류와 방향 One To One(일대일) 테이블의 하나의 레코드가 다른 테이블의 하나의 레코드만 연관되어 있는 관계입니다. 예를 들어 Product 테이블과 Product_Detail 테이블의 경우, 한 Product 당 한 Detail 레코드와 연관 관계를 가질 수 있으므로 일대일 관계라고 볼 수 있습니다. One To Many(일대다), Many To One(다대일) 한 테이블의 레코드가 다른 테이블의 여러 레코드와 연관되어 있는 관계입니다. 예를 들어 Team 테이블과 Player ..

Development/Spring 2024.03.05