[Flutter] 심화 버전 - 불변 객체

2024. 11. 22. 17:23·Flutter/심화 버전

불변 객체 (Immutable Object)

  • 불변 객체란 한 번 생성되면 내부 상태(값)를 변경할 수 없는 객체를 말합니다.
  • 객체의 데이터가 설정되면, 이후에는 그 값을 변경할 수 없으며, 변경하려면 새로운 객체를 생성해야 합니다.
  • 즉, 메모리에 할당한 뒤 값을 변경할 수 없는 객체 

 

특징

  1. 값 변경 불가:
    • 객체의 모든 필드는 객체가 생성될 때만 설정 가능하며, 이후에는 변경할 수 없습니다.
  2. Thread-safe:
    • 불변 객체는 값을 변경할 수 없으므로, 여러 스레드에서 동시에 접근해도 안전합니다.
  3. 새 객체 생성:
    • 불변 객체의 값을 변경하려는 모든 작업은 기존 객체를 수정하지 않고 새로운 객체를 반환합니다.
  4. 재사용 가능:
    • 동일한 값을 가진 불변 객체는 재사용이 가능하여 메모리 효율성을 높일 수 있습니다.

장점

  1. 안정성:
    • 값이 변경되지 않으므로, 예기치 않은 상태 변화나 값 변경으로 인한 오류를 방지합니다.
  2. Thread-safe:
    • 동기화 처리를 하지 않아도, 여러 스레드에서 동시에 안전하게 사용할 수 있습니다.
  3. 쉬운 설계:
    • 불변 객체는 상태 변화가 없으므로 설계와 디버깅이 단순합니다.
  4. HashMap/Set에 적합:
    • 값이 변경되지 않으므로 해시코드가 일정하게 유지되어 HashMap 또는 HashSet에서 활용하기 좋습니다.

 

단점

  1. 성능:
    • 값을 변경할 때마다 새로운 객체를 생성해야 하므로, 값 변경이 빈번한 경우 성능이 저하될 수 있습니다.
  2. 메모리 사용:
    • 매번 새로운 객체를 생성해야 하므로, 메모리 사용량이 증가할 수 있습니다.

불변 객체가 적합한 경우

  1. 동시성 프로그래밍:
    • 여러 스레드에서 객체를 안전하게 공유해야 할 때.
  2. HashMap/HashSet:
    • 키 또는 값으로 저장할 때, 값 변경으로 인한 오류 방지.
  3. 값 객체(Value Object):
    • 단순히 데이터를 전달하거나 저장할 목적으로 사용하는 객체에 적합.

 

void main(){
  // 불변 객체란 메모리에 할당한 뒤 값을 변경할 수 없는 객체 입니다.
  String a = '야스오';
  print(a.hashCode);
  a = '티모';
  print(a.hashCode);
  // 중요! - a의 메모리 주소에 할당된 공간에 값을 변경한 것이 아니라
  // 새로운 메모리 주소를 할당하고 생성 했다.

  print('----------------');

  // 사용자 정의 클래스 (가변 객체) --> 불변 객체로 만들 수 있을까?
  Account a1 = const Account('123');
  Account a2 = const Account('123');
  Account a3 = const Account('123');

  print(a1.hashCode);
  print(a2.hashCode);
  print(a3.hashCode);

  // 사용자 정의 객체를 불변 객체로 만들면 내부 값을 변경할 수 없다.
  // 안전성이 증가 되었다,
  // a3.accountId = 100;

}

class Account{
  final String accountId;
  // const 단일 라인 생성자
  const Account(this.accountId);
}

실행 결과______

 

'Flutter > 심화 버전' 카테고리의 다른 글

[Flutter] 심화 버전 - 해시 함수  (0) 2024.11.22
[Flutter] 심화 버전 - 가변 객체 -> 불변 객체  (0) 2024.11.22
[Flutter] 심화 버전 - 객체 동등성 재정의  (0) 2024.11.22
[Flutter] 심화 버전 - 가변 객체  (0) 2024.11.22
[Flutter] 심화 버전 - 객체  (0) 2024.11.22
'Flutter/심화 버전' 카테고리의 다른 글
  • [Flutter] 심화 버전 - 가변 객체 -> 불변 객체
  • [Flutter] 심화 버전 - 객체 동등성 재정의
  • [Flutter] 심화 버전 - 가변 객체
  • [Flutter] 심화 버전 - 객체
미로910
미로910
개발자를 꿈꾸는 민경이의 기록 블로그
  • 미로910
    개발 note
    미로910
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 설치 메뉴얼
      • HTML
      • JAVA
        • Java 기초
        • Java 응용
        • 자료구조
        • HTTP
        • JSP 프로그래밍
      • MySQL
        • MySQL 기본
        • 1일 1쿼리
      • CSS
      • Spring boot
      • JS
        • 게시판 만들기
      • Git
      • Flutter
        • MVVM 활용
        • 심화 버전
        • 1일 1 Flutter
      • 디자인 패턴의 활용
      • error note
      • My Project
        • [졸작] LLM 기반 특허 유사도 분석 시스템
        • 도서 관리 프로그램 (final project)
        • amigo
        • 친구 매칭 프로그램(FMP)
      • Python
      • 딥러닝
      • 네트워크
      • 공부 노트
        • 연구회
        • 자료구조
      • 기타
  • 블로그 메뉴

    • 홈
    • 전체보기
    • -----------------------
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Flutter
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
미로910
[Flutter] 심화 버전 - 불변 객체
상단으로

티스토리툴바