분류 전체보기 210

자바의 synchronized

synchronized 키워드는 무엇이고 어떤 역할을 하는지 설명해주세요. 그리고 synchronized 블록과 메서드를 어떻게 사용하는지 알려주세요. 해당 키워드를 사용하는 이유는 무엇일까요?synchronized 키워드는 자바에서 동기화(synchronization)를 위해 사용되는 키워드입니다. 동기화는 멀티스레드 환경에서 여러 스레드가 동시에 하나의 공유 자원에 접근할 때 발생할 수 있는 문제를 방지하기 위해 사용됩니다. synchronized 키워드는 특정 코드 블록이나 메서드를 한 번에 하나의 스레드만 접근할 수 있도록 합니다.역할과 개념역할동시성 제어: 여러 스레드가 동시에 접근하여 발생할 수 있는 데이터 불일치와 같은 문제를 방지합니다.원자성 보장: 동기화된 블록이나 메서드 내의 코드가 하..

[프래피티] 2024.05.20

자바의 NIO

자바 NIO의 기본 개념과 그 주요 특징들에 대해 설명해주세요.자바의 New Input/Output(NIO)는 기존의 표준 I/O(java.io 패키지)를 보완하고 확장하기 위해 도입된 API로, 특히 높은 성능과 확장성을 요구하는 애플리케이션에 유용합니다. 자바 NIO는 기본적으로 블로킹 I/O 대신 비블로킹 I/O를 사용하여 더 나은 성능을 제공합니다. 여기서는 자바 NIO의 기본 개념과 주요 특징들을 자세히 설명하겠습니다.1. 기본 개념채널 (Channel)채널은 데이터가 읽히거나 쓰여지는 추상적인 개념입니다. NIO에서는 모든 I/O 작업이 채널을 통해 수행됩니다. 예를 들어, 파일 채널(FileChannel)이나 소켓 채널(SocketChannel)이 있습니다.채널은 비블로킹 모드에서 작동할 수..

[프래피티] 2024.05.20

Blocking IO / Non-Blocking IO

Blocking IO와 Non-Blocking IO의 개념 및 동작 방식에 대해 설명해주세요.Blocking IO와 Non-Blocking IO 개념 및 동작 방식1. Blocking IO (블로킹 IO)개념:입출력 작업(예: 파일 읽기/쓰기, 네트워크 요청)이 완료될 때까지 호출한 스레드가 대기하는 방식입니다.작업이 완료되면 결과를 반환하고, 그동안 스레드는 다른 작업을 수행할 수 없습니다.동작 방식:스레드가 입출력 작업을 요청합니다.커널은 해당 작업을 처리합니다. (디스크 접근, 네트워크 데이터 전송 등)작업이 완료될 때까지 스레드는 대기 상태가 됩니다. (Blocked)작업이 완료되면 커널은 결과를 스레드에 반환하고, 스레드는 다시 실행 가능 상태가 됩니다. (Runnable)특징:구현이 간단하고 ..

[프래피티] 2024.05.20

자바의 스레드란

자바에서 스레드란?스레드는 프로세스 내에서 실행되는 가장 작은 단위의 작업입니다. 자바에서 스레드는 동시에 여러 작업을 수행할 수 있도록 도와줍니다. 자바는 java.lang.Thread 클래스와 java.lang.Runnable 인터페이스를 통해 스레드를 생성하고 관리할 수 있습니다.멀티스레딩을 사용해야 하는 이유멀티스레딩은 여러 스레드가 동시에 실행되는 것을 의미합니다. 멀티스레딩을 사용해야 하는 주요 이유는 다음과 같습니다:성능 향상: 멀티스레딩을 사용하면 여러 작업을 동시에 수행할 수 있어 프로그램의 성능이 향상됩니다. 특히 다중 코어 프로세서에서는 각 코어가 독립적으로 스레드를 실행할 수 있어 더 높은 성능을 발휘할 수 있습니다.자원 공유: 여러 스레드가 동일한 메모리 공간을 공유하므로 자원 낭..

[프래피티] 2024.05.19

자바의 제네릭

제네릭을 사용하는 이유와 자바에서 제네릭 타입의 컴파일 타임 동작원리에 대하여 설명해주세요.제네릭을 사용하는 이유타입 안전성 보장:제네릭을 사용하면 컴파일 시점에서 타입을 체크할 수 있습니다. 이를 통해 런타임 에러를 줄이고, 잘못된 타입이 사용되는 것을 방지할 수 있습니다.List list = new ArrayList();list.add("Hello");String s = list.get(0); // 타입 캐스팅이 필요 없음코드 재사용성 향상:제네릭을 사용하면 다양한 타입에 대해 동일한 코드를 재사용할 수 있습니다. 이를 통해 코드 중복을 줄이고 유지보수를 쉽게 할 수 있습니다.public class Box { private T content; public void setContent(T c..

[프래피티] 2024.05.18

StringBuilder와 StringBuffer

StringBuffer가 왜 동기화 되어 있는지, 그리고 멀티쓰레드 환경에서 왜 안전한지 설명해주세요.StringBuffer와 StringBuilder는 자바에서 가변성(mutable)을 가지는 문자열을 다룰 때 사용하는 클래스입니다. 이 둘의 가장 큰 차이점은 동기화(synchronization) 여부입니다. 이에 대한 자세한 설명과 왜 이러한 차이가 중요한지에 대해 설명해 드리겠습니다.1. StringBuffer와 StringBuilder의 차이점StringBuffer:동기화: StringBuffer는 모든 public 메소드가 synchronized 키워드로 선언되어 있습니다. 이는 여러 스레드가 동시에 StringBuffer 객체에 접근하더라도 데이터의 일관성을 유지할 수 있도록 합니다. 따라서 ..

[프래피티] 2024.05.18

자바에서 자주 쓰는 자료구조 2

자바에서 HashMap은 어떻게 작동하며, hashCode 메소드와의 관련성은 무엇인가요?Java에서 HashMap의 작동 원리와 hashCode 메소드의 관련성HashMap의 기본 구조Java의 HashMap은 키-값 쌍을 저장하는 자료 구조로, 내부적으로 배열과 링크드 리스트 또는 트리를 사용하여 데이터를 관리합니다. HashMap은 해싱(hashing) 기법을 사용하여 데이터를 빠르게 검색, 삽입, 삭제할 수 있도록 설계되었습니다.내부 구조배열:HashMap은 초기에는 배열을 사용하여 데이터를 저장합니다. 배열의 각 요소는 버킷(bucket)이라고 불리며, 각 버킷은 링크드 리스트 또는 트리를 참조할 수 있습니다.해싱:HashMap은 키의 해시 코드를 사용하여 데이터를 버킷에 분배합니다. 해시 코드..

[프래피티] 2024.05.17

자바에서 자주 쓰는 자료구조1

ArrayList에서 동적 확장이 일어날 때, 내부적으로 어떤 알고리즘을 사용하여 배열의 크기를 얼마나 늘리나요? 그리고 ArrayList의 성능에 미치는 영향은 무엇인가요?ArrayList의 내부 구조와 동작 원리에 대해 더 깊이 설명하겠습니다.ArrayList는 내부적으로 Object[] 배열을 사용하여 데이터를 저장합니다. 이 배열의 초기 크기는 10으로 설정됩니다. 사용자가 요소를 추가하면, 이 배열의 크기가 자동으로 조정됩니다.동적 확장(Dynamic Expansion) ArrayList는 내부적으로 배열의 크기를 확장합니다. 이 과정은 다음과 같이 진행됩니다.크기 확인: 요소를 추가하기 전에 ArrayList는 현재 배열의 크기가 충분한지 확인합니다.확장 필요: 크기가 부족하면 새로운 배열을 ..

[프래피티] 2024.05.17

자바 어노테이션

자바의 어노테이션은 무엇이며, 주로 어떤 용도로 사용되나요?자바 어노테이션은 코드에 메타데이터를 추가하는 방법으로, 주로 코드의 의미를 설명하거나 컴파일러에게 추가 정보를 제공하기 위해 사용됩니다. 어노테이션은 클래스, 메서드, 변수, 매개변수 등 다양한 요소에 붙일 수 있으며, 자바 런타임 환경이나 빌드 도구에서 해당 정보를 활용할 수 있습니다.어노테이션의 주요 용도컴파일러 지시자 (Compiler Instructions):어노테이션은 컴파일러에게 특정 작업을 지시하거나 경고를 억제하는 데 사용됩니다.런타임 처리 (Runtime Processing): 런타임에 리플렉션(reflection)을 통해 어노테이션 정보를 읽어 특정 동작을 수행할 수 있습니다.빌드 도구 지원 (Build Tool Support..

[프래피티] 2024.05.17

Checked Exception과 Unchecked Exception

Checked Exception과 Unchecked Exception의 차이는 무엇인가요? 그리고 각각을 처리하는 방법에는 어떤 차이가 있을까요?Checked Exception은 컴파일러가 강제로 처리하도록 요구하는 예외입니다.Unchecked Exception은 컴파일러가 강제로 처리하도록 요구하지 않는 예외입니다.차이점은 처리 방법의 차이가 있는데 Checked Exception 처리 방법에는 try-catch 블록이 있고, Unchecked Exception 처리 방법에는 try-catch 블록으로 처리하지 않아도 되지만, 필요에 따라 예외 처리를 통해 프로그램의 안정성을 높일 수 있습니다.Checked Exception과 Unchecked Exception은 자바의 예외 처리에서 중요한 역할을 합..

[프래피티] 2024.05.17