>  기사  >  Java  >  Java의 불변 클래스

Java의 불변 클래스

WBOY
WBOY원래의
2024-08-30 16:07:181110검색

이번 글에서는 Java의 Immutable 클래스에 대해 설명하겠습니다. 또한 불변 클래스의 용도를 살펴보겠습니다. Java에서 불변 클래스를 생성하는 방법을 보여주는 Java 코드 예제가 있습니다. 불변 클래스는 내용을 변경할 수 없는 클래스입니다.

다음은 불변 클래스와 관련된 몇 가지 중요한 사항입니다.

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

  • 불변 클래스의 객체를 불변 객체라고 합니다. 불변 객체를 다루는 동안 객체 생성 후 객체의 상태를 변경하는 것은 허용되지 않습니다. 객체의 상태가 변경될 때마다 새로운 객체를 얻습니다.
  • 불변 클래스는 내용을 변경하는 방법을 제공하지 않습니다.
  • 불변 클래스에서는 getter 메소드만 사용할 수 있고 setter 메소드는 사용할 수 없습니다.
  • 불변 클래스는 기본적으로 스레드로부터 안전합니다.
  • Java 레거시 클래스, 래퍼 클래스, 문자열 클래스는 Java의 불변 클래스의 예입니다.

Java에서 불변 클래스를 사용하는 방법은 무엇입니까?

이 클래스를 사용하기 전에 불변 클래스가 어떻게 생성되는지 아는 것이 중요합니다. 다음은 클래스를 생성하는 동안 명심해야 할 중요한 사항입니다:

  • 불변 클래스는 상속되어서는 안 되기 때문에 최종 클래스여야 합니다.
  • 불변 클래스의 모든 필드는 최종 필드로 만들어야 합니다.
  • 변경 가능한 객체가 불변 클래스의 필드로 사용되는 경우 해당 내용이 수정되지 않도록 특별한 처리를 구현해야 합니다.
  • 공개 생성자가 있어야 합니다.
  • 모든 변수에 대한 Getter 메소드를 정의해야 합니다.
  • 어떤 변수에도 Setter 메소드가 없어야 합니다.

다음은 Java에서 불변 클래스의 주요 용도입니다.

  • 단순성: 불변 클래스의 경우 각 클래스는 단일 상태에 있으므로; 따라서 심플한 디자인 패턴입니다.
  • 스레드 안전성: 불변 클래스의 또 다른 장점은 불변 클래스의 스레드 안전성 특성으로 인해 동기화가 필요하지 않은 멀티스레드 환경의 경우입니다.
  • 강력한 디자인: 애플리케이션에 불변 클래스를 작성하면 강력한 코드가 생성됩니다.

나열된 장점 외에도 불변 클래스를 사용할 때 몇 가지 성능 문제가 있을 수 있습니다. 따라서 스레드 안전성 및 기타 기능이 중요하지 않은 경우 성능 향상을 위해 가변 클래스 사용을 고려할 수 있습니다.

Java의 불변 클래스 예시

다음은 언급된 예시입니다.

예제 #1 – 불변 클래스 생성

이제 Java에서 불변 클래스 생성을 보여주는 Java 코드 예제를 살펴보겠습니다. 다음은 Java에서 불변 클래스가 생성되는 방법을 보여주는 Java 코드 예제입니다.

코드:

package com.edubca.immutabledemo;
public final class ImmutableDemo {
final String studentName;
final int rollNumber;
public ImmutableDemo  (String studentName, int rollNumber) {
this.studentName = studentName;
this.rollNumber = rollNumber;
}
public String getStudentName() {
return studentName;
}
public int getRollNumber() {
return rollNumber;
}
public static void main(String[] args) {
ImmutableDemo obj = new ImmutableDemo  ("John" , 100);
// Since no getters are available contents cannot be modified.
// Also as variables are declared final they cannot be modified
System.out.println("Name is " + obj.getStudentName());
System.out.println("Roll Number is " + obj.getRollNumber());
}
}

출력:

Java의 불변 클래스

위 코드는 클래스 멤버로서 변경 가능한 객체를 포함하지 않는 변경 불가능한 클래스를 생성하는 방법을 보여줍니다.

예제 #2 – Java의 불변 클래스 예

이제 가변 객체를 멤버로 갖는 불변 클래스를 생성하는 방법을 살펴보겠습니다. 이 경우 불변성을 유지하려면 특별한 처리가 필요합니다.

불변 클래스의 변경 가능 객체 문제:

다음은 변경 가능한 멤버가 있는 변경 불가능한 클래스 생성을 보여주는 일반적인 코드 예제입니다.

코드:

package com.edubca.immutabledemo;
import java.util.Date;
import java.text.SimpleDateFormat;
public final class ImmutableDemo {
final String studentName;
final int rollNumber;
final Date birthDate;
public ImmutableDemo  (String studentName, int rollNumber, Date birthDate) {
this.studentName = studentName;
this.rollNumber = rollNumber;
this.birthDate=birthDate;
}
public String getStudentName() {
return studentName;
}
public int getRollNumber() {
return rollNumber;
}
public Date getBirthDate() {
return birthDate;
}
public static void main(String[] args) throws Exception {
String birthDate= "31/09/1997";
ImmutableDemo obj = new ImmutableDemo  ("John" , 100, new SimpleDateFormat("dd/MM/yyyy").parse(birthDate));
System.out.println("Name is " + obj.getStudentName());
System.out.println("Roll Number is " + obj.getRollNumber());
System.out.println("Birth date is " + obj.getBirthDate());
obj.getBirthDate().setTime(1000);
System.out.println("After changing birth date>>>>>>>>>>>>");
System.out.println("Name is " + obj.getStudentName());
System.out.println("Roll Number is " + obj.getRollNumber());
System.out.println("Birth date is " + obj.getBirthDate());
}
}

출력:

Java의 불변 클래스

위 출력에서 ​​생년월일이 변경되면서 객체의 내용이 변경된 것을 확인할 수 있습니다. 이는 불변 클래스의 규칙을 위반하는 것입니다.

불변 클래스의 가변 객체 문제에 대한 해결책:

이러한 경우를 처리하려면 코드에 일부 변경 사항을 구현해야 합니다. 수정된 코드에서는 get 메소드에서 변경 가능한 객체를 반환할 때 원래 객체를 반환하지 않습니다. 오히려 객체의 복제본을 반환합니다. 따라서 복제된 개체를 변경해도 원본 개체에는 아무런 영향을 미치지 않습니다. 수정된 코드는 다음과 같습니다.

코드:

package com.edubca.immutabledemo;
import java.util.Date;
import java.text.SimpleDateFormat;
public final class ImmutableDemo {
final String studentName;
final int rollNumber;
final Date birthDate;
public ImmutableDemo  (String studentName, int rollNumber, Date birthDate) {
this.studentName = studentName;
this.rollNumber = rollNumber;
this.birthDate=birthDate;
}
public String getStudentName() {
return studentName;
}
public int getRollNumber() {
return rollNumber;
}
public Date getBirthDate() {
return (Date)birthDate.clone();
}
public static void main(String[] args) throws Exception {
String birthDate= "31/09/1997";
ImmutableDemo obj = new ImmutableDemo  ("John" , 100, new SimpleDateFormat("dd/MM/yyyy").parse(birthDate));
System.out.println("Name is " + obj.getStudentName());
System.out.println("Roll Number is " + obj.getRollNumber());
System.out.println("Birth date is " + obj.getBirthDate());
obj.getBirthDate().setTime(1000);
System.out.println("After changing birth date>>>>>>>>>>>>");
System.out.println("Name is " + obj.getStudentName());
System.out.println("Roll Number is " + obj.getRollNumber());
System.out.println("Birth date is " + obj.getBirthDate());
}
}

출력:

Java의 불변 클래스

위 출력에서 ​​날짜 값에 변화가 없음을 확인할 수 있습니다. 따라서 클래스의 불변성은 그대로 유지됩니다. 

결론

위의 논의를 통해 우리는 Java 불변 클래스에 대해 명확하게 이해했습니다. 또한, 그 장점도 확인했습니다.

위 내용은 Java의 불변 클래스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:Java 어댑터 클래스다음 기사:Java 어댑터 클래스