https://exercism.org/tracks/dart/exercises/raindrops
주어진 수가 몇으로 나누어지는지에 따라서 다른 소리를 리턴해야하는 문제이다.
String에 +를 이용해서 조건에 맞는 경우 소리를 추가하였다.
class Raindrops {
String convert(int number) {
String sound = '';
if (number % 3 == 0) sound += 'Pling';
if (number % 5 == 0) sound += 'Plang';
if (number % 7 == 0) sound += 'Plong';
if (sound == '') sound = number.toString();
return sound;
}
}
dart의 String은 불변객체(immutual)이기 때문에, +를 사용하면 기존 String 객체(여기서는 sound)가 추가된 것 처럼보이지만 사실은 매번 새로운 객체를 만들고 있다.
이를 확인하기 위해서 hashCode를 확인해보면, 매번 다른 것을 알 수 있다.
class Raindrops {
String convert(int number) {
String sound = '';
print(sound.hashCode);
if (number % 3 == 0) sound += 'Pling';
print(sound.hashCode);
if (number % 5 == 0) sound += 'Plang';
print(sound.hashCode);
if (number % 7 == 0) sound += 'Plong';
print(sound.hashCode);
if (sound == '') sound = number.toString();
print(sound.hashCode);
return sound;
}
}
Testing started at 11:31 오후 ...
1
294639720
1024999687
106133965
106133965
Process finished with exit code 0
불변객체를 사용한다면 String이 더 적절하겠지만, 매번 새로운 객체를 생성하는 것이 아니라 mutual 객체를 사용하고 싶다면 Stringbuffer 클래스를 사용하면 된다.
class Raindrops {
String convert(int number) {
StringBuffer sound = StringBuffer();
if (number % 3 == 0) sound.write('Pling');
if (number % 5 == 0) sound.write('Plang');
if (number % 7 == 0) sound.write('Plong');
if (sound.isEmpty) sound.write(number.toString());
return sound.toString();
}
}
String 클래스와 비교하기 위해 hashCode를 확인해보면 이번에는 동일한 객체를 수정하기 때문에 항상 같은 값이 출력되는 것을 확인할 수 있다.
class Raindrops {
String convert(int number) {
StringBuffer sound = StringBuffer();
print(sound.hashCode);
if (number % 3 == 0) sound.write('Pling');
print(sound.hashCode);
if (number % 5 == 0) sound.write('Plang');
print(sound.hashCode);
if (number % 7 == 0) sound.write('Plong');
print(sound.hashCode);
if (sound.isEmpty) sound.write(number.toString());
print(sound.hashCode);
return sound.toString();
}
}
Testing started at 11:40 오후 ...
671159104
671159104
671159104
671159104
Process finished with exit code 0
'Language > Dart' 카테고리의 다른 글
[Exercism] Anagram #sort!!!!! (0) | 2022.09.21 |
---|---|
[Exercism] Rna Transcription (0) | 2022.09.18 |
[Exercism] Gigasecond #Duration #Named parameter (0) | 2022.09.08 |
[Exercism] Hamming (0) | 2022.09.08 |
[Excercism] Space Age #enum (0) | 2022.09.08 |