스터디

정적, 비정적 클래스 알고 사용하기

자바의 중첩 클래스(Nested Class)에는 여러 가지 종류가 있는데 그중 정적 내부 클래스와 비정적 내부 클래스에 대해 다뤄보고자 한다. 글에서 사용된 코드는 Github에서 확인할 수 있다. 중첩 클래스란 정적, 비정적 내부 클래스에 대해 다루기 전에 중첩 클래스가 생소할 수 있기 때문에 먼저 중첩 클래스에 대해 설명을 하고자 한다. 중첩 클래스는 말 그대로 다른 클래스의 내부에 존재하는 클래스를 의미한다. 중첩 클래스는 특정 클래스가 한 곳(다른 클래스)에서만 사용될 때 논리적으로 군집화하기 위해 사용한다. 이로 인해 불필요한 노출을 줄이면서 캡슐화를 할 수 있고 조금 더 읽기 쉽고 유지 보수하기 좋은 코드를 작성하게 된다. 정적, 비정적 선언 정적 내부 클래스와 비정적 내부 클래스를 나누는 기..

2020.11.06 게시됨

스터디/이펙티브자바

[아이템7] 다 쓴 객체 참조를 해제하라

아이템 7 다 쓴 객체 참조를 해제하라 메모리 누수의 주범이다. 사용을 마친 객체의 참조를 해제할 때 null을 이용하여 객체 참조를 해제하는 방법도 있지만, 이는 지양하도록 하라. 가장 이상적인 방법은 참조를 담은 변수를 유효 범위 밖으로 밀어내는 것이다. 캐시 또한 메모리 누수를 일으키는 주범이니, 캐시 외부에서 키를 참조하는 동안만 엔트리가 살아 있는 캐시가 필요하다면 WeakHashMap을 사용해 캐시를 만들도록 하자. @DisplayName("HashMap 테스트") @Test void test1() { //given Map map = new HashMap(); Foo key = new Foo(); map.put(key, "1"); //when key = null; System.gc(); //t..

2020.01.28 게시됨

스터디/이펙티브자바

[아이템6] 불필요한 객체 생성을 피하라

아이템 6 불필요한 객체 생성을 피하라 String.matches(String regex); String 의 matches는 반복사용할 경우 그 비용이 매우 비싸다. 내부에서 Pattern 인스턴스를 생성했다가 GC의 대상이 되기 때문이다. 이를 Pattern 인스턴스를 미리 생성한 뒤 이용하여 성능 향상을 꾀하도록 하자. 내부적으로 new Pattern(regex,0) 을 하고 있다. Map.keySet(); Map.keySet 은 매번 새로운 인스턴스를 생성하는 것 처럼 보일 수 있으나 하나의 객체만을 반환하고 있다. 어댑터의 역할은 keySet이며 뒷단 객체는 Map을 의미한다. Map의 view역할을 keySet이 하여 Set으로 보여주고 있다. 따라서 keySet으로 반환된 Set 객체에서는 a..

2020.01.28 게시됨