Java의 불변 클래스

2438 단어 javaimmutable
이 기사에서는 Java에서 변경할 수 없는 클래스를 만드는 일반적인 단계를 정의하고 변경할 수 없는 클래스를 만드는 동안 개발자가 범하는 일반적인 실수에 대해 설명합니다.

원본 기사를 방문하십시오: https://www.java8net.com/2020/11/immutable-class-in-java.html

자바에서 불변 클래스를 만드는 단계
  • 다른 클래스가 확장할 수 없도록 클래스를 최종 클래스로 만드십시오.
  • 직접 액세스가 허용되지 않도록 모든 필드를 비공개로 설정합니다.
  • "setter"메소드를 제공하지 마십시오. 필드 또는 필드에서 참조하는 객체를 수정하는 메소드입니다.
  • 변경 가능한 인스턴스 변수가 있는 경우 특별한 주의
    4.1) 생성자 내부에서 전달된 인수의 복제 복사본을 사용해야 하며 변경 가능한 필드를 생성자를 통해 전달된 실제 인스턴스로 설정하지 마십시오.
    4.2) 항상 필드의 복제 복사본을 반환하고 실제 개체 인스턴스를 반환하지 않도록 합니다.

  • 자바에서 불변 클래스 구현

    class Address{
        private String houseNumber;
        private String street;
        private String city;
    }
    
    final class User {
        private final int id;
        private final String name;
        private final String email;
        private final Address address;
    
        /*
         * To clone the address.
         */
        private static Address cloneAddress(Address address) {
            return new ObjectMapper().convertValue(address, Address.class);
        }
    
        User(int id, String name, String email, Address address) {
            this.id = id;
            this.name = name;
            this.email = email;
            /*
             * Any field contains reference of any mutable 
                     * object must be
             * initialized with the cloned object
             */
            this.address = cloneAddress(address);
        }
        public int getId() {
            return id;
        }
        public String getName() {
            return name;
        }
        public String getEmail() {
            return email;
        }
        public Address getAddress() {
            /*
             * Getter method must return the reference of cloned object.
             */
            return cloneAddress(address);
        }
    }
    


    자바에서 미리 정의된 불변 클래스
  • 문자열 클래스는 문자 시퀀스에 대한 변경할 수 없는 개체를 나타냅니다.
  • Integer, Float, Long 등과 같은 래퍼 클래스는 모두 해당 기본 유형에 대한 변경할 수 없는 객체를 나타냅니다.
  • java.util.UUID 고유한 128비트 16진수 문자열을 나타냅니다.

  • Java에서 Immutable 클래스를 만들 때의 이점
  • 불변 객체는 기본적으로 스레드로부터 안전합니다.
  • 불변 객체는 쉽게 캐시될 수 있습니다.
  • 불변 객체는 HashMap과 같은 모든 맵에서 키 객체로 사용하기에 가장 좋은 옵션입니다.

  • 원본 기사를 방문하십시오: https://www.java8net.com/2020/11/immutable-class-in-java.html

    좋은 웹페이지 즐겨찾기