Map<String, dynamic>word = {
"word" : "Apple",
"meaning" : "사과",
"example" : "Can I get an apple?"
};
이름있는 생성자 fromMap()
Word.fromMap(Map<String, dynamic> map) : word = map["word"], meaning = map["meaning"], example = map["example"]
fromMap의 반대
Map<String, dynamic>toMap() => { word = "word", meaning = "meaning", example = "example", };
class Word {
String word;
String meaning;
String example;
Word({required this.word, required this.meaning, required this.example});
}
void main() {
Word word = Word(word: "apple", meaning: "사과", example: "Give me an apple");
print(word);
}
word라는 변수에다가 Word생성자를 통해서 새로운 객체(Instance)가 생성되었다.
이것을 출력하면 flutter: Instance of 'Word'
Word의 인스턴스라는 결과가 나온다.
하지만 이건 우리가 원하는 결과 값이 아니다..
여기서 @override를 넣어주면 되는데
@override는 기존의 (부모)기능을 새로 재정의한다 라는 의미이다
class Word extends Object {
String word;
String meaning;
String example;
Word({required this.word, required this.meaning, required this.example});
@override
String toString() {
return "안녕";
}
}
void main() {
Word word = Word(word: "apple", meaning: "사과", example: "Give me an apple");
Word word1 = Word(word: "Pen", meaning: "펜", example: "Give me an apple");
Word word2 = Word(word: "Paper", meaning: "종이", example: "Give me an apple");
Word word3 =
Word(word: "Dictionary", meaning: "사전", example: "Give me an apple");
Word word4 = Word(word: "Phone", meaning: "휴대폰", example: "Give me an apple");
print(word.toString());
print(word1.toString());
print(word2.toString());
print(word3.toString());
print(word4.toString());
}
@override String toString() { return "안녕"; } }
이것을 추가하면 toString의 값이 더 이상 flutter: Instance of 'Word'
이 값이 아닌 우리가 원하는 값인 안녕
으로 값이 출력된다
@override
String toString() {
return "$word";
}
잘 나오는지 테스트를 했으니 "$word"
를 써주고 값을 받아오면
이렇게 값이 잘 받아와진다. 하지만 이렇게 쓰면 String으로 출력한 느낌이라
@override
String toString() {
return "Word($word)";
}
Word라는 인스턴스다
라는 느낌으로 Word안에다가 넣어주면
이렇게 Word안에서 출력이 된다.
@override
String toString() {
return "Word($word / $meaning / $example)";
}
이렇게 해주면 모든 결과 값을 한번에 다 나오게 할 수 있다.
3과 3은 같다
print(3 == 3); //ture
"3"과 "3"은 같다
print("3" == "3"); //ture
위에 두개 결과는 우리가 예상한 결과이다.
하지만
class Word extends Object {
String word;
String meaning;
String example;
Word({required this.word, required this.meaning, required this.example});
@override
String toString() {
return "Word($word / $meaning / $example)";
}
}
void main() {
Word wordA = Word(word: 'Apple', meaning: "사과", example: "Give me an apple");
Word wordB = Word(word: 'Apple', meaning: "사과", example: "Give me an apple");
print(wordA == wordB);
}
wordA와 wordB는 보기에는 값이 같아 보이지만 false값이 나온다.
이럴때
void main() {
Word wordA = Word(word: 'Apple', meaning: "사과", example: "Give me an apple");
Word wordB = Word(word: 'Apple', meaning: "사과", example: "Give me an apple");
print(wordA.hashCode);
print(wordB.hashCode); //false
}
hashCode코드를 통해서 보았을 때 각자의 개인 코드를 가지고 있기 때문에 같다라고 할수가 없다.
class Word extends Object {
String word;
String meaning;
String example;
Word({required this.word, required this.meaning, required this.example});
@override
operator ==(Object other) {
print(other);
return true;
}
}
void main() {
Word wordA = Word(word: 'Apple', meaning: "사과", example: "Give me an apple");
Word wordB = Word(word: 'Apple', meaning: "사과", example: "Give me an apple");
print(wordA == 3);
// print(wordB.hashCode);
}
operator == //대입연산자의 대한 행동을 우리가 정의하겠다.