Flutter Study Day 7 Dart Object Class

정정원·2023년 12월 7일
0

Flutter Study

목록 보기
9/17

인스턴스 기본 조작

모든 클래스는 Object 클래스의 메서드와 프로퍼티를 가지고 있고, Object 타입 변수에는 모든 인스턴스를 대입할 수 있다.

  • Object 클래스는 모든 클래스의 기본 클래스이다.
  • Object 클래스는 객체의 기본동작을 정의하고, 객체 간의 관계를 확인 할 수 있는 기능을 제공한다.
  • 모든 클래스가 Object의 메서드와 프로퍼티를 가지고 있기 때문에, Object 타입 변수에 모든 인스턴스를 대입 할 수 있다.

<Object 클래스의 대표 메서드 및 프로퍼티>
toString() : 문자열 표현을 얻음
operator == : 비교
hashCode : 해시값을 얻음

toString()

// override 하여 원하는 결과를 얻도록 수정 할 수 있음

class Hero extends Character{
  Hero(super.name, super.hp);

  
  void attack(Monster monster){
    print('$name이 $monster을 공격했다.');
    print('10의 데미지');
    monster.hp -= 10;
  }
  
  String toString(){
    return 'Hero{}';
  }
}

operator ==()

// == : 참조의 비교
// == 연산자를 재정의 하여 나만의 동일성 규칙을 정의할 수 있다.


bool operator ==(Object other) =>
  identical(this, other) ||
  other is Hero && runtimeType == other.runtimeType;

hashCode()

Set,Map 계열은 요소를 검색할 때 hashCode 를 사용하여 비교를 진행해서 빠르다. List의 경우 순차검색이라서 느림

  • 모든 객체는 해시값을 가진다.
  • 동일한 객체는 항상 같은 해시값을 가진다.

List.sort() 메서드는 컬렉션 내부를 정렬해 줌

final names = ['Seth', 'Kathy', 'Lars'];
names.sort((a, b) => a.compareTo(b));

print(names);

sort() 메서드를 사용하기 위해서는 제약이 따른다.
함수는 Comparator 를 구현해야함

Comparator 함수 정의

Comparator(T) = int Function(
  T a,
  T b
)

a, b 두 개의 인자를 받고 다음 규칙대로 리턴하는 함수를 작성한다.

  • a가 b보다 작으면 음수 (-1)
  • 같으면 0
  • a가 b보다 크면 양수 (+1)

얕은 복사, 깊은 복사

  1. 얕은 복사(Shallow Copy) : 얕은 복사는 복합 객체를 복사할 때, 해당 객체의 주소만을 복사하여 새로운 객체를 생성한다. 복사된 객체는 원본 객체의 참조를 그대로 유지하므로, 객체 내부의 객체(내부 참조)는 복사되지 않고 동일한 메모리를 참조하게 된다. 변경된 내용이 동시에 두 객체에 영향을 미칠 수 있다.

  2. 깊은 복사 (Deep Copy): 깊은 복사는 복합 객체를 완전히 새로운 객체로 복사한다. 이 경우, 원본 객체의 모든 요소와 내부 객체까지 모두 새로운 메모리에 복사된다. 따라서 원본과는 별개의 객체가 생성되며, 한 객체의 변경이 다른 객체에 영향을 미치지 않는다.

0개의 댓글