logo

Java에서는 변경 가능 및 불변

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의 변경 가능 객체와 불변 객체에 대해 논의했으며 이제 변경 가능 객체와 불변 객체 및 클래스에 대해 명확하게 이해했습니다. 또한 변경 가능 및 불변 클래스를 만드는 방법을 살펴보았습니다.

불변 객체는 일단 시작되면 해당 값과 상태로 변경될 수 있으며 스레드로부터 안전할 수도 있고 그렇지 않을 수도 있습니다. 이에 비해 불변 객체는 해당 상태와 값 및 기본 스레드로부터 안전한 상태로 변경할 수 없습니다.