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

단비·2023년 4월 24일
0

학습

목록 보기
13/66

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로 반환
    ```java
    "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할 경우 발생
profile
tistory로 이전! https://sweet-rain-kim.tistory.com/

0개의 댓글