github.com/AdoptOpenJDK/openjdk-jdk11/blob/master/src/java.base/share/classes/java/lang/String.java AdoptOpenJDK/openjdk-jdk11 Mirror of the jdk/jdk11 Mercurial forest at OpenJDK - AdoptOpenJDK/openjdk-jdk11 github.com github.com/AdoptOpenJDK/openjdk-jdk16/blob/master/src/java.base/share/classes/java/lang/String.java AdoptOpenJDK/openjdk-jdk16 JDK16 mirror from https://github.com/openjdk/jdk16 -..
length() 메서드부터 이제 파악하기 시작한다. 보다가 느낀 게 있는데 JDK 8 버전의 코드와 JDK11 의 코드가 다르다는 점이다. 가령 regionMatch의 경우에는 8의 경우 그저 문자열 지역을 비교하지만 11에서는 latin1 인지와 UTF8의 여부를 체크하여 비교하는 로직이 존재한다. 메서드 중 ignoreCase 가 들어가는 경우 toLowerCase(char.toUppserCase()) 의 경우를 비교하는데 이는 uppderCase의 경우 아래와 같은 경고가 있어서 그 사유를 알 수 있다. // Unfortunately, conversion to uppercase does not work properly // for the Georgian alphabet, which has stran..
무려 613줄까지가(주석 포함) 새성자 관련 구문이다. 생성자는 매우 다양한데, 일반 char[], int[], byte[], StringBuffer, StringBuilder에 이르는 다양한 인자를 기반으로 생성된다. 각각은 배열인 만큼 offset, count 등의 추가 변수를 통한 오버라이딩을 통하여 다양한 변인이 존재한다. 이 때 int[] 를 받는 생성자는 BMP, Supplementary Character를 처리하기 위한 로직이 추가로 존재한다. 따라서 실제 리턴되는 문자열 즉 char[]의 길이는 적용된 부분 배열(subarray of int[])의 길이보다 길어질 수 있다. byte[] ascii를 받는 생성자는 Depreicated 되어 있는데 Charset 혹은 String charse..
3169 줄. 주석 설명부터 차근 살펴보았다. 그런데 그 내용 중 유니코드가 U+000000 ~ U+10FFFF 까지 지원하는데 자바의 char는 UTF-16 체계이므로 저 범위를 커버하지 못하기에 이를 표현하기 위해 surrogate pairs를 사용한다는 내용이 있었다. surrogate pairs가 무엇인가.. 용어에 대한 정리가 필요했다. 초기에 유니코드는 16비트로 표현하도록 설계되었다. 그러나 동아시아권의 문자를 체계적으로 표현하기 위해 32비트까지 확장되었는데 이 확장을 기준으로 기존 16비트로 표현 가능한 범위 U+0000 ~ U+FFFF 사이의 문자를 Basic Multilingual Plane(BMP)라 부른다. 그리고 확장된 영역 U+10000 ~ U+10FFFF 의 문자를 Suppl..
AmazonWebserviceClientFactoryBean 은 AbstractFactoryBean를 상속하고 있으며, 이 따라서 메서드에는 createInstance()라는 메서드가 존재하며 이를 Override 하고 있다. @Override protected T createInstance() throws Exception { String builderName = this.clientClass.getName() + "Builder"; Class className = ClassUtils.resolveClassName(builderName, ClassUtils.getDefaultClassLoader()); Method method = ClassUtils.getStaticMethod(className, "s..
명시된 클래스가 클래스패스에 있는 경우에 동작하는 조건 빈.
java에 javax.annotation.Generated 가 있다. 사람이 만든 소스가 아닌, 다른 소스 자동 생성기가 생성한 코드를 지칭할 때 사용하는 어노테이션으로 확인된다. @Override 가 이 메서드는 상위 메서드를 확장하고 있음을 명시하는 것과 같다. 가령 Protobuf의 컴파일을 통해서나 기타 다른 도구를 통하여 XML 설정으로 Java 클래스를 생성했다거나 하는 식으로 도출된 Java 코드에 대하여 이 코드는 사용자가 직접 타이핑 한 것이 아닌, 기계적으로 생성되었다고 명시하는 의의를 지닌다고 본다.
Spring Bean 의 Lite Mode 가 있다. Lite mode 라 함은 Cglib 를 사용하여 바이트 코드 조작을 하지 않음을 의미한다. @Configuration 어노테이션을 지정하게 되면 Cglib가 사용되며 메서드 호출은 모두 1회만 일어나도록 바이트 코드가 수정된다. @Component 어노테이션을 지정하게되면 Lite Mode 로 동작하여 우리가 예상한 대로 코드가 수행된다. 이 때, Configuration 에 proxyBeanMethods 란 설정값을 false로 줄 수 있는데, 이 경우 Lite Mode 라 불리는 상태가 되며 Cglib를 통한 메서드 프록시가 적용되지 않는다. @Configuration public class ConfigurationClass { @Bean pub..
[출처] 람다식과 함수 스트림과 같은 새 기능의 변화가 Java 8에서 두드러졌기에 이에 관련한 수많은 소개 글과 학습가이드가 제공된다. 그러나 이 외에도 JDK 8 API에는 기존하던 클래스들에도 상당히 유용한 기능 향상이 있었다. 본 글에서는 Java 8 API에서 나타난 이러한 작은 변화들에 대해서 소개하고자 한다. 각각을 쉬운 예제와 함께 살펴보자. 고로 Strings, Numbers, Math 그리고 Files에 대해 깊이 알아봅세. Slicing Strings join()과 chars라는 새 메서드가 추가되었다. 첫번째 메서드는 여러 문자열을 단 하나의 문자열로 치환시킨다. 이때 인자로 두어진 구분자(delimiter)를 이용한다. String.join(":", "foobar", "foo", ..
으아, 귀찮음을 이겨내고 수행한다. ConcurrentHashMap ConcurrentMap 인터페이스에서 설명된 메서드들은 인터페이스의 구현체에서 모두 사용가능하다. 이를 가장 정말로, 최고로 유용하게 구현한 것중 지대하게 중요한 구현체가 있는데 그것이 바로 ConcurrentHashMap이다. 이 구현체는 맵에 대해 병행 연산을 수행하기 위해 더 진보된, 강화된 새 메서드들을 탑재하고 있다. 병행 스트림(Parallel streams)과 마찬가지로 이러한 메서드들은 자바 8에서 제공되는 ForkJoinPool.commonPool()을 통한 특별한 ForkJoinPool을 사용한다. 이 풀은 가용가능한 코어 수에 적합한 미리 정의된 병행유사성(?;parallelism;아 어휘의 한계)을 사용한다. 4개..