코딩마을방범대

Autowired를 지양하는 이유 & 정규표현식 본문

💡 백엔드/Java

Autowired를 지양하는 이유 & 정규표현식

신짱구 5세 2023. 5. 25. 14:19
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 클래스

  1. compile(정규식 문자열)
    • 문자열 형태의 정규표현식 문법을 정규식 패턴으로 변환
    
      
    Pattern pattern = Pattern.compile("^[0-9]*$");
  2. matches(정규식 문자열, 검증 대상 문자열)
    • 정규식 검증 (return = boolean)
    
      
    Pattern.matches("^[0-9]*$", str)
  3. 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
  1. find( )
    • 패턴이 일치하는 경우 true를 반환, 불일치하는 경우 false반환
  2. find(int start)
    • start 위치 이후부터 매칭검색
  3. start( )
    • 매칭되는 문자열의 시작위치 반환
  4. 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