ChatGPT
Object는 Dart 언어에서 모든 클래스의 부모 클래스입니다. 모든 Dart 클래스는 암묵적으로 Object 클래스를 상속하며, 이것은 Dart에서 클래스 계층 구조의 최상위에 위치하는 클래스입니다.
Object 클래스는 클래스 계층 구조의 최상위에 위치한 클래스로 모든 클래스는 Object 클래스의 메서드와 프로퍼티를 가지고 있고 오버라이드 하여 여러 동작을 수행할 수 있다.
- Object 클래스의 대표 메서드
-toString() : 문자열 표현을 얻음
-operator== : 비교
- Object 클래스의 대표 프로퍼티
-hashCode : 해시값 얻음
Object 타입 변수에는 모든 인스턴스를 대입할 수 있다.
오버라이드 하여 인스턴스를 식별하는 문자열을 원하는대로 변경할 수 있다.
class Character {
String name;
int hp;
Character(this.name, this.hp);
String toString() {
return 'Character{name:$name,hp:$hp}';
}
}
void main() {
Character character = Character('홍길동', 100);
print(character); //출력 : Character{name:홍길동,hp:100}
}
아래와 같이 변경하여 이름만 출력되도록 할 수도 있다.
toString() {
return 'Character{name:$name}';
}
String
void main() {
Character character = Character('홍길동', 100);
print(character); // 출력 : Character{name:홍길동}
==연산자 재정의
‘==’는 연산자는 동등성을 비교하는데 사용된다.
객체의 참조(레퍼런스)를 비교하여 같은경우 true 를 반환한다.
==연산자를 재정의 하여 나만의 동등성 규칙을 정의할 수 있다.
일반적으로 동등한 객체는 동일한 hashCode 값을 가지기 때문에 동등성 비교를 하기 위해서는 ==연산자와 hashCode를 다 맞춰야 한다.
Man 이라는 클래스의 컨스트럭터로 생성된 인스턴스들은 동등하지 않지만 오버라이드를 통한 ==연산자 재정의로 나만의 동등성 규칙을 정의할 수 있다.
class Man {
String name;
int age;
Man({
required this.name,
required this.age,
});
bool operator ==(Object other) =>
identical(this, other) ||
other is Man &&
runtimeType == other.runtimeType &&
name == other.name &&
age == other.age;
int get hashCode => name.hashCode ^ age.hashCode;
}
void main() {
Man man1 = Man(name: '홍길동', age: 20);
Man man2 = Man(name: '홍길동', age: 20);
print(man1.hashCode == man2.hashCode); //true 출력
}
이름과 나이가 같을 경우 동등한 것으로 취급한다고 임의로 재정의하면 man1과 man2가 동등하다고 출력되고, set, map에서도 동일한 객체로 판단하게 된다.
sort() 메서드는 컬렉션 내부를 정렬해 준다.
void main() {
List<int> numbers = [1, 3, 5, 2, 4];
numbers.sort();
print(numbers); // [1,2,3,4,5]출력
}
비교 함수를 제공하여 정렬 순서를 사용자 정의할 수도 있다.
void main() {
final menList = <Man>[];
Man man1 = Man(name: '홍길동', age: 36);
Man man2 = Man(name: '이순신', age: 20);
menList.add(man1);
menList.add(man2);
print(menList); //[Man(name:홍길동, age:36), Man(name:이순신, age:20)] 출력
menList.sort((a, b) => a.age.compareTo(b.age));
print(menList); //[Man(name:이순신, age:20), Man(name:홍길동, age:36)]
}
인스턴스 man1, man2의 나이를 기준으로 오름차순으로 정리하였다.
a.age.compareTo(b.age)
는 나이 ‘a’와 ‘b’를 비교한 결과를 반환하는데 a>b면 양수, a=b면 0, a<b면 음수를 반환해 반환값에 따라 정렬을 수행한다.
ChatGPT
만약 두 요소a
와b
에 대한 비교에서 양수가 반환되면,a
는b
보다 큰 것으로 간주되어a
와b
의 위치가 서로 바뀌게 됩니다. 이후에는b
와 다음 요소를 비교하여 계속해서 정렬이 이어지게 됩니다.