본문 바로가기

Java6

ZipOutputStream vs ZipArchiveOutputStream Java에서 ZIP 파일을 생성을 지원하는 라이브러리로 ZipOutputStream과 ZipArchiveOutputStream이 있다.ZipOutputStream은 Java 표준 라이브러리로 기본적인 ZIP 압축 기능을 제공하고, ZipArchiveOutputStream은 Apache Commons Compress 라이브러리이며 다양한 압축 수준과 ZIP64 포맷을 지원한다. ZipOutputStreamJava 표준 라이브러리로 ZIP 파일을 생성하고 데이터를 압축하는 스트림이며 파일 또는 디렉토리를 ZipEntry에 추가하고, 데이터를 압축하여 ZIP 파일로 저장한다. 기본적인 ZIP 압축 기능만 제공하고 압축 수준을 조절할 수 없어 간단하고 기본적인 ZIP 파일 생성에 적합하다.ZIP64 포맷을 지원.. 2024. 11. 8.
FileInputStream vs BufferedInputStream FileInputStreamFileInputStream 은 파일을 읽을 때 버퍼링 없이 직접 파일에서 데이터를 읽는다. 파일 시스템에서 매번 직접 가져오기 때문에 I/O 접근이 많아 성능이 다소 느릴 수 있다.매번 파일에서 데이터를 읽기 위해 파일 시스템과의 통신이 필요하기 때문에 CPU가 더 많은 작업을 한다. 이 과정에서 불필요한 오버헤드가 발생하여 CPU 사용량이 높아 질 수 있다.InputStream inputStream = new InputStream(file);BufferedInputStreamBufferedInputStream 은 내부 버퍼를 사용하여 파일을 읽어 올 때 한번에 여러 바이트를 읽어온다. 읽어온 버퍼를 통해 데이터를 제공하며 파일 시스템에 대한 I/O 호출을 줄일 수 있다.버퍼.. 2024. 11. 3.
JDK Dynamic Proxy와 CGLIB JDK Dynamic Proxy와 CGLIB 모두 프록시 객체를 동적으로 만들어 낼 수 있다.JDK Dynamic Proxy는 Java가 기본적으로 제공하는 동적 프록시 기술이며 CGLIB는 오픈소스 기술이다. JDK Dynamic Proxy는 인터페이스를 구현(Implement)하고, CGLIB는 구체 클래스를 상속(extends)해서 프록시를 생성한다.SpringBoot AOP에서는 CGLIB를 Default로 사용한다.JDK Dynamic Proxy인터페이스 기반으로 프록시를 동적으로 만들어 주기 때문에 인터페이스가 필수이다.InvocationHandler 인터페이스를 구현해서 작성하면 된다.@Slf4jpublic class TimeInvocationHandler implements Invocati.. 2024. 7. 30.
Java Collections Framework Java CollectionJava에서 Collections이란 데이터의 집합, 그룹을 의미한다.JFC(Java Collections Framework)는 데이터, 자료구조인 컬렉션과 이를 구현하는 클래스를 정의하는 인터페이스를 제공함Java Collections Framework 상속 구조 Collection순서나 집합적인 저장 공간List: 순서가 있고 중복을 허용하는 저장 공간LinkedListStackVectorArrayListSet: 순서가 없는 중복을 허용하지 않는 집합적인 공간 HashSetSortedSet (TreeSet)Map키와 값으로 데이터 핸들Hashtable: 동기화 보장하는 Map 계열의 클래스HashMap: 동기화 보장하지 않는 Map 계열의 클래스SortedMap: 정렬을 위.. 2020. 3. 25.
(Java) JVM 메모리 구조 JVM 메모리 구조자바 가상 머신(JVM, Java Virtual Machime)이란 자바 바이트 코드를 실행시키기 위한 가상의 기계이다. 자바로 작성된 모든 프로그램은 자바 가상 머신에서만 실행될 수 있기 때문에 자바 가상 머신이 설치되어 있어야 한다. Class Loader클래스 파일들을 엮어서 JVM이 운영체제로부터 할당받은 메모리영역인 Runtime Data Area로 적재하는 역할Execution EngineClass Loader에 의해 메모리에 적재된 클래스들을 기계어로 변경해 명령어 단위로 실행하는 역할두가지 방식이 있음인터프리터(Interpreter): 명령어를 하나씩 실행JIT(Just-In-Time) 컴파일러: 적절한 시간에 전체 바이트 코드를 네이티브 코드로 변경해서 Execution.. 2020. 3. 18.
(Java) 객체지향 프로그래밍 객체지향 프로그래밍(Object Oriented Programming)프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법 객체지향 프로그래밍 장점코드 재사용이 용이클래스 상속을 통해 확장해서 사용할 수 있음유지보수가 쉬움클래스 내부 멤버의 변수나 메서드 부분만 수정하면 됨대형 프로젝트에 적합클래스 단위로 모듈화시켜 개발할 수 있어 대형 프로젝트에서 업무 분담하기 쉬움객체지향 프로그래밍 단점처리속도가 상대적으로 느림객체가 많으면 용량이 커짐설계시 많은 시간과 노력이 필요기본 구성 요소클래스같은 집단에 속하는 속성(attribute)과 행위(behavior)를 변수와 메소드로 정의한 것메모리에 할당되지 않은 상태객체클래스.. 2020. 3. 18.