일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Web Server
- elasticsearch
- java
- jsp
- redis
- javascript
- it
- Git
- php
- Design Patterns
- JVM
- ReactJS
- IntelliJ
- ubuntu
- Spring Batch
- Spring Boot
- tool
- 요리
- Spring
- jenkins
- db
- AWS
- Gradle
- devops
- MySQL
- 맛집
- linux
- Oracle
- springboot
- laravel
- Today
- Total
목록Java & Kotlin/Java (107)
아무거나
Java Stream 이란 개념은 알고 있지만 한 번 정리가 필요할 것 같아서 해당 포스팅을 작성하게 되었다. Stream 우리는 수 많은 데이터를 다룰 때, 컬렉션이나 배열에 데이터를 담고 원하는 결과를 얻기위해 for 문이나 Iterator 를 이용하여 코드를 작성해왔다. 그러나 이러한 코드는 가독성과 재사용성이 떨어진다. 또한 Collection 이나 Iterator 와 같은 인터페이스를 활용하여 컬렉션을 다루는 방식을 표준화하기는 하였지만. 각 컬렉션 클래스에는 같은 기능의 메서드들이 중복해서 정의되어 있다. 예를 들면 List 를 정렬하려면 Collections.sort() 를 사용하거나 배열은 Array.sort() 를 사용해야 한다. 이러한 문제점들을 해결하기 위해서 Java8 부터 추가된것..
최근에 JVM 관련 대화를 나누던 도중 메모리 영역에 대한 잘못된 설명을 해버린적이 있다. 반성하는겸 다시 정리하고자 해당 포스팅을 작성하게 된다. Java 메모리(with. JVM) 정의 Stack: 정적 할당된 메모리 영역 boolean, char, short, int, long, float, double.. 등과 같은 데이터 즉, 원시타입의 데이터가 값이랑 같이 Stack 에 할당된다. Heap 영역에서 Object 타입 데이터의 참조값이 Stack 에 할당된다. Stack 의 메모리는 Thread 당 하나씩만 할당된다. 즉, 새로운 Thread 생성시 그 해당 Thread 에 대한 Stack 이 또 새롭게 생성된며 각 Thread 끼리는 Stack 영역을 접근 할 수 없다. 간단한 사용예시 pub..
Garbage Collection 기존글: https://bkjeon1614.tistory.com/249 GC(=Garbage Collection) 불필요한 또는 더이상은 사용하지 않는 객체들을 메모리에서 제거함으로써 Java 프로세스가 한정된 메모리를 효율적으로 사용할 수 있게 해준다. JVM Heap 구조 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다. // 10,000 건의 NewObject 객체는 Loop 내에서 생성되고, 사용되지만 Loop 밖에서는 더이상 사용할 일이 없어진다. 이런 객체들이 메모리를 계속 점유하고 있다면, 다른 코드를 실행하기 위한 메모리 자원은 지속적으로 줄어들기만 할 것이다. // GC는 이렇게 한번쓰이고 버려지는 객체들 즉, 접근 불가능 상태가 된..
Optional 먼저 Optional 을 설명하기전에 NPE(=NullPointerException) 에 대해서 알아보자. NPE(=NullPointerException) 개발시 예외처리중 가장 많이 발생하는 오류가 NPE(=NullPointerException) 이다. NPE 를 방어하려면 null 여부를 검사해야 하는데 변수가 많을시에 코드의 가독성과 유지보수성이 떨어지기 때문에 null 대신 초기값을 사용하길 권장하기도 한다. Optional? Java8 에서 처음 도입되었으며 Optional 클래스를 사용하여 NPE를 방지할 수 있도록 도와준다. Optional 이란 Null 이 될 가능성을 가진 값을 객체로 감싸는 래퍼 클래스이다. 또한 하기 코드처럼 value 에 값을 저장하기 때문에 값이 n..
JDBC란 자바 프로그램이 데이터베이스와 연결되어 데이터를 주고 받을 수 있게 해주는 프로그래밍 인터페이스 JDBC 작동 순서 JDBC 드라이버 로드 jdbc.drivers 라는 시스템 환경변수에 등록된 내용으로 함 class.forName() 메서드를 이용해서 직접 해당 클래스를 로드하는 방법 (대부분 사용) 데이터베이스 연결 Java.sql.Connection 에 정보를 입력하여 연결 Statement 생성 데이터베이스 연결로부터 SQL문을 수행할 수 있도록 해주는 클래스 Statement: 데이터베이스 연결로부터 SQL문을 수행할 수 있도록 해주는 클래스 PreparedStatement: SQL문을 미리 만들어주고 변수를 따로 입력하는 방식 (효율성이나 유지보수 측면에서 유리) SQL문 전송 {St..
Error: no Creators, like default construct, exist... (JSON을 파싱한 결과를 전달할 적절한 생성자를 찾지 못했을 때 발생하는 에러) 생성자로 JSON 속성값을 전달하는 방법 import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @Getter public class AccessLog { private final String title; private final String ip; private final String username; @JsonCreator public TestDTO( @..
애노테이션(Annotation) 정의: 코드 사이에 주석처럼 쓰이면서 특별한 의미, 기능을 수행하도록 하는 기술로 프로그램에게 추가적인 정보를 제공해주는 메타 데이터 용도 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공한다. 소프트웨어 개발툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공한다. 런타임 시 특정 기능을 실행하도록 정보를 제공한다. (보통 스프링에선 해당 용도로 많이 쓰인다.) 파일정의 @Target({ElementType.[적용대상]}) @Retention(RetentionPolicy.[정보유지되는 대상]) public @interface [어노테이션 이름] { ... } 예제 애노테이션 생성 [LogExecutionTime.java] import java.la..
리플렉션(Reflection) 정의: 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들을 접근할 수 있도록 해주는 자바 API 코드설명 public class Pizza { public void eat() { ... } } public class Main { public static void main(String[] args) { Object pizza = new Pizza(); pizza.eat(); // 컴파일 에러 } } 위의 코드에서 컴파일 에러가 나는 이유는 모든 클래스의 조상 클래스인 Object라는 타입으로 Pizza 클래스의 인스턴스를 담을 수는 있지만 사용 가능한 메소드는 Object의 메소드와 변수들 뿐이기 때문이다. 이와 같이 구체적인 타입의 클래스를 모를 때 ..
Java에서 Apache OpenOffice + JODConverter 를 활용한 PDF Converter 개발 Apache OpenOffice란 다양한 운영체제에서 사용하 수 있는 오피스 제품이다.(오픈소스) -> 현재는 버전업 속도가 빠른 리브레오피스(LibreOffice)를 추천 현재 라이브러리는 RedHat Linux 기준으로 작성되었다. OpenOffice v4.0.0 기준으로 작성되었다. (그 이상 버전에서는 jre 관련 에러가 표시되어 다운그레이드함) build.gradle에 의존성 추가 dependencies { ... // Windows compile group: 'org.jodconverter', name: 'jodconverter-core', version: '4.0.0-RELEASE..
public static void main(String[] args) { fileCopy("./file/copy/example1.txt", "./file/copy/example2.txt"); } public static void fileCopy(String origPath, String newPath) { try { // 원본 파일을 읽는다 FileInputStream fileInputStream = new FileInputStream(origPath); // 원하는 경로로 파일을 복사한다 FileOutputStream fileOutputStream = new FileOutputStream(newPath); int data = 0; while ((data = fileInputStream.read()) !..