Java는 객체 지향 프로그래밍 언어입니다. 객체 지향 프로그래밍 언어이므로 모든 메소드와 메커니즘이 객체를 중심으로 회전합니다. 하나의 객체 기반 개념은 변경 가능하며 Java에서는 불변 . Java의 객체는 변경 가능하거나 불변입니다. 객체를 반복하는 방법에 따라 다릅니다.
이 섹션에서는 Java의 변경 가능한 객체와 불변 객체에 대해 설명합니다. 또한 우리는 그들 사이의 차이점을 볼 것입니다.
변경 가능한 객체란 무엇입니까?
가변 객체는 초기화 후에 값이 변경될 수 있는 객체입니다. 객체가 생성된 후 필드 및 상태와 같은 객체의 값을 변경할 수 있습니다. 예를 들어, java.util.날짜 , 스트링빌더 , 문자열 버퍼 , 등.
기존의 변경 가능한 객체를 변경하면 새 객체가 생성되지 않습니다. 대신 기존 개체의 값이 변경됩니다. 이러한 객체의 클래스는 객체를 변경할 수 있는 메서드를 제공합니다.
Getter 및 Setter( get() 및 set() 메소드)는 변경 가능한 객체에서 사용할 수 있습니다. Mutable 객체는 스레드로부터 안전할 수도 있고 그렇지 않을 수도 있습니다.
날짜를 문자열로
불변 객체란?
불변 객체는 초기화 후에 값을 변경할 수 없는 객체입니다. 객체가 생성되면 아무것도 변경할 수 없습니다. 예를 들어, 원시 객체 int 와 같은 긴 , 뜨다 , 더블 , 모든 레거시 클래스, 래퍼 클래스 , 문자열 클래스 , 등.
간단히 말해서 불변이란 수정되지 않거나 변경될 수 없음을 의미합니다. 불변 객체가 생성되면 객체 값과 상태를 변경할 수 없습니다.
불변 객체의 경우 Getter( get() 메서드)만 사용할 수 있으며 Setter( set() 메서드)는 사용할 수 없습니다.
가변 객체와 불변 객체에 대한 클래스를 생성하는 방법을 살펴보겠습니다.
변경 가능한 클래스를 만드는 방법
변경 가능한 클래스를 생성하려면 다음 두 가지가 필수적입니다.
- 필드 값을 수정하는 방법
- 객체의 Getter 및 Setter
아래의 변경 가능한 클래스 예를 살펴보세요.
Java의 메소드 재정의
public class JtpExample { private String s; JtpExample(String s) { this.s = s; } public String getName() { return s; } public void setName(String coursename) { this.s = coursename; } public static void main(String[] args) { JtpExample obj = new JtpExample('JavaTpoint'); System.out.println(obj.getName()); // Here, we can update the name using the setName method. obj.setName('Java Training'); System.out.println(obj.getName()); } }
산출:
JavaTpoint Java Training
위의 예에서는 setName 메소드를 사용하여 name 값을 변경하고 있습니다.
불변 클래스를 만드는 방법
불변 클래스를 생성하려면 다음 사항이 필수적입니다.
PD 병합
- 확장이 불가능하도록 final로 선언된 Final 클래스입니다.
- 모든 필드는 비공개여야 해당 필드에 대한 직접 액세스가 차단됩니다.
- 세터 없음
- 모든 변경 가능한 필드는 초기화된 후에는 반복할 수 없도록 최종 필드여야 합니다.
아래 예를 고려하십시오.
public class JtpExample1 { private final String s; JtpExample1(final String s) { this.s = s; } public final String getName() { return s; } public static void main(String[] args) { JtpExample obj = new JtpExample('Core Java Training'); System.out.println(obj.getName()); } }
산출:
Core Java Training
따라서 우리는 변경 가능한 객체와 불변 객체 및 클래스에 대해 논의했습니다. 이들 사이의 차이점을 논의해 보겠습니다.
가변 객체와 불변 객체의 차이점
다음은 변경 가능한 객체와 불변 객체 사이의 몇 가지 주요 차이점입니다. 자바 :
- 변경 가능한 객체는 새 객체를 추가하지 않고도 어떤 값이나 상태로든 변경할 수 있습니다. 반면, 불변 객체는 일단 생성되면 해당 값이나 상태로 변경할 수 없습니다. 불변 객체의 경우, 객체의 상태가 바뀔 때마다 새로운 객체가 생성됩니다.
- 가변 객체는 객체의 내용을 변경하는 방법을 제공합니다. 이에 비해 불변 객체는 값을 변경하는 방법을 제공하지 않습니다.
- 변경 가능한 객체는 setter와 getter를 모두 지원합니다. 이에 비해 불변 객체는 getter가 아닌 setter만 지원합니다.
- Mutable 객체는 스레드로부터 안전할 수도 있고 그렇지 않을 수도 있지만 불변 객체는 기본적으로 스레드로부터 안전합니다.
- 변경 가능한 클래스 예로는 StringBuffer, Java.util.Date, StringBuilder 등이 있습니다. 반면 불변 객체는 레거시 클래스, 래퍼 클래스, String 클래스 등입니다.
아래 표를 고려하십시오.
변하기 쉬운 | 불변 |
---|---|
초기화 후에 가변 객체의 값을 변경할 수 있습니다. | 불변 객체가 시작되면; 우리는 그 값을 변경할 수 없습니다. |
상태는 변경될 수 있습니다. | 상태는 변경할 수 없습니다. |
가변 객체에서는 새로운 객체가 형성되지 않습니다. | 불변 객체에서는 객체의 값이 변경되면 새로운 객체가 형성됩니다. |
객체를 변경하는 방법을 제공합니다. | 객체 값을 변경하는 방법을 제공하지 않습니다. |
객체를 삭제하기 위한 get() 및 set() 메서드를 지원합니다. | 객체의 값을 전달하는 get() 메소드만 지원합니다. |
변경 가능한 클래스는 스레드로부터 안전할 수도 있고 그렇지 않을 수도 있습니다. | 불변 클래스는 스레드로부터 안전합니다. |
변경 가능한 클래스를 생성하기 위한 필수 요소는 필드, getter 및 setter를 수정하는 메서드입니다. | 불변 클래스를 생성하기 위한 필수 요소는 final 클래스, private 필드, final mutable 객체입니다. |
Java의 문자열이 불변인 이유
Java의 문자열은 거의 모든 Java 프로그램에서 사용되므로 매우 특별한 클래스입니다. 이것이 성능과 보안을 향상시키기 위해 Immutable인 이유입니다. 자세히 이해해 봅시다:
Java에서 문자열은 리터럴 개념을 사용합니다. 참조 변수가 많은 객체가 있다고 가정해 보겠습니다. 이러한 시나리오에서 참조 변수의 값을 변경하면 전체 개체와 해당 값 모두에 영향을 미칩니다.
구별되게 세다
위의 이유 외에도 다음과 같은 이유도 문자열을 불변으로 만드는 데 책임이 있습니다.
불변 객체는 매우 간단합니다. 동기화가 필요 없으며 본질적으로 스레드로부터 안전합니다. 그러나 불변 객체는 다른 객체를 위한 좋은 구성 요소가 되므로 특별한 주의를 기울여야 합니다.
대부분의 개발자는 나중에 변경할 수 없도록 문자열을 최종 개체로 만듭니다.
결론
우리는 Java의 변경 가능 객체와 불변 객체에 대해 논의했으며 이제 변경 가능 객체와 불변 객체 및 클래스에 대해 명확하게 이해했습니다. 또한 변경 가능 및 불변 클래스를 만드는 방법을 살펴보았습니다.
불변 객체는 일단 시작되면 해당 값과 상태로 변경될 수 있으며 스레드로부터 안전할 수도 있고 그렇지 않을 수도 있습니다. 이에 비해 불변 객체는 해당 상태와 값 및 기본 스레드로부터 안전한 상태로 변경할 수 없습니다.