day_by_day

10. Immutable 프로그래밍과 Getter, Setter, private keyword 본문

QA Automation/dart

10. Immutable 프로그래밍과 Getter, Setter, private keyword

kokorii_ 2023. 5. 16. 17:19

0. 설명

  • 최근 프로그래밍 트렌드는 한번 값들을 선언하고나면 변경할 수 없도록 하는 것이 추세 
  • 처음 선언한 값을 바꾸는걸 선호하지 않으며, 새로운 값이 필요할땐 새로운 인스턴스를 선언하여 사용하도록 권장
  • 그래서 클래스의 멤버 변수에 final을 선언하는 습관이 필요함

1. const constructor

  • 멤버변수가 final 로 선언될 경우 constructor는 const constructor로 선언
  • 일반 constructor를 사용할 경우 
void main() {
  Idol blackpink = Idol('Black Pink', ['지수', '제니', '리사','로제']);
  Idol blackpink2 = Idol('Black Pink', ['지수', '제니', '리사','로제']);
 
  print(blackpink == blackpink2); //false 
 
}

class Idol{
  final String name;
  final List<String> members;
  
  Idol(this.name, this.members);
  
  Idol.fromList(List values)
    : this.members = values[0], this.name = values[1];
  
  void sayHello(){
    print("Hi We are ${this.name}");
  }
  
  void introduce(){
    print("${this.members}가 있습니다.");
  }  
}
  • const constructor를 사용할 경우 
void main() {
  Idol blackpink = const Idol('Black Pink', ['지수', '제니', '리사','로제']);
  Idol blackpink2 = const Idol('Black Pink', ['지수', '제니', '리사','로제']);
 
  print(blackpink == blackpink2); //true
 
}

class Idol{
  final String name;
  final List<String> members;
  
  const Idol(this.name, this.members);
  
  Idol.fromList(List values)
    : this.members = values[0], this.name = values[1];
  
  void sayHello(){
    print("Hi We are ${this.name}");
  }
  
  void introduce(){
    print("${this.members}가 있습니다.");
  }

  
}

2. Getter

  • 클래스의 멤버 변수를 가져올 때 사용함
  • 동일한 기능의 함수 구현도 가능하지만 프로그래밍 시 의미가 다름
  • 간단히 데이터를 받아오는 경우 getter를 사용하고, 좀 더 복잡한 로직을 구현할 때는 함수를 사용
void main() {
  Idol blackpink = Idol('Black Pink', ['지수', '제니', '리사','로제']);
 
  Idol bts = Idol.fromList([['rm', '진', '슈가', '지민', '뷔', '정국','제이홉'], 'BTS']);
  
  print(blackpink.firstMember);
  print(bts.firstMember);
 
}

class Idol{
  String name;
  List<String> members;
  
  Idol(this.name, this.members);
  
  Idol.fromList(List values)
    : this.members = values[0], this.name = values[1];
  
  void sayHello(){
    print("Hi We are ${this.name}");
  }
  
  void introduce(){
    print("${this.members}가 있습니다.");
  }

  String get firstMember{
    return this.members[0];
  }
  
}

3. Setter

  • 클래스 멤버 변수의 값을 변경할 때 사용
  • Immutable 프로그래밍에서 봤을때 사용 의미 없음. 최근에는 잘 사용하지 않음
  • setter를 쓰면 final, const의 의미가 없어지기 때문에 기능과 개념만 알고 있으면 됨 
  • setter는  무조건 하나의 파라미터만 받을 수 있음 
void main() {
  Idol blackpink = Idol('Black Pink', ['지수', '제니', '리사','로제']);
 
  Idol bts = Idol.fromList([['rm', '진', '슈가', '지민', '뷔', '정국','제이홉'], 'BTS']);
  
  print(blackpink.firstMember);
  print(bts.firstMember);
  
  //이게 파라미터를 하나밖에 못받는 이유
  blackpink.firstMember = 'code factory';
  bts.firstMember = 'code factory';
  
  print(blackpink.firstMember);
  print(bts.firstMember);
 
}

class Idol{
  String name;
  List<String> members;
  
  Idol(this.name, this.members);
  
  Idol.fromList(List values)
    : this.members = values[0], this.name = values[1];
  
  void sayHello(){
    print("Hi We are ${this.name}");
  }
  
  void introduce(){
    print("${this.members}가 있습니다.");
  }

  String get firstMember{
    return this.members[0];
  }
  
  set firstMember(String name){
    
    this.members[0] = name;
    
  }
}

4. private

  • 같은 코드 파일 안에서만 접근 가능한 변수
  • private 지정 방법 : 이름 앞에 언더스코어(_)
    • ex) class _Idol{}, _Idol(this.name);
  • 클래스 자체를 포함하여 클래스 내 메소드, 멤버 변수는 모두 private 선언 가능

'QA Automation > dart' 카테고리의 다른 글

12. Method Override  (0) 2023.05.17
11. 상속(Inheritance)  (0) 2023.05.17
9. class : 기본, 생성자와 this  (0) 2023.05.16
8. Typedef  (2) 2023.05.16
7. 함수(function)  (1) 2023.05.16