java
-
Java equals() & hashcode()java 2019. 5. 13. 11:46
equals() public boolean equals(Object obj) 두 non-null object x, y에 대해 x.equals(y)는 x와 y가 "같은"지 체크한다. 여기서, "같다"라는 것은, 즉 true를 return하는 경우는 오직(if and only if) x, y가 같은 object를 참조하는 경우 뿐이다. hashCode() public int hashCode() 해당 object의 hash code value를 return한다. hashcode에는 아래와 같은 일반적인 규약이 있다. Whenever it is invoked on the same object more than once during an execution of a Java application, the hashC..
-
Java Lambdajava 2019. 5. 12. 13:33
개요 자바 람다식은 자바8부터 도입된 함수형 인터페이스를 구현한 코드를 간결하게 쓸 수 있게 해주는 문법이다. 여기서는 람다식의 문법 혹은 람다가 어떻게 도입되었는지, 얼마나 혁명적인지를 논의하기 보다는 람다식이 어떻게 컴파일되고 처리되는지 그 내부 구현을 기존 자바의 익명 클래스와 비교하면서 살펴본다. 내용 람다식의 특징 람다식이 어떻게 도입되었는지에 대한 설명은 생략하려 하나, 이후 논의를 위해서 특징적인 내용만 짚고 넘어가려 한다. 함수형 패러다임의 영향으로 자바에 람다식이 도입되기는 하였지만, 람다식은 자바의 새로운 함수 타입 체계는 아니다. 람다식은 단지 함수형 인터페이스(추상 메소드가 한 개만 존재하는 인터페이스)를 간결한 문법으로 구현할 수 있도록 한 것이다. '인터페이스'와 대등한 개념의 ..
-
Java 11 Featuresjava 2019. 5. 12. 13:27
개요 자바 11이 출시되면서 새롭게 등장한 feature들을 정리해본다. (OpenJDK 기준) 출시일: 2018-09-25 특징 1. Nest-Based Access Control class Test { static class Nest1 { private int nest1Var; } static class Nest2 { private int nest2Var; } } 위와 같이 nested class의 경우, 'Test', 'Nest1', 'Nest2'는 모두 'nestmate'이다. 기존 JVM 상에서는 nestmate끼리 private 멤버 변수를 접근하려면 컴파일러가 중간에 bridge method를 만들어야 했다. 따라서, reflection을 사용하여 nestmate class의 private ..
-
Java 10 Featuresjava 2019. 5. 12. 13:22
개요 자바 10에 새로 추가된 특징들을 알아본다. (OpenJDK 기준) * 출시일: 2018-03-20 특징 1. Local-Variable Type Inference 로컬 변수 타입을 'var'로 선언할 수 있게 되었다. 다음과 같은 케이스에만 적용된다. initializer와 함께 선언되는 로컬 변수 ex. var list = new ArrayList(); // infers ArrayList var stream = list.stream(); // infers Stream enhanced for-loop 내 index 변수 for(var user : users) { ... } traditional for-loop 내 로컬 변수 for(var i = 0; i