Java에서 Stateless Object 란 무엇입니까?
현재 저는 "실제로 Java 동시성"을 읽고 있는데,이 문장은 다음과 같습니다.
상태 비 저장 객체에 액세스하는 스레드의 동작은 다른 스레드에 대한 작업의 정확성에 영향을 줄 수 없으므로 상태 비 저장 객체는 스레드로부터 안전합니다.
그렇다면 상태 비 저장 객체 란 무엇입니까?
Stateless 객체는 인스턴스 필드 (인스턴스 변수)가없는 클래스의 인스턴스입니다. 클래스 에는 필드 가 있을 수 있지만 컴파일 타임 상수 (정적 최종)입니다.
매우 관련된 용어는 불변 입니다. 변경 불가능한 객체는 상태를 가질 수 있지만 메서드가 호출 될 때 변경되지 않습니다 (메서드 호출은 필드에 새 값을 할당하지 않음). 이러한 개체는 스레드로부터 안전합니다.
객체에 인스턴스 필드가 없으면 stateless 입니다. 또한 일부 필드가있는 경우 상태 비 저장 일 수 있지만 해당 값이 알려져 있고 변경되지 않습니다.
이것은 상태 비 저장 개체입니다.
class Stateless {
void test() {
System.out.println("Test!");
}
}
이것은 또한 상태 비 저장 객체입니다.
class Stateless {
//No static modifier because we're talking about the object itself
final String TEST = "Test!";
void test() {
System.out.println(TEST);
}
}
이 객체에는 상태가 있으므로 상태 비 저장 이 아닙니다 . 그러나 상태가 한 번만 설정되고 나중에 변경되지 않으며 이러한 유형의 객체를 불변 이라고 합니다 .
class Immutable {
final String testString;
Immutable(String testString) {
this.testString = testString;
}
void test() {
System.out.println(testString);
}
}
상태 비 저장 개체의 개념은 부작용의 개념과 밀접하게 연결되어 있습니다 . 즉, 메서드 호출의 다른 순서에 따라 다른 값을 가질 수있는 필드가없는 개체입니다.
상태가없는 객체 (예 : 객체에 이미 발생한 일에 따라 변경 될 수있는 인스턴스 변수)
상태 비 저장 개체는 내부 상태 (내부 변수)가없는 개체입니다.
설명입니다. 이 변수가 최종적이고 변경 불가능한 한 인스턴스 변수가있는 경우에도 이전에 설명한 방식으로 클래스를 상태 비 저장으로 간주 할 수 있습니다.
인스턴스 변수가 최종적이지만 변경 가능한 경우, 예를 들어 문자열 목록, 예, 변수의 참조는 변경할 수 없지만 목록의 내용 및 따라서 클래스의 상태를 변경할 수 있습니다.
상태가 전혀없는 객체는이 시점에서 재사용하는 데 문제가 없습니다. 상태가 전혀없는 경우 모든 메소드를 정적으로 만들고 전혀 생성하지 않는 이유는 무엇입니까?
객체의 매개 변수 나 값 등을 변경할 수없는 경우 해당 객체는 스레드로부터 안전합니다.
간단히 말해서 객체의 상태는 해당 객체의 내부 변수 값을 의미합니다.
Stateful-개체의 상태를 변경할 수 있습니다. 즉, 해당 개체의 멤버 변수에서 내부 값을 변경할 수 있습니다.
값을 어떻게 변경할 수 있습니까?
값을 설정하여.
언제 그 값을 설정할 수 있습니까? 변수가 최종이 아닐 때 ..
따라서 클래스를 상태 비 저장으로 만들려면 변수를 final로 만들어 해당 변수의 값을 다른 메서드가 아닌 setter에서도 변경할 수 없도록합니다. 컴퓨팅에만 사용할 수 있습니다.
참조 URL : https://stackoverflow.com/questions/9735601/what-is-stateless-object-in-java
'program story' 카테고리의 다른 글
Swift를 사용하여 앱 델리게이트에서 뷰 컨트롤러 열기 (0) | 2020.12.28 |
---|---|
명령 줄에서 PostgreSQL 쿼리 결과를 CSV 또는 TSV 형식으로 어떻게 인쇄합니까? (0) | 2020.12.27 |
Wordpress는 마이그레이션 후 install-php로 계속 리디렉션합니다. (0) | 2020.12.27 |
Android 및 Gradle에서 SimpleXML 사용 (0) | 2020.12.27 |
디버그 빌드 변형에만 Stetho 포함 (0) | 2020.12.27 |