- 불필요한 객체 생성을 피하자2021년 03월 15일 12시 30분 14초에 업로드 된 글입니다.작성자: jCurve728x90반응형
같은 기능의 객체를 매번 생성하기보다는 객체 하나를 재사용하는 편이 나을 때가 많다. 재사용은 빠르고 세련되며 불변 객체는 언제든 재사용할 수 있다.
생성자 대신 정적 팩터리 메서드를 제공하는 불변 클래스에서 정적 팩터리 메서의 사용은 불필요한 객체 생성을 피할 수 있다.
생성자는 호출할 때마다 객체를 만들지만, 팩터리 메서드는 그렇지 않다.
불변 객체만이 아니라 가변 객체라 해도 사용중에 변경되지 않을 것임을 안다면 재사용할 수 있다.
생성 비용이 비싼 객체가 반복해서 필요하다면 캐싱하여 재사용하는 것이 권장된다.
문자열이 유효한 로마 숫자인지를 확인하는 정규표현식 메서드를 작성할 때 String.matches 메서드를 성능이 중요한 상황에 반복해서 사용하기엔 적합하지 않기 때문에 메서드가 내부에서 만드는 정규표현식용 Pattern 인스턴스를 클래스 초기화 과정에서 캐싱해두고 isRomanNumberal 메서드가 호출될 때마다 이 인스턴스를 재사용하는 것이 성능상 이점이 크다.
이 외의 예로 오토박싱도 불필요한 객체를 만들어 낼 수 있다.
오토방식은 기본 타입과 박싱된 기본 타입을 섞어 쓸 때 자동으로 상호 변환해주는 기술이다.
박싱된 기본 타입보다는 기본 타입을 사용하고, 의도치 않은 오토박싱이 숨어들지 않도록 주의해야한다.
아주 무거운 객체가 아닌 다음에야 단순히 객체 생성을 피하고자 자신만의 객체 풀을 만들어서는 안된다.
데이터베이스 연결의 경우 커넥션 생성 비용이 비싸 객체 풀을 만들긴 하지만 일반적으로 자바 객체 풀은 코드를 헷갈리게 만들고 메모리 사용량을 늘리고 성능을 떨어뜨린다.
반응형'JAVA' 카테고리의 다른 글
finalizer와 cleaner 사용을 피하라 (0) 2021.03.28 다 쓴 객체 참조를 해제하라 (0) 2021.03.28 자원을 직접 명시하지 말고 의존 객체 주입을 사용하자 (0) 2021.03.15 인스턴스화를 막으려거든 private 생성자를 사용하자 (0) 2021.03.15 private 생성자나 열거 타입으로 싱글턴임을 보증하자 (0) 2021.03.15 댓글