[ODOP] 68일차 - AntPathMatcher 의 함수들

[ODOP] 68일차 - AntPathMatcher 의 함수들

setPathSeparator(@Nullable String pathSeparator)

public void setPathSeparator(@Nullable String pathSeparator) {
    this.pathSeparator = (pathSeparator != null ? pathSeparator : DEFAULT_PATH_SEPARATOR);
    this.pathSeparatorPatternCache = new PathSeparatorPatternCache(this.pathSeparator);
}

생성자와 별반 다를 것이 없어보인다.

다만, PathSeparatorPatternCache 객체는 새로 생성해서 넣어주고 있다. 위의 PathSeparatorPatternCache 클래스를 봤을 때 내부 요소가 final 로 선언되어 있고, 내부의 값을 외부에서 셋팅하는 방법은 생성자 밖에 없는 것을 볼 수 있다

값객체로서 사용된다는 것인데, equals & hashCode 의 오버라이딩이 존재하지 않는것으로 확인된다. 해당 객체는 그저 패턴 데이터를 저장하며 와일드 카드 문법의 데이터를 그대로 저장만 하고, 필요할 때 끌어다 쓰는 용도의 캐시 데이터가 아닐까?

void setCaseSensitive(boolean caseSensitive)

/**
* Specify whether to perform pattern matching in a case-sensitive fashion.
* <p>Default is {@code true}. Switch this to {@code false} for case-insensitive matching.
* @since 4.2
*/
public void setCaseSensitive(boolean caseSensitive) {
	this.caseSensitive = caseSensitive;
}
대소문자 구분 방식으로 패턴 일치를 수행할지 여부를 지정합니다.
기본값은 {@code true}입니다. 대소문자를 구분하지 않는 일치를 위해 {@code false}로 전환합니다.

void setTrimTokens(boolean trimTokens)

/**
* Specify whether to trim tokenized paths and patterns.
* <p>Default is {@code false}.
*/
public void setTrimTokens(boolean trimTokens) {
	this.trimTokens = trimTokens;
}
토큰화된 경로 및 패턴을 트리밍할지 여부를 지정합니다.
기본 값: false

void setCachePatterns(boolean cachePatterns)

public void setCachePatterns(boolean cachePatterns) {
	this.cachePatterns = cachePatterns;
}
이 매칭자의 매치 메소드 내로 전달된 패턴들에 대한 파싱된 패턴 메타데이터를 캐시할지 여부를 지정한다. true 값은 무제한 패턴 캐시를 활성화하고, false 값은 패턴 캐시를 완전히 끄게 한다.
기본값은 캐시가 켜져 있지만, 변형의 경우 런타임에 캐시할 수 있는 패턴이 너무 많으면(임계값은 65536) 자동으로 꺼집니다. 패턴의 경우 패턴의 임의 순열이 들어오는 경우, 반복 패턴이 발생할 가능성이 거의 없다고 가정한다.

위험 할 수 있는 옵션으로 보인다.

void deactivatePatternCache()

private void deactivatePatternCache() {
    this.cachePatterns = false;
    this.tokenizedPatternCache.clear();
    this.stringMatcherCache.clear();
}

위의 패턴 캐시를 비활성화 하는 함수로 보인다

public boolean isPattern(@Nullable String path)

구현체는 따로 확인하지 않아도 될 것 같다

정말 path 데이터를 char 로 나누어 분석 한 뒤 ant-path style 에 부합한지 확인하는 알고리즘 이다

public boolean match(String pattern, String path)

path 가 pattern 에 부합한지 확인하는 로직이다.

내부에선 doMatch 를 수행하고 있다

우리가 중점적으로 봐야 할 로직은 doMatch 라고 보여진다


내일은 doMatch 에 대해 분석해보자