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

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

가변 객체 (Mutable Object)

  • 가변 객체란 한 번 생성된 후에도 내부 상태(값)를 변경할 수 있는 객체를 말합니다.
  • 객체의 메모리 주소는 유지되면서, 그 안에 저장된 데이터나 속성이 수정 가능합니다.
  • 즉, 메모리에 할당된 뒤 값을 변경할 수 있는 객체 // 내부 값이 변경이 되더라도 주소 변경 안됨

 

특징

  1. 값 변경 가능: 객체를 생성한 이후, 내부의 데이터나 필드를 자유롭게 수정할 수 있습니다.
  2. 효율성:
    • 값이 자주 변경되는 경우, 새로운 객체를 생성하지 않아 메모리 사용량이 적음.
    • 객체를 수정하기 위해 매번 새로운 객체를 생성할 필요가 없으므로 성능이 향상될 수 있음.
  3. 동일 참조:
    • 동일한 객체를 참조 중인 여러 변수에서 값이 수정되면, 참조하는 모든 변수에 영향을 미침.

 

장점

  1. 수정이 빈번한 작업에 적합:
    • 데이터를 계속 추가하거나 제거해야 하는 작업에서 유리합니다.
    • 예: 데이터 집합을 처리할 때 ArrayList, HashMap 등의 가변 객체 활용.
  2. 메모리 효율적 사용:
    • 값이 변경될 때마다 새로운 객체를 생성하지 않으므로, 메모리 사용량이 불변 객체에 비해 적을 수 있음.

 

단점

  1. Thread-safe 하지 않음:
    • 여러 스레드가 동시에 동일한 가변 객체를 수정할 경우 데이터 불일치가 발생할 수 있음.
    • 필요 시 동기화 처리가 요구됨.
  2. 예상치 못한 값 변경:
    • 참조로 인해 여러 곳에서 같은 객체를 수정할 수 있으므로, 버그 발생 가능성이 높아짐.
  3. HashMap/Set 사용 시 주의 필요:
    • 가변 객체를 키로 사용하는 경우, 객체의 값이 변경되면 해시 값이 바뀔 수 있어 데이터 무결성이 깨질 수 있음.

 

가변 객체가 적합한 경우

  • 데이터가 빈번하게 변경되는 작업.
    • 예: 데이터 리스트 수정, 대량의 문자열 조합, 캐싱, 버퍼 처리.
  • 상태를 계속 유지하거나 동적으로 변경해야 하는 객체를 사용할 때.

 


해시 코드(hashCode)

  • 해시코드는 객체를 식별하기 위해 생성되는 정수 값입니다.
  • 객체의 데이터를 기반으로 생성되며, 주로 HashMap, HashSet 등에서 빠른 데이터 검색과 저장을 위해 사용됩니다.

 

 

void main(){

  // 가변 객체란 메모리에 할당된 뒤 값을 변경할 수 있는 객체입니다.

  List a = [];
  a.add(1); // 가변 객체 내부에 값을 변경할 수 있음.
  a.add(2);

  Set b = {};
  b.add(100); // 가변 객체는 내부에 값을 변경할 수 있음.

  // 해시 코드란 --> 그 객체를 고유한 정수 값으로 변경한 값을 의미합니다.
  print(a.hashCode);

  // 핵심 가변 객체는 결국 객체 안에 상태값이 변경이 되더라도 메모리 주소는 변경이 안된다.

  List c = a; // 주소값이 복사 된다 (얕은 복사, 깊은 복사(새로운 객체를 생성해서 새로운 메모리 주소를 할당))
  c.add(100); // 내부 상태 값이 변경이 되더라도 가변 객체는 주소 값 변경이 안된다
  print(a == c); // true
  print(a.toString());

  // 중요
  // 가변 객체란 메모리 주소를 새로 할당 받고 내부 값을 변경할 수 있는 객체이다.
  // 내부 값이 변경이 되더라도 주소도 변경이 안된다.


}

실행 결과______

 

'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] 심화 버전 - 가변 객체
상단으로

티스토리툴바