본문 바로가기

JAVA/[JAVA] 바구니51

Increasing Code Cache Increasing the Code Cache Size tier 4로 코드를 컴파일하는 경우 해당 코드가 이제 Code Cache에 추가되는 것을 안다. 다만 Code Cache의 크기는 제한적이라는 문제가 하나 있다. Julio Falbo에 따르면 많은 양의 메서드가 tier 4에 추가되는 경우, 다음 코드를 위해서 몇 개의 코드는 Code Cache에서 제거된다는 것이다. 제거된 코드블록은 다시 다른 코드블록을 제거하고 다시 추가되는 반복적인 상황이 발생한다. ( 해당 글에는 code cache size가 가득 찬 경우 코드블록이 추가될 때 어떤 원리나 순서로 삭제된다는 설명글이 없다. ) 다른 말로 하면 거대한 애플리케이션을 운영하면서 level 4로 컴파일된 코드블록들은 지속적으로 code cac.. 2023. 2. 20.
Comparable Object.equals에 더해서 순서까지 비교할 수 있으며 Generic을 지원한다. this가 compareTo에 전달된 객체보다 작으면 음수, 같으면 0, 크다면 양수를 리턴한다. 반사성, 대칭성, 추이성을 만족해야 한다. 반드시 따라야 하는 것은 아니지만 x.compareTo(y)==0이라면 x.equals(y)가 true여야 한다. 구현 방법 자연적인 순서를 제공할 클래스에 implements Comparatable 을 선언한다. compareTo 메서드를 오버라이드 한다. public class CompareNumber implements Comparable{ @Override public int compareTo(CompareNumber o) { return 0; } } compareTo 메.. 2022. 11. 14.
equals 정의 우리가 만든 객체는 눈으로 보기엔 논리적으로 동등할지 몰라도 메커니즘 상 처음부터 서로 같은 객체는 없다. 생성 시 고유한 메모리 주소 값을 참조하는 객체로 자바에선 해시 코드값으로 가볍게 확인할 수 있다. 실제로 Hashcode와 equals를 사용해 동등하다고 판단하는 HashMap을 볼 수 있다. 또한 여러 객체들이 논리적으로 동등한 지 판단하여 분기하는 경우도 많다. 최근 나는 엔티티와 별도의 객체를 비교하는 일이 필요했다. 하지만 엔티티에 equals를 재정의하는 일은 너무 위험부담이 커서 추가 로직을 통해 처리하였다. 아마 이는 equals를 잘 정의하는 법을 몰랐기 때문이 아닐까? 그래서 오늘은 이펙티브 자바의 equals 관련 내용을 공부하고 자려고 한다. equals 메서드에는 일반 규약.. 2022. 11. 10.
finalizer와 cleaner 사용을 피하라 finalizer와 cleaner는 즉시 수행된다는 보장이 없다. finalizer와 cleaner는 실행되지 않을 수도 있다. finalizer 동작 중에 예외가 발생하면 정리 작업이 처리되지 않을 수도 있다. finalizer와 cleaner는 심각한 성능 문제가 있다. finalizer는 보안 문제가 있다. 반납할 자원이 있는 클래스는 AutoCloseable을 구현하고 클라이언트에서 close()를 호출하거나 try-with-resource를 사용해야 한다. 객체가 사용하는 자원을 반납하지 않는다면 반드시 오류가 발생한다. 이래서 리소스를 반납하기 위해 제공되는 것이 finalizer, cleaner를 제공한다. finalizer finalizer는 Object에서 구현하고 있는 메서드이다. @O.. 2022. 11. 7.
Exception 예외 기본 계층 Throwable : 최상위 예외 Error : 애플리케이션에서 복구 불가능한 시스템 예외이다. 이 예외를 잡으려고 해서는 안된다. - 상위 예외를 catch로 잡으면 그 하위 예외까지 함께 잡는다. 따라서 throwable 예외를 잡으면 안 되는데 이는 Error 예외도 함께 잡을 수 있기 때문이다. 따라서 Exception부터 필요한 예외로 생각하고 잡는다. Exception : 컴파일러가 체크하는 체크 예외이다. 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외로 Exception과 그 하위 예외는 모두 체크 예외이다. 단 RuntimeException은 예외로 한다. RuntimeException : 컴파일러가 예외를 던졌는지 잡앗는지 체크하지 않는 언체크 예외이다. Ru.. 2022. 9. 25.
SSL/TLS 서버 통신 (JSSE, TrustManager) JSSE Java Secure Socket Extensing 통칭 JSSE는 안전한 인터넷 통신을 가능하게 하는 자바 패키지 및 FrameWork입니다. TLS/SSL을 구현한다라는 것은 응용 계층의 프로토콜인 HTTP, SMTP, FTP, Telent을 사용하는 클라이언트와 서버 간의 데이터의 안전한 통신을 보장하는 안전한 네트워크 애플리케이션을 개발하는 것과 같습니다. 이 JSSE 패키지에는 java.security, java.net 를포함하고 있습니다. 또한 javax라는 표준 확장 패키지도 존재하고 있습니다. * Extension package sun사에서 공식적으로 간주한 패키지를 표준 확장 패키지라하며 그렇지 않은 것을 비표준 패키지라고 합니다. 표준 확장 패키지에는 보통 java 뒤에 x가 .. 2021. 11. 6.
짧)[JAVA] 객체지향 세계 보호되어 있는 글 입니다. 2021. 4. 25.
[JAVA] JAVA Serialize 프로젝트를 보게 되면 심심치 않게 보는 코드가 implements Serializable입니다. 저는 아무렇지도 않게 넘기다가 문득 궁금해져서 한번 파보려고 합니다. 자바에서 직렬화란 자바 시스템에서 사용되는 객체 혹은 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트 형태로 데이터를 변환하는 기술과 역으로 바이트 형태의 데이터를 객체로 바인딩시켜주는 것을 말합니다. 사실 자바스크립트에서도 JSON.parse를 통해 객체를 json으로 직렬 화하는 코드를 많이 보셨을 겁니다. JSON과 마찬가지로 자바 직렬 화도 하나의 포맷 형태로 생각할 수 있습니다. 어떤 데이터 직렬 화가 존재할까요? CSV : 표 형태의 다량의 데이터를 직렬 화하는데 가장 많이 쓰이는 포맷으로 , (콤마)를 기준으로 데이터.. 2021. 4. 23.
[JAVA] Stream 여기서 말하는 스트림은 자바 8에서 추가된 Stream API가 아니다. 자바에서는 파일이나 콘솔의 입출력을 직접 다루지 않고, 스트림이라는 흐름을 통해 다룬다. 스트림이란 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름을 의미합니다. 즉 스트림은 운영체제에 의해 생성되는 가상의 연결 고리를 의미하며, 중간 매개자 역할을 한다고 한다. 입출력 스트림 스트림은 한 방향으로만 통신할 수 있으므로, 입력과 출력을 동시에 처리할 수는 없습니다. java.nio는 채널을 제공해주는 데 이 채널은 입출력을 동시에 처리할 수 있는 양방향 채널입니다. 하지만 스트림에서는 단 방향만통신할 수 있기 때문에 입력 스트림과 출력 스트림으로 구분됩니다. 자바에서는 java.io 패키지를 통해 InputStream과 Out.. 2021. 4. 19.
[JAVA] 디자인 패턴 github.com/yusungill/design_Pattern/commits/master yusungill/design_Pattern Contribute to yusungill/design_Pattern development by creating an account on GitHub. github.com 2021. 4. 13.