본문 바로가기

[Flutter, Dart 언어] 안드로이드 개발을 위한 첫걸음 Dart 문법 정리-2편class의 상속, final const의 차이점, 삼항연산자

ironwhale 2021. 9. 30.

오늘은 상속에 대해 공부한 내용을 공부하였습니다.  역시 "모두가  할 수 있는 플러터 UI 입문"을 보고 공부하였습니다. 

플러터는 기본적으로 StatefulWidget, StatelessWidget를 상속을 받아 사용하고 있습니다. 

 

1. 기본적인 상속에 사용 형태

void main(){  
 CheeseBerger cb = CheeseBerger();  
}

class Burger{
  Burger(){
    print("buger!!!");
  }
}

// extends 를 사용하고 상속 받을 Burger를 사용하면 상속이 됩니다. 

class CheeseBerger extends Burger{  
  CheeseBerger(){
    print("cheese burger!!!");
  }
}

결과

buger!!!

cheese burger!!!

결과를 보면 부모의 생성자 내부 스택인 buger!!! 가  실행되고 그다음 cheese burger!!! 가 실행되는 걸 알수 있습니다. 

 

2. final 키워드와 이니셜 라이져(:) 키워드

final은 const와 비슷한데 거의 final을 사용하는것 같습니다. 둘다 한번 선언하면 나중에 바꿀수 없다는 공통점이 있는데 

const는 컴파일 시점에 초기화되고 final은 프로그램이 실행되는 시점에 초기화된다는 차이가 있습니다. 

 다트언어는 우리가 열심히 코딩을 하고 실행버튼을 누르면 우선 컴퓨터가 알아들을 수 있는 기계어로 변환하는 컴파일을 진행한후에 실행이 됩니다. 따라서 final은 컴파일이 끝나고 실제 프로그램이 실행될때 초기화가 되고 const는 기계어로 변환되는 과정에서 초기화가 된다고 이해하였습니다. 다만 저는 비전공자이다 보니 틀린 부분이 있을 수 있느니 제대로 아시는 분은 알려주시기 바랍니다.

 

이니셜 라이즈는 쓰면 아래 코드와 같이 자식의 생성자가 실행되기전에 부모의 생성자가 실행됩니다. 

void main(){
  
 CheeseBerger cb = CheeseBerger("Burger!!!");
 print(cb.name);
  
}

class Burger{  
  final String name;  
  Burger(this.name);
}


class CheeseBerger extends Burger{
  
  CheeseBerger(String name):super(name);
}

 

3. 삼항연산자

간단하게 사용할수 있는 if문이라고 생각하시면 될거 같습니다. 

? 앞에 조건에 따라 :으로 참일때 거짓일때를 구분합니다.

void main(){
  int point = 60;
  print(point >=60 ? "합격":"불합격");
}

댓글