👉🏻 이펙티브 자바 아이템6
아이템 6은 불필요한 객체 생성을 피하라 라는 내용이었다. 여기에 정규식 관련 내용이 나오는데, 이번 프로젝트하면서 정규식을 확인하는 로직이 있어 이 책 내용을 적용해 보았다.
대략적인 내용은 '정규식과 같이 비싼 객체가 계속해서 필요하다면 캐싱하여 사용하라' 였다.
(이펙티브 자바지만.. 언어는 코틀린을 사용하였다..🤣)
object ValidationRegex {
private val EMAIL_REGEX = Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE)
//숫자, 영어 조합 8자리 이상
private val PASSWORD_REGEX = Pattern.compile("""^(?=.*[a-zA-z])(?=.*[0-9])(?=.*[${'$'}`~!@${'$'}!%*#^?&\\(\\)\-_=+]).{8,50}${'$'}""")
fun isRegexEmail(email: String): Boolean {
return EMAIL_REGEX.matcher(email).matches()
}
fun isRegexPassword(password: String): Boolean {
return PASSWORD_REGEX.matcher(password).matches()
}
}
코틀린에서 object
는 클래스를 정의하는 동시에 인스턴스를 생성하며 싱글톤을 보장해주는 키워드다. 또한 자바에 존재하는 static
을 대체해 사용할 수 있게 해준다.
아무튼! 클래스 초기화 과정에 캐싱해두고 isRegexEmail
과 같이 정규식 확인 메서드가 호출될 때마다 이 인스턴스를 재사용하도록 하였다.
https://velog.io/@changhee09/%EC%BD%94%ED%8B%80%EB%A6%B0-object-%ED%82%A4%EC%9B%8C%EB%93%9C