이론/Java
BufferedReader, BufferedWriter 사용 후 close 해야하는 이유
가비지 컬렉터는 외부에서 객체를 참조하는 변수가 없을 때 가비지로 판단하고 삭제합니다. 메서드가 끝나는 순간 객체를 참조하는 것이 없기에 없애버리기에 가비지 컬렉터에 의해서 bufferedreader가 정리되긴 하지만, 가비지 컬렉터로 정리되기전에 bufferedreader가 연속으로 사용되면 정상적으로 작동하지 않을 수 있습니다. 특히, BufferedWriter의 경우가 그럴 수 있다고 하는군요. try-with-resource 를 이용하면 깔끔하게 자원을 해제할 수 있습니다. try() 안에 선언된 객체들을 try 문이 끝날 때 자동으로 해제해주는 기능을 합니다. 다만 모든 객체들에 대해서 해당되는 것은 아니고, 인터페이스 AutoCloseable 을 구현한 객체만 해당됩니다.
상수와 static final
상수는 어떤 것일까? 사용하는 모두에게 같은 값이어야함. 값이 변하지 않아야 함. 왜 상수를 선언할 때 static final 키워드를 붙일까? static의 의미 static이 아닌 데이터들은 런타임 시점에 동적으로 메모리에 할당되는데 static 키워드가 붙은 데이터는 컴파일시점에 가비지컬렉터의 관리 밖인 static영역에 할당되므로 실행 직후부터 끝날때까지 쭉 유지됨 final의 의미 초기화를 한번만 허용한다는 의미. 즉, 한번 초기화되면 더 이상 초기화할 수 없다. 의문이 생겼던 부분 그럼 final만 붙어도 상수아닌가? 왜 static까지 붙여줘야 하지? final 만 있으면 모두에게 같은 값이라는 것을 보장할 수 없다! A와 B라는 사용자가 C변수에 final 키워드를 줬다고 해보자. 초기화 ..
final 키워드 헷갈리는 부분 정리
private final Map store = new HashMap();위와 같은 코드가 있다고 했을 때, store가 가리키는 실제 데이터들이 바뀌면 안된다고 잘못 생각하고 있었다. 원시 타입 변수의 경우 값이 스택에 저장되고, 객체 타입은 주소는 스택에 값은 힙에 저장된다. store가 무엇을 가리키는지 즉, 가리키는 주소가 바뀌면 안된다는 것이지 힙 안의 값이 바뀌는 것은 상관이 없다. 힙 안의 값도 불변이길 원한다면 Collections.unmodifiableMap() 를 이용해보자. final을 값이 변하지 않는다고 이해하지 말고, 한번만 할당할 수 있다고 이해하자.
java.lang 패키지 / 오토 박싱/ 오토 언박싱
java.lang 패키지에 대한 간단한 내용 1. java.lang 패키지는 import 하지 않아도 사용할 수 있다. 2. java.lang 패키지에는 기본형타입을 객체로 변환시킬때 사용하는 Wrapper클래스가 있다. ex)Boolean, Byte, Short, Integer, Long, Float, Double 클래스 3. java.lang 패키지에 속한 클래스 - 모든 클래스의 최상위 클래스인 Object - 문자열과 관련된 String, StringBuffer, StringBuilder - 화면에 값을 출력할때 사용했던 System클래스 - 수학과 관련된 Math클래스 - Thread와 관련된 중요 클래스들 - 외에도 다양한 클래스와 인터페이스가 속해있다. 오토 박싱 / 오토 언박싱 public..
Java Object 클래스
Object 클래스는 모든 클래스의 최상위 클래스이다. 아무것도 상속 받지 않으면 자동으로 Object 클래스를 상속 받기 때문에, Object가 갖고 있는 메소드는 모든 클래스에서 이용할 수 있다. Object가 가지고 있는 메소드 중에서 가장 많이 사용되는 메소드는 equals, toString, hashCode가 있으며 이는 반드시 오버라이딩해서 사용해야 한다