program story

Java에서 Stateless Object 란 무엇입니까?

inputbox 2020. 12. 27. 10:51
반응형

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

반응형