코딩마을방범대
Autowired를 지양하는 이유 & 정규표현식 본문
728x90
💬 목차
Autowired를 지양하는 이유
- 객체지향에서 피해야할 것은 지나치게 큰 의존도를 만드는 것
spring 초기 버전: xml파일에 Bean 명세를 적어 사용
↓
ApplicationConfig에 java코드로 Annotation을 사용
↓
@Autowired의 등장으로 명세를 적어줘야하는 일을 하지 않아도 됨
의존성을 주입하는 방법
1. @Autowired 사용
- 순환참조가 되는 경우 빌드과정에서는 알 수 없음
- final 사용 불가능
순환참조의 문제점
컴포넌트 간의 명확한 경계가 사라지고 연쇄적으로 변경에 의한 영향이 발생
@Autowired
private User user;
2. Setter 사용
- set하지 않을 경우 NullPointException 발생
private User user;
@Autowired
public void setUser(User user) {
this.user = user;
}
3. Constructor 사용
- 순환참조가 되는 경우 빌드과정에서 알 수 있음(빌드가 되지 않음)
- final 사용 가능
private User user;
public 클래스명(User user) {
this.user = user;
}
4. RequiredArgsConstructor 사용
- 3번을 편리하게 사용할 수 있는 lombok 기능
@RequiredArgsConstructor
public class User{
private final User user;
}
정규표현식(Regular Expression)
- 문자열 데이터 중에서 원하는 조건(패턴)과 일치하는 문자열 부분을 찾아내기 위해 사용하는 것
메타문자란?
문자를 설명하기 위한 문자로, 문자의 구성을 설명하기 위해 원래의 의미가 아닌 다른 의미로 쓰이는 문자
🎃 정규표현식의 사용법 🎃
- Dot(.)
- 줄바꿈 문자인 \n을 제외한 모든 문자
- []
- 괄호 안의 문자가 있는지를 확인
- 괄호 안에 메타문자가 들어가도 문자 그대로 인식
Java에서 정규 표현식을 이용할 수 있는 메소드
1. 자바 문자열 객체(java.lang.String)
- matches
- boolean으로 반환
"abc".matches("[a-z]") // true - replaceAll
- String으로 반환
"abc123".replaceAll("[a-z]","*") // ***123 - split
- Array로 반환"123a456".split("[a-z]") // ["123","456"]
2. regex 패키지 클래스
- 자바에서 정규 표현식을 전문적으로 다루는 클래스
- Pattern 클래스와 Matcher 클래스가 주로 사용됨
Pattern 클래스
- compile(정규식 문자열)
- 문자열 형태의 정규표현식 문법을 정규식 패턴으로 변환
Pattern pattern = Pattern.compile("^[0-9]*$"); - matches(정규식 문자열, 검증 대상 문자열)
- 정규식 검증 (return = boolean)
Pattern.matches("^[0-9]*$", str) - pattern( )
- 정규 표현식을 String 형태로 반환
Pattern.compile("^[0-9]*$").pattern()
Matcher 클래스
- 문자열을 비교하고 검사한 결과값을 담은 매처 객체를 반환
- Pattern.matches() 메소드는 단순히 참/거짓 만 결과를 반환하지만
Matcher 클래스의 group() 메소드를 통해 필터링된 문자열을 출력할 수 있음
String txt = "1487안녕";
String patternString = "^[0-9]+";
// 1) 문자열 형태의 정규표현식 문법을 정규식 패턴으로 변환
Pattern pattern = Pattern.compile(patternStr);
// 2) 패턴 객체로 matcher 메서드를 통해 문자열을 검사하고 필터링된 결과를 매처 객체로 반환
Matcher matcher = pattern.matcher(txt);
// 3) 정규식 필터링된 결과를 담은 matcher에서 메소드를 통해 결과를 출력
matcher.find(); // 매칭된 결과가 있는지? : true
matcher.group(); // 매칭된 부분을 반환 : 1487
- find( )
- 패턴이 일치하는 경우 true를 반환, 불일치하는 경우 false반환
- find(int start)
- start 위치 이후부터 매칭검색
- start( )
- 매칭되는 문자열의 시작위치 반환
- end( )
- 매칭되는 문자열 끝위치의 다음 문자위치 반환
💡 TIPS!
1. SQLIntegrityConstraintViolationException 이란
- 중복된 데이터를 insert할 경우 발생
728x90
'💡 백엔드 > Java' 카테고리의 다른 글
JAVA에서의 암호화 방법 (AES) (0) | 2023.05.26 |
---|---|
ModelMapper란 (0) | 2023.05.25 |
스케쥴러(Scheduler)에 대하여 (1) | 2023.05.25 |
SpringBoot에서 JSON 활용하기 (0) | 2023.05.25 |
Enum 에 대하여 (1) | 2023.05.25 |