자바에서 Collection을 사용하는 단순한 연산이 특정 상황에서 비효율적일 수 있기 때문에 hashCode를 사용한다. 예를 들면 다음과 같다. List words = Arrays.asList("Welcome", "to", "junwoo"); if (words.contains("junwoo"){ System.out.println("Junwoo is in the list"); } "junwoo"가 있는지 확인하는 위의 코드는 List의 사이즈가 커질수록 비효율적인 선형탐색 과정을 거친다. hashCode의 이해 hashCode는 hashing 알고리즘에 의해 만들어진 Integer 값을 리턴한다. 똑같은 Object는 반드시 똑같은 hashCode를 리턴해야 하지만 반대는 필수적이지 않다. 두 번째의 ..
🌈 Programming/Java
try - with - resources 는 try(..) 문에서 선언된 객체들에 대해서 try가 종료될 때 자동으로 자원을 해제해주는 기능이다. 주로 외부 자원인 파일 관련 객체와 socket Handler 객체와 같은 자원들은 try - catch - finally 문을 사용하여 마지막에 다 사용한 자원을 해제한다. AutoCloseable은 try에 선언된 객체가 AutoCloseable을 구현했더라면 Java는 try구문이 종료될 때 객체의 close() 메소드를 호출해 준다. Java6에서 리소스 사용 및 해제하는 방법을 한번 살펴보고, try-with-resources로 동일한 코드를 리팩토링해보자. 1. AutoCloseable 사용 방법 다음은 try - catch - finally 를 사..
상수를 선언할 때 private final로 선언하면 되는데 굳이 private static final 선언하는 이유가 뭘까 결론부터 말하자면 초기화 한 값을 끝까지 유지하기 위해서이다. (값을 불변으로 만들기 위해) 만약 private final 로 선언한다면 직접적으로 값을 참조할 수 없지만 생성자를 통해 값을 참조할 수 있다. 하지만 private static final 로 선언한다면 생성자를 통해 값을 참조할 수 없다. (이때 private static final 변수는 반드시 초기화되어 있어야 한다.) 절대 해당 값을 바꾸지 않겠다는 표현과 유사하다. private static final 을 선언한 변수를 사용하면 재할당하지 못하며, 메모리가 한번 올라가면 같은 값을 클래스 내부의 전체 필드, ..
JAVA 언어 사양에 따라 JAVA의 메서드는 한 번에 하나의 값만 반환할 수 있다. 따라서 메서드에서 여러 값을 반환하는 것은 이론적으로 JAVA에서 불가능하다. 이에 JAVA는 몇 가지 현명한 해결 방법으로 원하는 작업을 수행할 수 있게 해주었는데, 그 방법은 다음과 같다. 1. 사용 POJO (Plain Old Java Object) 클래스 인스턴스 이것은 JAVA의 메소드에서 여러 값을 리턴하는 데 가장 일반적으로 사용되는 메소드이다. 아이디어는 반환하려는 모든 필드를 포함하는 클래스의 인스턴스를 반환하는 것이다. *POJO란 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다. 그러한 POJO에 애플리케이션의 핵심로직과 기..
‘JAVA에서 두 개의 오브젝트가 같은가’ 라는 말은 주의해서 사용해야 한다. JAVA에서는 두 개의 오브젝트가 완전히 같은 동일한 (Identical) 오브젝트라고 말하는 것과, 동일한 정보를 담고 있는 (Equivalent) 오브젝트라고 말하는 것은 분명한 차이가 있다. 전자는 동일성(Identical) 비교라 하고, 후자는 동등성(Equivalent) 비교라고 한다. 동일성은 == 연산자로 동등성은 equals() 메소드를 이용해 비교한다. 두 개의 오브젝트가 동일하다면 사실은 하나의 오브젝트만 존재하는 것이고 두 개의 오브젝트 레퍼런스 변수를 갖고 있을 뿐이다. 두개의 오브젝트가 동일하지는 않지만 동등한 경우에는 두 개의 각기 다른 오브젝트가 메모리상에 존재하는 것인데, 오브젝트의 동등성 기준에 ..