본문 바로가기

오름캠프 flutter과정 정리

11일차 정리(제네릭 열거형 문자열 조작)

제네릭, 열거형

타입이 없을때의 문제점(다이나믹 dynamic)

  1. 런타임 에러가 나기 쉽다.
  2. IDE가 컴파일 에러를 미리 찾을 수 없다.

제네릭 (Generic)

타입을 나중에 원하는 형태로 정의할 수 있음

타입 안전(type safe) 효과

"List<E>" Map<K,V> class

< >(꺽쇠) 사이에 제네릭 들어감 리스트 E , 맵 K,V 가 제네릭임

제네릭으로 되어 있는 것들은 타입을 구체적으로 지정해 주어야 한다.

구체적으로 지정해 주지 않는 다면 제네릭이 dynamic 으로 묵시적으로

처리된다.

제네릭 안쓰고 final 쓰면 묵시적으로 dynamic 쓰지 않는다.

제네릭을 활용하여 클래스 만들 시 제약을 추가 하기 위해서 제네릭에 extends 사용가능

class Pocket<E extends Book>{

} //해당클래스는 제네릭에 Book클래스를 상속하는 것만 올 수 있음

열거형

정해 둔 값만 넣어둘 수 있는 타입

값을 상수로 지정해둘 경우 생길 수 있는 휴먼에러 막을 수 있음

열거형을 사용할 경우 switch와 셋트로 같이 쓰면 더욱 휴먼에러를 막을 수 있다

그이유는 switch 와 열거형의 조합은 모든 케이스를 강제로 작성해야 함


문자열

문자열 결합 (+ 연산자 또는 ${} 활용)

 

Hello’ + ‘ Dart’ => ‘Hello Dart’

 

String word = 'world'; String message = 'Hello ${greeting}';

 

문자열 일부 떼어내기 (subString())

 

문자열 일부 치환 (replaceAll() ,replace())

 

문자열 분리 (split())

 

문자열 대소문자 변경(toLowerCase(), toUpperCase())

 

문자열 검색 (indexOf())

 

문자열 길이 length , 문자열 null및 빈문자열 확인 isEmpty

 

문자열 검색

contains() : 포함 관계

endsWith() : 끝나는 단어가 맞는지

indexOf() : 단어가 몇 번째에 있는지

lastIndexOf() : 뒤에서 몇 번째에 단어가 있는지

StringBuffer

write() 메서드로 결합한 결과를 내부 메모리(버퍼)에 담아 두고 toString()으로 결과를 얻음

final buffer = StringBuffer('Dart');

buffer
		..write(' and ')
		..write(' Flutter ');

.. (cascade) 연산자 : void 리턴인 함수의 앞에 사용하면 해당 객체의 레퍼런스를 반환하여 메서드 체인을 사용할 수 있음

StringBuffer의 write 보다 ‘+’ 연산자가 느린 이유

String 인스턴스는 불변 객체 (immutable)여서 +연산을 하게 되면 객체가 추가로 생성되야 한다.

참고로 객체생성은 비용(컴퓨터의 리소스)이 많이 든다.

Accessor(실제 내부값을 접근만 한다 getter), Mutator(실제 내부값을 변경하는것)

메서드마다 Accessor의 성질을 가지거나 mutator의 성질을 가지고 있는데

String이 제공하는 모든 메서드는 Accessor성질을 가짐