JAVA,객체지향 44

SpringBoot/java/한글파일(.hwp) 이미지 데이터 바인딩하기

hml 파일에 이미지 바인딩 하기 BINDATALIST에 bindata 등록 hml에 이미지를 등록하기 위해서 위와 같이 BINDATALIST 태그를 찾아서 등록을 해 주어야 합니다 binData에 값이 결국 바인딩될 id값이 됩니다. bindata 등록 위에서 list에 등록 하셨다면 파일 가장 하단에 다음과 같은 태그를 작성해서 myTag로 위치를 지정한다음 이미지파일을 base64로 인코딩해서 replace시켜주면 끝입니다. list에 등록해 놓은 "2" 와 같은 값 java 코드 자세한 코드는 위 링크에 있습니다. 해당 글에서는 이미지 바인딩하는 부분만 작성돼 있습니다. String utf8String = Base64.getEncoder().encodeToString(imageBytes); Nod..

JAVA,객체지향 2023.09.06

java map안에 map 찾기

map안에 map 찾기 Map map = new HashMap(); Map map2 = new HashMap();map2.put("test", "123"); map2.put("test2", "hello"); map.put("resultMap", map2); ..map.get("resultMap")이런식으로하면 {test=123, test2=hello}이렇게 꺼내지긴하겠지만그안에있는 test나 test2를 꺼낼려면 어떻게 할까? 답 String o = ((HashMap) result.get(arg)).get("test").toString(); 즉 맵안에 맵이 있으니 꺼낼때도 맵을 한번 감싸서 꺼내면 되는 것 이였습니다..

JAVA,객체지향 2023.09.06

java Enum , 열거형 비교

Enum은 equals 로 비교할 필요가 없다?! enum은 equals 메서드를 쓸 필요가 없다고 하셨습니다. 열거 타입은 인스턴스들이 고정되어 있으므로 간단하게 ==을 사용하면 됩니다. equals 를 실행한다고 해도 결국 == 검사를 수행하게 됩니다. 게다가 == 비교를 하는 편이 코드도 간단해지고 직관적이기 때문에 상황에 따라 선택해서 컨벤션을 맞추는 것이 좋겠습니다. Enum은 toString도 구현할 필요가 없다?! 열거 객체의 이름 주는 toString 메서드가 자동으로 만들어지기 때문입니다. 그리고 toString의 반대 역할을 하는 valueOf 메서드도 있다는 것을 기억해 두면 좋겠습니다. 그리고 존재하긴 하지만 사용하는 것을 조심해야 하는 메서드로 ordinal 이 있습니다.

JAVA,객체지향 2023.09.06

JAVA /기본 가비지 컬렉터 튜닝

기본 가비지 컬렉터 튜닝 비록 가비지 컬렉터 알고리즘 마다 힙을 처리하는 방식은 다르지만 기본적인 환경 설정 매개변수는 공유합니다. 힙 크기 정하기 가비지 컬렉터의 첫번째 기본 튜닝은 애플리케이션 힙 크기 입니다. 이는 힙의 제너레이션의 크기에 영향을 주는 고급 튜닝입니다. 대부분의 성능 문제에서 힙크기를 결정하는 것은 균형의 문제 입니다. 힙이 너무 작다면 프로그램 가비지 컬렉터를 수행하는 시간이 너무 길고 애플리케이션 로직을 수행하는데 충분한 시간을 쓸 수 없습니다. 하지만 단순히 매우 큰 힙을 쓰는것도 올바르지 않습니다. 가비지컬렉터 중단 시간은 힙의 크기에 좌우 되므로 힙의 크기가 늘어난다면 중단 시간도 늘어납니다. 즉 중단은 덜 일어나지만 한번 일어나면 크게 지연될 수 있습니다. 그리고 매우 큰..

JAVA,객체지향 2023.09.06

JAVA /가비지 컬렉터 알고리즘 정리/ 가비지 컬렉터 알고리즘 선택

JVM의 가비지 컬렉터 알고리즘 4개 시리얼 가비지 컬렉터 네개중 가장 단순한 알고리즘 애플리케이션이 클라이언트 클래스 머신에서 수행되고 있다면 디폴트 컬렉터 입니다. 시리얼 컬렉터는 힙을 처리하기 위해 단일 스레드를 사용합니다. 마이너나 풀 가비지컬랙션를 사용한다면 애플리케이션스레드는 모두 중지됩니다. 풀 가비지컬랙션가 일어나는 동안에는 올두 제너레이션은 완전히 압축될 것입니다. 시리얼 컬렉터는 -XX:+UseSerialGC 플래그를 통해 사용할 수 있습니다. 대부분의 JVM 플래그와 달리 시리얼 컬렉터는 + 부호를 - 부호로 바꾼다면 비활성화 됩니다. 또는 시리얼 컬렉터가 다폴트인 시스템에서 다른 가비지컬랙션 알고리즘을 명시한다면 비활성화 됩니다. 처리율 컬렉터 서버 클래스 머신 (다중 CPU 유닉스..

JAVA,객체지향 2023.09.06

JAVA 가비지 컬렉션

가비지 컬랙션이란? 가비지 컬렉션 튜닝은 자바 애플리케이션 성능을 개선하기 위해 할 수 있는 일 중 가장 중요합니다. 현재 JVM에서 사용할 수 있는 주요 가비지 컬렉터는 단일 CPU 머신에서 사용하는 시리얼 컬렉터(serial collector), 처리율 병렬 컬렉터(parallel collector), 동시 병렬 컬렉터(concurrent mark-sweep collector), G1(Garbage First) 컬렉터가 있습니다. 자바의 가장 매력적인 기능 중 하나는 개발자가 명시적으로 객체의 생명 주기를 관리할 필요가 없다는 점ㅣㅂ니다. 객체를 필요할때 생성하고 더이상 사용되지 않을 때 JVM이 자동으로 객체를 해체 시킵니다. 기본적으로 가비지컬렉터는 더이상 사용되지 않는 객체를 찾아서 그 객체와 ..

JAVA,객체지향 2023.09.06

JAVA JIT 컴파일러/ 역최적화 / 티어드 컴파일 레벨

역최적화 역최적화는 컴파일러가 선생한 컴파일의 일부를 원상태로 되돌리는 것을 의미합니다. 이에 대한 영향은 컴파일러가 대상 코드를 다시 컴파일 할 수 있을 때 까지 애플리케이션의 성능은 감소합니다. (그렇게 크지는 않다) 역최적화는 코드가 진입 불가와 좀비화일때 발생합니다. 진입불가 코드에 진입하지 못하게 만드는 요인은 두 개가 있습니다. 하나는 클래스와 인터페이스가 동작하는 방식에 기인한 것이고 다른 하나는 티어드 컴파일의 구현 세부 사항입니다. 주식 어플리케이션은 인터페이스로 StockPriceHistory를 가지고 있습니다. 이 인터페이스의 구현체로 StockPriceHistoryImpl과 로그를 쌓기 위한 인터페이스 구현체로 StockPriceHistoryLogger가 있습니다. 서블릿 코드에서는..

JAVA,객체지향 2023.09.06

JAVA JIT 컴파일러 /고급 컴파일러 튜닝 정리

고급 컴파일러 튜닝 컴파일이 동작하는 방법에 대한 상세 내역의 일부를 다루며 처리 과정에서 영향을 줄 수 있는 부가적인 튜닝을 소개하겠습니다. 하지만 이 값을 변경한다고 크게 달라지는 부분은 없습니다. 컴파일 스레드 컴파일 임계치에서 메소드가 컴파일 대상이 되면 컴파일 큐에 들어가 대기하게 됩니다. 큐는 한개 이상의 백그라운드 스레드에 의해 처리됩니다. 이건 컴파일이 비동기 프로세스로 대상 코드가 컴파일 중인 동안에도 계속해서 프로그램이 실행된다는 의미입니다. 메소드가 일반 컴파일을 한다면 다음 메소드를 호출하는 경우 컴파일된 메소드를 실행할 것입니다. 루프가 OSR을 통해 컴파일 된다면 루프가 다음 반복될 때 바로 컴파일된 코드를 실행합니다. 컴파일 큐는 FIFO 방식은 아닙니다. 호출 카운터 가 더 ..

JAVA,객체지향 2023.09.06