똑같은 객체를 매번 생성하기보다는, 객체 하나를 재사용하는 것이 속도와 메모리 사용 측면에서 훨씬 효율적일 때가 많다.
아래는 주어진 문자열이 유효한 로마 숫자인지 확인하는 메서드를 작성한 예시이다.
static boolean isRomanNume ral(String s) {
return s.matches("(?=• )M*(C[MD] |D?C{0,3})"
+ "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");
}
String.matches
메서드는 내부적으로 Pattern
인스턴스를 사용한다.String.matches()
는 주어진 정규 표현식을 컴파일하여 Pattern
객체를 만들고, 그 패턴을 사용해 문자열이 정규식에 일치하는지 확인하는 과정을 수행한다.성능을 개선하려면 Pattern 인스턴스 클래스 초기화 과정에서 캐싱해두고, 이를 나중에 재사용하면 된다.
public class RomanNumerals {
private static final Pattern ROMAN = Pattern.compile(
"시?=.)M시(:[MD] |D?C{0f3})"
+ "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");
static boolean isRomanNume ral(String s) {
return ROMAN.matcher(s).matches();
}
}
Integer num = 10; // int 타입인 10이 자동으로 Integer 객체로 변환
int n = num; // Integer 객체 num이 자동으로 int로 변환
int
, char
, boolean
, double
등Integer
(for int
), Character
(for char
), Boolean
(for boolean
), Double
(for double
) 등특성 | Primitive Types | Wrapper Types |
---|---|---|
메모리 | 스택에 값이 직접 저장 | 힙 메모리에 객체로 저장 |
초기화 값 | 0 | null |
null 허용 여부 | 불가능 | 가능 |
성능 | 더 빠름 | 더 느림 |
객체 기능 제공 | 제공되지 않음 | 다양한 메서드 제공 |