728x90 Programming/Java23 HashMap과 시간 복잡도 자바 HashMap은 key-value 쌍으로 데이터를 저장하는 자료구조입니다. 각각의 key는 유일하며, 해당 key에 대한 value를 O(1)의 시간 복잡도로 검색하거나 삽입할 수 있습니다. HashMap은 내부적으로 해시 테이블(Hash table)을 사용하여 데이터를 저장하므로, 검색 및 삽입에 걸리는 시간 복잡도는 O(1)입니다. 이는 매우 빠르며, 대용량 데이터를 다룰 때 유용합니다. 하지만, 데이터가 많아지면 해시 충돌(Hash Collision)이 발생할 가능성이 높아집니다. 이 경우, 검색 및 삽입 시간 복잡도는 O(n)으로 증가할 수 있습니다. 따라서 충돌을 최소화하는 해시 함수를 사용하거나, 충돌이 발생했을 때도 O(1)의 시간 복잡도를 유지하는 개선된 해시 테이블을 사용하는 등의 .. 2023. 2. 23. ConcurrentModificationException Java에서 ConcurrentModificationException은 컬렉션을 동시에 수정하려고 할 때 발생합니다. 이 예외는 다른 스레드나 iterator가 컬렉션을 수정하는 동안, 현재 스레드에서 해당 컬렉션을 수정하려고 할 때 발생합니다. 예를 들어, 다음과 같은 코드에서는 ConcurrentModificationException이 발생할 수 있습니다. List numbers = new ArrayList(Arrays.asList(1, 2, 3, 4, 5)); for (Integer number : numbers) { if (number == 3) { numbers.remove(number); } } 이 코드에서는 numbers 리스트에서 iterator를 통해 요소를 순회하면서, 요소가 3인 경우.. 2023. 2. 23. Checked Exception과 Unchecked Exception Java에서 Exception은 크게 Checked Exception과 Unchecked Exception으로 나뉩니다. Checked Exception은 컴파일러가 예외처리를 강제하는 Exception을 말합니다. Checked Exception을 발생시키는 메서드는 반드시 try-catch 블록으로 감싸거나 throws 키워드를 사용하여 예외를 호출한 메서드에 전파해야 합니다. 대표적인 Checked Exception으로는 IOException, SQLException 등이 있습니다. Unchecked Exception은 컴파일러가 예외처리를 강제하지 않는 Exception을 말합니다. Unchecked Exception은 RuntimeException 클래스를 상속받은 Exception입니다. 이러.. 2023. 2. 23. String, String Buffer, String Builder String, StringBuffer, StringBuilder는 모두 문자열을 다루는 클래스입니다. 이들의 차이점은 다음과 같습니다. String String 클래스는 불변(immutable)한 객체입니다. 즉, 한 번 생성된 문자열은 변경할 수 없습니다. 따라서, 문자열을 연결하거나 변경할 때마다 새로운 객체를 생성해야 합니다. 이는 메모리 낭비를 야기할 수 있습니다. 그러나, 불변성을 보장하기 때문에 스레드 안전성이 보장됩니다. StringBuffer StringBuffer 클래스는 가변(mutable)한 객체이며, 동기화된 메소드를 제공합니다. 따라서, 멀티쓰레드 환경에서 안전하게 사용할 수 있습니다. 또한, 문자열을 연결하거나 변경하는 등의 작업에서 새로운 객체를 생성하지 않고 기존 객체를 변경.. 2023. 2. 22. Final, Finally, Finalize 비교 Final, finally, finalize는 모두 자바에서 사용되는 키워드이지만, 각각 다른 역할을 합니다. Final Final은 변수, 메소드, 클래스에 사용할 수 있으며, 다음과 같은 의미를 가집니다. 변수 : 변수의 값을 변경할 수 없음을 의미합니다. 메소드 : 메소드의 오버라이딩을 금지함을 의미합니다. 클래스 : 클래스의 상속을 금지함을 의미합니다. Finally Finally는 try-catch 문에서 사용할 수 있으며, 예외 발생 여부와 상관없이 항상 실행되는 블록입니다. 보통, 리소스 해제나 데이터베이스 연결 종료와 같은 마무리 작업을 수행하는 데 사용됩니다. Finalize Finalize는 Object 클래스에 정의된 메소드로, 객체가 Garbage Collector에 의해 수거될 때.. 2023. 2. 22. 객체 상태의 영속화 객체의 상태를 영속화(Persistence) 한다는 것은, 객체의 데이터를 저장장치(예를 들면 하드 디스크)에 저장하여, 프로그램이 종료되어도 데이터를 유지할 수 있는 것을 의미합니다. 객체의 상태를 영속화하면, 다시 프로그램을 실행해도 이전에 저장했던 데이터를 불러올 수 있습니다. 이러한 기능은 대부분의 애플리케이션에서 필요로 하며, 데이터베이스나 파일시스템과 같은 저장장치를 사용하여 구현할 수 있습니다. 객체의 상태를 영속화하는 방법에는 다양한 방법이 있습니다. 예를 들어, 파일 시스템을 이용해 객체를 직렬화하여 파일에 저장하거나, 데이터베이스를 이용해 객체를 데이터베이스 테이블에 저장할 수 있습니다. 또는, 메모리 내의 객체를 직접 저장할 수 있는 캐시와 같은 메모리 기반 저장장치도 있습니다. 객체.. 2023. 2. 22. 이전 1 2 3 4 다음 728x90