이론
동등성 비교를 위해 equals(), hashCode() 를 함께 재정의하는 이유
일단 동일성과 동등성에 대해서 한번 정리해보자면, 동일성 객체의 주소값을 비교하여 판별 동등성 객체의 값을 비교하여 판별 두 객체의 주소가 달라서 다른 객체라도 값이 같으면 동등함. 동등성을 지키기 위해서 해야할 것 equals() 재정의 기본 동작은 == (동일성 비교) 재정의를 통해 값 비교로도 결과를 반환하게 해야함 hashCode() 재정의 기본 동작으로 인스턴스가 저장된 가상머신의 주소를 반환함 Collection(HashSet, HashMap, HashTable) 의 경우 hash 를 이용하기에 equals() 만 재정의하면 같은 값이어도 주소가 달라 동등하지 않다고 판단하는 경우가 있을 수 있음.
오버로딩과 오버라이딩
오버로딩 같은 이름의 메서드를 매개변수의 타입, 갯수에 따라 여러 개로 정의할 수 있는 것 매개변수의 타입, 갯수가 다르다면 반환값을 다르게도 정의 가능함 반환값만 다르게는 안됨 매개변수가 다르다면 접근제어자도 다르게 지정 가능함 접근제어자만 다르게는 안됨 오버라이딩 상위 클래스의 메서드를 재정의하는 것 메서드의 이름, 매개변수, 반환값이 모두 같아야함 접근제어자의 경우 상위클래스보다 더 넓거나 같은 범위로만 지정 가능함
원시 타입과 참조 타입
원시타입과 참조타입을 비교해서 설명해보겠습니다. 원시타입 스택에서 메모리 공간이 할당되고 값을 저장합니다. null을 허용하지 않습니다. 값이 없는 경우 디폴트로 지정된 값을 담습니다. 참조타입 주소값은 스택에, 실제값은 힙에 존재합니다. 참조타입은 최소 2번의 메모리 접근을 해야해서 원시타입보다 접근 속도가 느립니다. null을 허용합니다.
Checked exception 과 Unchecked exception
Unchecked exception 는 런타임 예외를 상속받는 예외이고 Checked exception는 그 외의 예외들을 말합니다. Checked exception 는 컴파일 시점에 확인되므로 예외 처리(try catch 처리를 하거나 throws 를 명시) 가 강제됩니다. Checked exception의 본래 의도는 예외가 발생하면 발생한 지점에서 해결하고자 함입니다. 그렇기 때문에 예외 발생 시 트랜잭션이 롤백되지 않습니다. 반대로 Unchecked exception 은 롤백됩니다. 다만, Checked exception 을 실제로는 발생 지점에서 해결할 수 있는 경우가 많지 않아 예외를 상위로 던지는 경우가 빈번하게 일어납니다. 또, 예외를 던진다는 것을 명시해줘야하므로 코드량이 많아지고, 호출..
BufferedReader, BufferedWriter 사용 후 close 해야하는 이유
가비지 컬렉터는 외부에서 객체를 참조하는 변수가 없을 때 가비지로 판단하고 삭제합니다. 메서드가 끝나는 순간 객체를 참조하는 것이 없기에 없애버리기에 가비지 컬렉터에 의해서 bufferedreader가 정리되긴 하지만, 가비지 컬렉터로 정리되기전에 bufferedreader가 연속으로 사용되면 정상적으로 작동하지 않을 수 있습니다. 특히, BufferedWriter의 경우가 그럴 수 있다고 하는군요. try-with-resource 를 이용하면 깔끔하게 자원을 해제할 수 있습니다. try() 안에 선언된 객체들을 try 문이 끝날 때 자동으로 해제해주는 기능을 합니다. 다만 모든 객체들에 대해서 해당되는 것은 아니고, 인터페이스 AutoCloseable 을 구현한 객체만 해당됩니다.