immutable 프로그래밍 : 한번 값들을 선언 하면 변경 할수 없도록 만드는것을 말함
이전시간에 작성한 생성자 글을 읽고 오면 이해하기 쉬울거임
Idol blackPink = Idol(
"블랙핑크",
['지수', '제니', '리사', '로제'],
);
class Idol{
String name ;
List<String> members;
// 일반생성자
const Idol(this.name, this.members);
// 네임드 생성자
Idol.fromList(List values)
: this.members = values[0], // 리스트 자료형 매개변수로 0번째 즉 1번째 입력값 this.members 넣고
this.name = values[1]; // 2번째 입력값 this.name 에 넣음
void sayHello()
{
print("안녕하세요 ${this.name}입니다.");
}
void introduce(){
print("저희 멤버는 ${this.members}가 있습니다.");
}
}
class Idol{
final String name ; // final 은 한번 선언되면 절대 값 변경 불가능임
final List<String> members;
// 우리 개발자들은 클래스 변수를 만들때 몇몇 상황을 제외하고 final을 쓰는 습관을 들여야함
const Idol(this.name, this.members);
// 네임드 생성자
Idol.fromList(List values)
: this.members = values[0],
this.name = values[1];
void sayHello()
{
print("안녕하세요 ${this.name}입니다.");
}
void introduce(){
print("저희 멤버는 ${this.members}가 있습니다.");
}
}
그래서 final 키워드를 작성해서 맴버변수를 선언 한다면 아래 코드를 작성 할수 없음
blackPink.name = "aloe_jk";
즉 중간에 값을 변경하지 못함
나중에 플러터 정리 글을 올릴때 언급하겠지만 사용자의 입력을 받을때라던지 등 값을 변경하게 할수 없을때
final 키워드를 붙일때도 있음 App 개발을 하는데 있어서 먹통이 되는 경우라던지 등 오류가 생길수 있음
그리고 생성자 앞에 const를 붙이는 방법이 있는데
const Idol(this.name, this.members); // const 생성자로 만들수도 있음
// const 생성자 사용하면 한번 선언시 값 변경이 불가능하게 됨
// const 생성자 장점은 const 생성자로 사용해도 되고 그냥 const 없이 기본 생성자로 사용해도 됨 즉 둘다 가능함
// 단 위에 인스턴스 만들때도 const 넣어줘야함
둘다 사용 가능하다는게 무슨말인가????
Idol blackPink = const Idol(
"블랙핑크",
['지수', '제니', '리사', '로제'],
);
Idol blackPink = Idol(
"블랙핑크",
['지수', '제니', '리사', '로제'],
);
이렇게 둘다 사용해도 오류가 나지 않음 나중에 플러터 쪽에서 사용할때 유용함
일단 알아두자~~!!
참고로 인스턴스 생성할때 인스턴스의 값이 모두 같다고 하더라도 두 인스턴스는 다른 것임
Idol blackPink = Idol(
"블랙핑크",
['지수', '제니', '리사', '로제'],
);
Idol blackPink2 = Idol(
"블랙핑크",
['지수', '제니', '리사', '로제'],
);
print("----------------");
print(blackPink == blackPink2); // 두개가 다르다고 나옴 false 나옴
항상 인스턴스는 만들때마다 메모리를 할당 받는데 그 메모리는 각각의 인스턴스 마다 다르기에 두개가같다고보기 어려운 것임
하지만!!!!!!!!!!!!! 컨스트 생성자를 사용해서
const 키워드를 이용한 인스턴스는 같은 거로 취급함
// 요약 const 로 생성한 인스턴스가 값이 모두 값다면 같은 인스턴스로 취급하고
// const가 없다면 값이 모두 값더라도 다른 인스턴스로 취급함
Idol blackPink1 = const Idol(
"블랙핑크",
['지수', '제니', '리사', '로제'],
);
Idol blackPink2 = const Idol(
"블랙핑크",
['지수', '제니', '리사', '로제'],
);
print(blackPink1 == blackPink2); // 값이 같다고 나옴
그이유는 쉽게 메모리를 공유한다라고 생각하면 된다.
'APP > Dart' 카테고리의 다른 글
dart 객체지향 프로그래밍 Private 속성 (0) | 2022.08.16 |
---|---|
dart 객체지향 프로그래밍 Getter and Setter (0) | 2022.08.16 |
dart 문법 총 정리 OOP (객체지향 프로그래밍) 1. 생성자 (0) | 2022.08.04 |
dart 문법 총 정리 5. typedef (0) | 2022.07.26 |
dart 문법 총 정리 4. 사용자 정의 함수, Enum (0) | 2022.07.26 |