본문 바로가기
Flutter

[Flutter] 플러터 객체지향 프로그래밍 - (4) 제네릭과 static, 캐스케이드 연산자

by jungha_k 2023. 6. 8.

* 제네릭

: 클래스, 함수의 정의를 선언할 때가 아니라 '인스턴스화' 하거나 '실행'할 때로 미룬다.

특정 변수의 타입을 하나의 타입으로 제한하고 싶지 않을 때 자주 사용!

 

ex) List<String> → String 값으로 구성된 리스트를 생성하겠다!

 

// 인스턴스화 할 때 입력받을 타입 : <T>
class Cache<T> {
	// data 타입 : 추후에 입력될 T 타입으로 지정 
	final T data;
    
    Cache({
    required this.data,
});
}

void main(){
	// T의 타입 → List<int> 로 지정!!! ⭐⭐⭐
	final cache = Cache<List<int>>(
    data: [1,2,3],
);

print(cache.data.reduce((value, element) => value + element));
}

 

* 많이 사용되는 제네릭 문자

문자 설명
T 변수 타입 표현할 때 흔히 사용
ex) T value
E 리스트 내부 요소들의 타입을 표현할 때 흔히 사용
ex) List<E>
K 키를 표현할 때 흔히 사용
ex) Map<K, V>
V 값을 표현할 때 흔히 사용
ex) Map<K, V>

* 스태틱 (static)

: 변수, 메서드 등 모든 속성 → '클래스의 인스턴스' 에 귀속된다!

But static 키워드 사용시 → '클래스 자체' 에 귀속된다.

 

class Counter{
	// static 변수 선언
	static int i = 0;
    
Counter(){
	i++;
    print(i++);
    }
}

void main(){
	Counter count1 = Counter();
    Counter count2 = Counter();
    Counter count3 = Counter();
}

static 변수 i → Counter 클래스에 귀속되기 때문에, 인스턴스 호출시 1씩 증가

 

클래스에 직접 귀속되기 때문에, 생성자에서 static 값 지정하지 못함!

인스턴스끼리 공유해야하는 정보에 static 지정한다.


* 캐스케이드 연산자 

: 인스턴스에서 해당 인스턴스의 속성, 멤버 함수를 연속해서 사용하는 기능

→ 더욱 간결한 코드를 사용할 수 있다.

 

'..' 기호 사용

void main(){
	// cascade operator : ..
    // 선언한 변수 메서드를 연속으로 실행 가능!

	Idol blackpink = Idol('블랙핑크', 4)
    ..sayName()
    ..sayMembersCount();
}

댓글