> For the complete documentation index, see [llms.txt](https://blakes-organization.gitbook.io/rainsister/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://blakes-organization.gitbook.io/rainsister/spring/springboot-utils.md).

# Springboot 내장된 유용한 Utils

### Assert

```java
// 필수 매개 변수 object는 비어 있지 않아야 합니다(Not Null). 그렇지 않으면 예외를 던지고 내보내지지 않습니다.
// 매개 변수 message 매개 변수는 예외 정보를 사용자 지정하는 데 사용됩니다.
void notNull(Object object, String message)
// 필수 매개변수는 비어 있어야 하며(Null), 그렇지 않으면 이상을 던지고 '반출'되지 않습니다.
// notNull() 메서드 주장 규칙과 반대입니다
void isNull(Object object, String message)
// 필수 매개변수는 참(True)이어야 하며, 그렇지 않으면 이상을 던지고 '반출'되지 않습니다.
void isTrue(boolean expression, String message)
// 요구 파라미터(List/Set)는 비어 있지 않아야 하며(Not Empty), 그렇지 않으면 이상을 던지면 릴리스되지 않습니다.
void notEmpty(Collection collection, String message)
// 요구 파라미터(String)는 반드시 길이(즉, Not Empty)가 있어야 하며, 그렇지 않으면 이상을 던지면 방출되지 않습니다.
void hasLength(String text, String message)
// 요구 파라미터(String)에는 반드시 내용(즉, Not Blank)이 있어야 하며, 그렇지 않으면 이상을 던지면 반출되지 않습니다.
void hasText(String text, String message)
// 요구 파라미터는 지정된 유형의 실례입니다. 그렇지 않으면 이상을 던지면, 풀어주지 않습니다.
void isInstanceOf(Class type, Object obj, String message)
// 요구 파라미터 `subType`은 반드시 파라미터 superType의 서브클래스 또는 구현클래스여야 하며, 그렇지 않으면 이상을 던질 경우 릴리스되지 않습니다.
void isAssignable(Class superType, Class subType, String message)
```

### ObjectUtils

#### 객체기본정보 가져오기 유틸

```java
// 개체의 클래스 이름을 가져옵니다.인자가 null일 때 문자열을 반환합니다: "null"
String nullSafeClassName(Object obj)
// 인자가 null일 때 0을 반환합니다
int nullSafeHashCode(Object object)
// 인자가 null일 때 문자열을 반환합니다: "null"
String nullSafeToString(boolean[] array)
// 대상 HashCode (16진수 문자열) 을 가져옵니다.인자가 null일 때 0을 반환합니다
String getIdentityHexString(Object obj)
// 개체의 클래스 이름과 HashCode를 가져옵니다. 인자가 null일 때 문자열을 반환합니다:"
String identityToString(Object obj)
// toString() 메서드에 해당하지만 인자가 null일 경우 문자열을 반환합니다:"
String getDisplayString(Object obj)
```

#### 판단유틸

```java
// 배열이 비어 있는지 여부를 판단합니다
boolean isEmpty(Object[] array)
// 매개 변수 개체가 배열인지 여부 판단
boolean isArray(Object obj)
// 배열에 지정된 요소가 포함되어 있는지 확인합니다.
boolean containsElement(Object[] array, Object element)
// 같거나 같은 null일 때 true 반환
boolean nullSafeEquals(Object o1, Object o2)
/*
매개 변수 개체가 비어 있는지 여부를 판단하며 판단 기준은 다음과 같습니다.
    Optional: Optional.empty()
       Array: length == 0
CharSequence: length == 0
  Collection: Collection.isEmpty()
         Map: Map.isEmpty()
 */
boolean isEmpty(Object obj)
```

#### &#x20;기타 유틸

```java
// 매개 변수 배열의 끝에 새 요소를 추가하고 새 배열로 되돌립니다
<A, O extends A> A[] addObjectToArray(A[] array, O obj)
// 기본 유형 배열 --> 패키지 유형 배열
Object[] toObjectArray(Object source)
```

### StringUtils

#### String 판단유틸

```java
// 문자열이 null인지, 또는 ""인지 여부를 판단합니다.공백 문자를 포함하는 문자열은 비어 있지 않습니다
boolean isEmpty(Object str)
// 문자열이 지정된 내용으로 끝나는지 여부를 판단합니다.대소문자 무시
boolean endsWithIgnoreCase(String str, String suffix)
// 문자열이 내용의 시작 부분을 지정했는지 여부를 판단합니다.대소문자 무시
boolean startsWithIgnoreCase(String str, String prefix) 
// 공백 문자를 포함할지 여부
boolean containsWhitespace(String str)
// 문자열이 비어 있지 않고 길이가 0이 아니라고 판단합니다. 즉, Not Empty
boolean hasLength(CharSequence str)
// 문자열에 실제 내용이 포함되어 있는지 여부, 즉 공백 문자만 포함하는 것이 아니라 Not Blank
boolean hasText(CharSequence str)
// 문자열 지정 인덱스에 하위 문자열이 포함되어 있는지 여부를 판단합니다.
boolean substringMatch(CharSequence str, int index, CharSequence substring)
// 문자열에서 지정한 부분 문자열의 수를 세십시오
int countOccurrencesOf(String str, String sub)
```

#### String 제어 유틸

```java
// 지정문자를 찾고 치환
String replace(String inString, String oldPattern, String newPattern)
// 끝부분 특수문자제거
String trimTrailingCharacter(String str, char trailingCharacter) 
// 시작부분 특수문자제거
String trimLeadingCharacter(String str, char leadingCharacter)
// 시작 공백제거
String trimLeadingWhitespace(String str)
// 시작 공백제거
String trimTrailingWhitespace(String str)
// 시작,끝 공백 제거 
String trimWhitespace(String str)
// 시작,끝,가운데 공백 제거
String trimAllWhitespace(String str)
// 지정 문자열 제거
String delete(String inString, String pattern)
// 지정 부호 제거(여러개 가능)
String deleteAny(String inString, String charsToDelete)
// 배열각아이템마다 trim() 메소드 실행
String[] trimArrayElements(String[] array)
//  URL String 에 대한 디코딩
String uriDecode(String source, Charset charset)
```

#### 경로string 관련제어

```java
// 경로 문자열을 해석하고 "..." 을 최적화합니다.
String cleanPath(String path)
// 경로 문자열을 해석하여 파일 이름 부분을 해석합니다.
String getFilename(String path)
// 경로 문자열을 해석하고, 파일 접미사 이름을 해석합니다.
String getFilenameExtension(String path)
// 두 개의 두 개의 문자열을 비교하여 동일한 경로인지 여부를 판단합니다.경로의 "..." 을 자동으로 처리합니다.
boolean pathEquals(String path1, String path2)
// 파일 경로 이름에서 접미사 부분 삭제
String stripFilenameExtension(String path)
// ".를 구분자로 사용하여 마지막 부분을 가져옵니다.
String unqualify(String qualifiedName)
// 지정한 문자를 구분자로 사용하여 마지막 부분 가져오기
String unqualify(String qualifiedName, char separator)
```

### CollectionUtils

#### 컬랙션 판단

```java
// List/Set이 비어 있는지 여부 판단
boolean isEmpty(Collection<?> collection)
// Map이 비어 있는지 여부 판단
boolean isEmpty(Map<?,?> map)
// List/Set에 개체 포함 여부 판단
boolean containsInstance(Collection<?> collection, Object element)
// 반복기 방식으로 List/Set에 개체가 포함되는지 여부를 판단합니다
boolean contains(Iterator<?> iterator, Object element)
// List/Set에 어떤 개체가 포함되어 있는지 판단하기
boolean containsAny(Collection<?> source, Collection<?> candidates)
// List/Set의 각 요소가 고유한지 여부를 판단합니다.List/Set에 중복 요소가 없습니다
boolean hasUniqueObject(Collection<?> collection)
```

#### 컬랙션 제어

```java
// Array의 요소를 List/Set에 추가합니다.
<E> void mergeArrayIntoCollection(Object array, Collection<E> collection)  
// Properties의 키 쌍을 Map에 추가합니다.
<K,V> void mergePropertiesIntoMap(Properties props, Map<K,V> map)
// List의 마지막 요소로 돌아가기
<T> T lastElement(List<T> list)  
// Set의 마지막 요소로 돌아가기
<T> T lastElement(Set<T> set) 
// 매개 변수 candidates에서 매개 변수 source의 첫 번째 요소를 반환합니다.
<E> E findFirstMatch(Collection<?> source, Collection<E> candidates)
// List/Set에서 지정한 형식의 요소를 반환합니다.
<T> T findValueOfType(Collection<?> collection, Class<T> type)
// List/Set에서 지정한 형식의 요소를 반환합니다.첫 번째 유형을 찾지 못하면 두 번째 유형을 찾아 유추한다
Object findValueOfType(Collection<?> collection, Class<?>[] types)
// List/Set의 요소 형식을 반환합니다.
Class<?> findCommonElementType(Collectio<?> collection)
```

### file、resource、IO Stream

#### FileCopyUtils

input

```java
// 파일에서 바이트 배열로 읽기
byte[] copyToByteArray(File in)
// 입력 스트림에서 바이트 배열로 읽기
byte[] copyToByteArray(InputStream in)
// 입력 스트림에서 문자열로 읽기
String copyToString(Reader in)
```

output

```java
// 바이트 배열에서 파일로
void copy(byte[] in, File out)
// 파일에서 파일로
int copy(File in, File out)
// 바이트 배열에서 출력 스트림으로
void copy(byte[] in, OutputStream out) 
// 입력 흐름에서 출력 흐름으로
int copy(InputStream in, OutputStream out) 
// 입력 흐름에서 출력 흐름으로
int copy(Reader in, Writer out)
// 문자열에서 출력 스트림으로
void copy(String in, Writer out)
```

#### ResourceUtils

자원 경로에서 파일 가져오기

```java
// 문자열이 합법적인 URL 문자열인지 여부를 판단합니다.
static boolean isUrl(String resourceLocation)
// URL 가져오기
static URL getURL(String resourceLocation) 
// 파일 가져오기 (JAR 패키지에서 제대로 사용할 수 없습니다. 별도의 파일이 필요합니다)
static File getFile(String resourceLocation)
```

Resource

```java
// 파일 시스템 리소스 D:\...
FileSystemResource
// file: //... http://... 같은 URL 리소스
UrlResource
// 클래스 경로 아래의 리소스, classspth:...
ClassPathResource
// 웹 컨테이너 컨텍스트의 리소스 (jar 패키지, war 패키지)
ServletContextResource
// 자원의 존재 여부를 판단하다
boolean exists()
// 리소스에서 File 개체 가져오기
File getFile()
// 리소스에서 URI 개체 가져오기
URI getURI()
// 리소스에서 URI 개체 가져오기
URL getURL()
// 리소스 가져오기InputStream
InputStream getInputStream()
// 리소스에 대한 설명 정보 가져오기
String getDescription()
```

#### StreamUtils

input

```java
void copy(byte[] in, OutputStream out)
int copy(InputStream in, OutputStream out)
void copy(String in, Charset charset, OutputStream out)
long copyRange(InputStream in, OutputStream out, long start, long end)
```

output

```java
byte[] copyToByteArray(InputStream in)
String copyToString(InputStream in, Charset charset)
// 입력 흐름에서 내용 지우기
int drain(InputStream in)
```

### Reflection ， AOP

#### ReflectionUtils

정보 가져오기 메서드

```java
// 클래스에서 지정한 메서드 찾기
Method findMethod(Class<?> clazz, String name) 
// 위와 같이, 검색 조건에 방법 매개 변수 유형을 추가로 제공합니다.
Method findMethod(Class<?> clazz, String name, Class<?>... paramTypes) 
// 상속을 포함하여 클래스의 모든 메서드 가져오기
Method[] getAllDeclaredMethods(Class<?> leafClass) 
// 클래스에서 지정한 생성 방법 찾기
Constructor<T> accessibleConstructor(Class<T> clazz, Class<?>... parameterTypes) 
// equals() 메서드인지 여부
boolean isEqualsMethod(Method method) 
// hashCode() 메서드인지 여부
boolean isHashCodeMethod(Method method) 
// toString() 메서드인지 여부
boolean isToStringMethod(Method method) 
// Object 클래스에서 상속되는 방법인지 여부
boolean isObjectMethod(Method method) 
// 메서드가 지정한 예외를 선언하는지 확인합니다
boolean declaresException(Method method, Class<?> exceptionType)
```

수행메서드

```java
// 실행 방법
Object invokeMethod(Method method, Object target)  
// 위와 같이, 방법 파라미터를 제공한다.
Object invokeMethod(Method method, Object target, Object... args) 
// 자바 권한 검사를 취소합니다.이 개인 메서드를 나중에 실행할 수 있도록 하기 위해
void makeAccessible(Method method) 
// 자바 권한 검사를 취소합니다.나중에 사유 구축 방법을 실행할 수 있도록 하기 위해서
void makeAccessible(Constructor<?> ctor)
```

field 정보가져오기

```java
// 클래스에서 지정한 속성 찾기
Field findField(Class<?> clazz, String name) 
// 위와 같이 속성의 유형을 많이 제공하였다.
Field findField(Class<?> clazz, String name, Class<?> type) 
// "public static final" 속성인지 여부
boolean isPublicStaticFinal(Field field)
```

설정 메서드

```java
// target 개체의 필드 속성 값을 가져옵니다.
Object getField(Field field, Object target) 
// target 개체의 필드 속성 값을 value로 설정합니다
void setField(Field field, Object target, Object value) 
// 동종 개체 속성 대등 할당
void shallowCopyFieldState(Object src, Object dest)
// Java의 권한 제어 검사를 취소합니다.개인 속성을 읽고 쓸 수 있도록 하기
void makeAccessible(Field field) 
// 클래스의 각 속성에 대해 callback 실행
void doWithFields(Class<?> clazz, ReflectionUtils.FieldCallback fc) 
// 위와 같이 속성 필터링 기능이 추가되었습니다.
void doWithFields(Class<?> clazz, ReflectionUtils.FieldCallback fc, 
                  ReflectionUtils.FieldFilter ff) 
// 위와 같으나 상속받은 속성은 포함하지 않는다
void doWithLocalFields(Class<?> clazz, ReflectionUtils.FieldCallback fc)
```

### AopUtils

proxy 판단

```java
// Spring 에이전트인지 여부 판단
boolean isAopProxy()
// jdk 동적 에이전트인지 여부 판단
isJdkDynamicProxy()
// CGLIB 에이전트인지 여부 판단
boolean isCglibProxy()
```

proxy target class

```java
// proxy 대상 클래스 가져오기
Class<?> getTargetClass()
```

### AopContext

현재 proxy 객체 가져오기

```java
Object currentProxy()
```

끝!


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://blakes-organization.gitbook.io/rainsister/spring/springboot-utils.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
