이번 글에서는 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()); } }
출력:
위 코드는 클래스 멤버로서 변경 가능한 객체를 포함하지 않는 변경 불가능한 클래스를 생성하는 방법을 보여줍니다.
예제 #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()); } }
출력:
위 출력에서 생년월일이 변경되면서 객체의 내용이 변경된 것을 확인할 수 있습니다. 이는 불변 클래스의 규칙을 위반하는 것입니다.
불변 클래스의 가변 객체 문제에 대한 해결책:
이러한 경우를 처리하려면 코드에 일부 변경 사항을 구현해야 합니다. 수정된 코드에서는 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의 불변 클래스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

Dreamweaver Mac版
시각적 웹 개발 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는
