티스토리 뷰


객체는 필요할 때마다 만드는 것보다 재사용할 수 있다면 재사용하는  편이 프로그램을 더 빠르게 한다. 특히 변경 불가능한 객체는 언제나 재사용할 수 있다.


단순객체 중복생성


String str = new String("reference"); // "reference" 자체가 객체 String str = "reference";

첫 번째 코드는 실행될 때마다 불필요한 객체를 만드는 한 예다. "reference"은 그 자체로 String 객체이다. 그런데 이를 다시 String 객체를 생성하고 있다. 이런 코드가 반복문 안에 있다면, 수많은 객체를 쓸데없이 만들고 지우게 된다. 따라서 두 번째 코드처럼 하는 것이 바람직하다. 이렇게 하면 실행할 때마다 같은 가상머신에서 실행되는 모든 코드가 해당 객체를 재사용하게 된다.

또한 생성자와 정적 팩터리 메서드를 이용하면 불필요한 객체 생성을 피할 수 있다. 생성자는 호출할 때마다 새 객체를 만들지만, 정적 팩터리 메서드는 그럴 필요가 없다.


자동 객체화(autoboxing)


JDK 1.5부터는 자동 객체화(autoboxing)라는 기능이 생겼다. 자바의 기본 자료형과 그 객체 표현형을 섞어 사용할 수 있도록 해 준다. 둘 간의 변환은 자동으로 이뤄진다.

public static void main(String[] args) {

Long sum = 0L;

for (long i = 0; i < Integer.MAX_VALUE; i++) {

sum += i;

}

System.out.println(sum);

}

위 코드는 결과적으로는 정확하게 나오지만, 나와야 할 성능보다 한참 아래의 성능을 보여준다. 위 코드에서 i 는 primitive type이다. 그런데 num은 Long 객체다. 객체의 표현형 대신 기본 자료형을 사용하고, 생각지도 못한 자동 객체화가 발생하지 않도록 유의해야 한다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함