자바웹프로그래밍/JAVA
-
내부 스태틱 클래스(static nested class)를 사용하는 이유와 그 동작 방식자바웹프로그래밍/JAVA 2024. 7. 25. 14:00
내부 스태틱 클래스(static nested class)를 사용하는 이유논리적인 그룹화: 내부 스태틱 클래스는 외부 클래스와 밀접한 관련이 있는 클래스를 논리적으로 그룹화하는 데 유용합니다. 이를 통해 코드의 가독성과 유지보수성을 높일 수 있습니다.캡슐화: 내부 스태틱 클래스는 외부 클래스의 private 멤버에 접근할 수 있기 때문에, 외부 클래스의 구현 세부 사항을 캡슐화하는 데 도움이 됩니다.외부 클래스와의 결합도 낮추기: 내부 클래스(non-static inner class)와 달리, 내부 스태틱 클래스는 외부 클래스의 인스턴스에 대한 참조를 갖지 않기 때문에 외부 클래스와의 결합도가 낮아집니다. 이는 내부 스태틱 클래스의 독립성을 높입니다.내부 스태틱 클래스의 메모리 관리내부 스태틱 클래스는 외..
-
BufferedOutputStream를 사용하면 성능이 좋아지는 이유 및 자세한 설명 with FileDescriptor자바웹프로그래밍/JAVA 2024. 7. 24. 14:37
Contents --> Java에서 데이터를 디스크에 쓰는 과정은 여러 단계로 구성되어 있으며, 최종적으로는 운영 체제의 네이티브 파일 시스템 호출로 이어집니다. 여기서 BufferedOutputStream이 실제로 어떻게 작동하는지, 그리고 네이티브 코드에서 어떻게 구현되는지 살펴보겠습니다. 데이터가 디스크에 적재되는 과정Java 애플리케이션 코드: 애플리케이션은 FileOutputStream 또는 BufferedOutputStream을 사용하여 데이터를 파일에 씁니다.Java 클래스: FileOutputStream과 BufferedOutputStream 클래스는 Java 표준 라이브러리의 일부이며, 데이터를 디스크에 쓰기 위한 메서드를 제공합니다.네이티브 메서드 호출: FileOutputSt..
-
InputStream 과 OutputStream에 차이 !자바웹프로그래밍/JAVA 2024. 7. 24. 14:18
Contents --> OutputStream과 InputStream은 Java의 I/O 시스템에서 데이터를 순차적으로 읽고 쓰는 데 사용되는 기본적인 스트림 클래스입니다. 이 두 클래스는 각각 출력과 입력에 대한 추상적인 개념을 제공합니다. 차이점역할:InputStream: 데이터를 소스(파일, 네트워크, 메모리 등)에서 읽어 들입니다.OutputStream: 데이터를 대상(파일, 네트워크, 메모리 등)으로 씁니다.메소드:InputStream: 주로 read 메서드를 사용하여 데이터를 읽습니다. 대표적인 메서드는 다음과 같습니다:int read(): 한 바이트를 읽고, 0에서 255 사이의 값을 반환하거나, 더 이상 데이터가 없으면 -1을 반환합니다.int read(byte[] b): 바이트 배열 b..
-
org.springframework.core.io.Resource란 무엇인가 !!?자바웹프로그래밍/JAVA 2024. 7. 15. 22:02
org.springframework.core.io.Resource 인터페이스는 Spring 프레임워크에서 리소스 추상화를 제공하는 인터페이스입니다. 이 인터페이스는 파일 시스템, 클래스패스, URL 등 다양한 소스로부터 리소스를 쉽게 접근하고 읽을 수 있도록 합니다.주요 메서드Resource 인터페이스는 여러 메서드를 제공합니다. 그 중 주요 메서드는 다음과 같습니다:boolean exists(): 리소스가 존재하는지 확인합니다.boolean isReadable(): 리소스를 읽을 수 있는지 확인합니다.boolean isOpen(): 리소스가 현재 열려 있는지 확인합니다.URL getURL(): 리소스의 URL을 반환합니다.URI getURI(): 리소스의 URI를 반환합니다.File getFile():..
-
JVM의 메모리 영역에 대한 이해와 예시와 reflection의 이해자바웹프로그래밍/JAVA 2024. 7. 11. 13:52
Contents --> JVM의 메모리 영역은 각각의 역할이 있으며, 이를 이해하는 것은 Java 프로그램의 실행 방식을 이해하는 데 중요합니다. 각 메모리 영역의 역할과 이를 설명하기 위한 예제를 살펴보겠습니다. JVM 메모리 영역PC 레지스터 (Program Counter Register): 현재 실행 중인 JVM 명령의 주소를 가리킵니다. 각 스레드는 자신의 PC 레지스터를 가지고 있습니다.Java 스택 (Java Stack): 메서드 호출과 관련된 정보를 저장합니다. 각 스레드는 자신의 스택을 가지고 있으며, 각 스택 프레임은 메서드 호출, 지역 변수, 매개 변수, 그리고 연산 중간 결과를 포함합니다.네이티브 메서드 스택 (Native Method Stack): 네이티브 메서드 호출과 관련된 ..
-
jvm 클래스 로더 작동방식자바웹프로그래밍/JAVA 2024. 7. 11. 13:16
Contents --> JVM의 클래스 로더는 Java 애플리케이션에서 클래스를 메모리로 로드하고, 링크하고, 초기화하는 역할을 합니다. 이를 통해 필요한 클래스들이 적절히 사용될 수 있도록 합니다. 클래스 로더의 작동 방식을 이해하기 위해 다음과 같은 주요 단계와 구성 요소를 살펴보겠습니다 1. 클래스 로더의 유형JVM에는 세 가지 기본 클래스 로더가 있습니다:Bootstrap Class Loader: JVM의 핵심 클래스 로더로, JDK의 rt.jar와 같은 핵심 라이브러리를 로드합니다. 이는 네이티브 코드로 작성되어 있으며, JVM이 시작될 때 로드됩니다.Extension Class Loader: 확장 클래스 로더로, JRE의 lib/ext 디렉토리에 있는 클래스들을 로드합니다.Applicati..
-
java에서의 동시성 이슈 제어방법자바웹프로그래밍/JAVA 2024. 7. 10. 16:55
Contents --> 1.synchronized 키워드 사용2.Lock API 사용 (ReentrantLock 등)3.volatile 키워드 사용4.Atomic Classes (AtomicInteger, AtomicBoolean 등)5.Concurrent Collections (예: ConcurrentHashMap, CopyOnWriteArrayList 등)6.Executor Service와 Future 사용 1. synchronized 키워드 사용synchronized 키워드는 메서드 또는 블록 수준에서 동기화를 제공합니다. 특정 코드 블록에 동시에 하나의 스레드만 접근하도록 합니다. class Counter { private int count = 0; public synchroniz..
-
[JAVA] BufferedReader / BufferedWriter 왜 사용할까? (분석)자바웹프로그래밍/JAVA 2024. 2. 28. 14:59
Contents 1. BufferedReader / BufferedWriter 란? 여러가지 입출력 관련 개발을 할때 아래와 같은 코드를 많이 사용한다. BufferedWriter br = new BufferedWriter(new FileWriter(jsonFIle)); 익숙한 개발자는 그냥 그러려니 넘어가지만 개발에 익숙하지 않은사람들은 너무 복잡해보인다. 왜 클래스안에 또클래스를 넣고 그러지?? 이런생각으로 왜 이렇게 하는지 궁금해할수도있고 그냥 다들 이렇게 쓰니깐 나도 써야지 하고 넘어간다. 나 또한 그랬다. 선배개발자들이 써놓은 코드를 그대로 복사+붙여넣기 하면서 개발을 했기에 이유도 모른채 작성했다. 그래서 이참에 왜 이것을 써야하는지 그리고 실제로 예제를 통해 실험을해보면서 검증작업도 해볼려고..