1. 자바에서 동일성과 동등성 이해하기 객체 지향 프로그래밍에서 동일성(Identity)과 동등성(Equality)은 객체를 비교하는 두 가지 중요한 개념이다. 2. 동일성(Identity) 동일성은 두 객체가 메모리 상에서 같은 위치를 차지하고 있는지, 즉 같은 객체인지를 판단한다.자바에서는 `==` 연산자를 사용하여 동일성을 확인한다. 예를 들어,Integer a = new Integer(1);Integer b = a;System.out.println(a == b); // true 이 경우 a와 b는 동일한 객체를 참조하므로 true를 반환한다. 3. 동등성(Equality) 동등성은 두 객체의 내용이나 상태가 같은지를 비교한다.자바에서는 `equals()` 메소드를 사용하여 동등성을 확인한다. 예..
백엔드 면접 질문
1. 객체 비교의 일관성 equals()가 true를 반환하는 두 객체는 반드시 같은 hashCode 값을 반환해야 한다.만약, equals()가 true를 반환하는 데 hashCode 값이 다르다면, 예상치 못한 결과가 발생할 수 있다.대표적인 예로, 해시값을 사용하는 HashSet, HashMap에서 문제가 발생할 수 있다. 2. equals()와 hashCode()의 동작 순서 2 - 1. HashMap 에서 데이터가 추가될 때추가되는 데이터의 hashCode()의 반환 값이 HashMap에 존재하는지 비교한다.같은 값이 있다면, equals()를 통해 true가 나오는지 비교한다.true이면 동등한 객체로 판단한다. 따라서, equals() true가 나오는 동등한 객체라고 하더라도 hashC..
1. JPA에서 ID 생성 전략 JPA에서는 엔티티의 기본 키(ID)를 생성하기 위한 여러 전략을 제공한다. 2. IDENTITY 전략 IDENTITY 전략은 기본 키 생성을 데이터베이스에 위임한다.MySQL에서는 AUTO_INCREMENT와 같은 데이터베이스 자동 증가 컬럼을 사용한다.엔티티가 영속화될 때 즉시 INSERT SQL이 실행되어 ID 값을 얻는다.엔티티가 영속화될 때 즉시 INSERT SQL이 실행된다는 의미는 영속성 컨텍스트의 쓰기 지연이 적용되지 않는다는 것이다. 영속성 컨텍스트는 트랜잭션이 끝날 때 까지 실행될 SQL을 쓰기 지연 저장소에 모아두고, 커밋 시점에 데이터베이스로 모아둔 쿼리를 날린다. 하지만, IDENTITY 전략을 사용한 경우, 식별자가 데이터베이스에서 할당이 되기 때..
1. 얕은 복사(Shallow Copy) 얕은 복사는 객체의 최상위 수준 필드만 복사한다.원시 타입 필드는 값이 복사되지만, 참조 타입 필드는 참조만 복사된다.새로운 객체를 생성하지만 내부 객체의 참조는 원본 객체와 공유한다. 1 - 1. 예시 - 얕은 복사public class ShallowCopyExample { public static void main(String[] args) { int[] originalArray = {1, 2, 3, 4, 5}; Product original = new Product("Laptop", 1000, originalArray); Product copy = original.shallowCopy(); System...
1. 트랜잭션 격리수준(Transaction Isolation Level) 트랜잭션 격리수준은 동시에 여러 트랜잭션이 실행될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것이다. 격리 수준이 높아질수록 데이터의 일관성과 무결성은 보장되지만, 동시성과 성능은 떨어지게 된다. 데이터 정합성과 성능은 반비례 관계이다. 따라서, 각 애플리케이션의 요구사항에 맞는 적절한 격리 수준을 선택하는 것이 중요하다. 각 격리 수준은 특정 데이터 불일치 현상(Dirty Read, Non-Repeatable Read, Phantom Read)을 방지할 수 있다. 2. 트랜잭션 격리 수준 유형 트랜잭션 격리 수준은 READ UNCOMMITTED, READ COMMIT..
데이터베이스 인덱스는 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 특정 컬럼에 대한 값과 해당 레코드의 위치를 매핑하여 빠른 데이터 접근을 가능하게 한다. 인덱스는 추가적인 저장 공간을 사용하지만, 대량의 데이터에서 검색 성능을 크게 개선한다. 인덱스는 ORDER BY, GROUP BY, WHERE 절의 효율적인 처리를 돕는다. 하지만 INSERT, UPDATE, DELETE 작업시 인덱스 갱신으로 인한 성능 저하가 발생할 수 있다. 1. 인덱스의 자료구조인덱스는 주로 해시 테이블과 B+Tree가 사용된다. 해시 테이블은 O(1)의 시간 복잡도로 빠른 검색이 가능하지만, 범위 검색에는 적합하지 않는다. B+Tree는 균형 잡힌 트리 구조로, O(log N)의 시간 복잡도를 가지며 범위 검색에 효율..
1. 일급 컬렉션(First-Class Collection)이 무엇인가요?일급 컬렉션(First-Class Collection)은 컬렉션 객체를 포장(wrap)하면서, 그 외 다른 멤버 변수가 없는 상태를 말한다. 즉, 컬렉션을 감싸고 있는 클래스로, 해당 클래스는 오직 하나의 컬렉션 필드만 가진다. 일급 컬렉션을 사용하면 컬렉션과 관련된 비즈니스 로직을 한 곳에서 관리할 수 있게 되고, 불변성을 보장하며, 비즈니스에 특화된 명확한 이름을 부여할 수 있어 검색이나 가독성을 높일 수 있다. 1 - 1. 예시아래와 같은 코드가 있다고 가정해보면,List names = new ArrayList();names.add("Alice");names.add("Bob");names.add("Charlie"); 아래와 같..
1. 예외 계층 그림Throwable최상위 예외이다. 하위에 Exception과 Error가 있다. Error메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다.개발자는 Error를 처리하려고 해서는 안된다. Exception : 체크 예외애플리케이션 로직에서 사용할 수 있는 최상위 예외이다.Exception과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다. RuntimeException : 언체크 예외, 런타임 예외Exception의 하위 예외이지만, 컴파일러가 체크하지 않는 언체크 예외이다.RuntimeException과 그 하위 예외는 모두 언체크 예외이다.흔히, 런타임 예외라고 부른다. 2. 자바에서 Checked Exception과 Unchecked..