[Dart] #5 Class

Hwang gend·2023년 11월 5일
0

Dart

목록 보기
5/5

Class

dart가 객체지향언어라고 했을 때 부터 class부분은 가장 중요하다고 말해왔다.
main함수에서는 변수를 선언할때 var타입으로 특정 변수형을 선언할 필요가 없다고
했지만 class에서는 변수타입을 명시해줘야한다.
인스턴스 생성시에

class Player{......}
void main(){
	var player = Player();

new를 붙여도 되고 안붙여도 된다.

this 불필요

원래 c++, java에서 class내부의 함수를 사용할때 파라미터와 같은 변수명을 사용하거나
다른 어떤 경우일때 내부의 변수를 지칭할때 this.name 이런 식으로 해주는데
dart에서도 그렇게 했을때 작동은 한다.
그러나 dart에선 같은 이름의 변수를 사용하는 것이 아니라면
this를 사용하지 않는 것을 권고한다.

Constructor 생성자

생성자는 다른 언어에서 사용하는 것과 크게 다를바가 없다.
원래 클래스 이름과 동일하게 매개변수를 받아와서 생성자로
변수들을 초기화 해주는데 이때 저번에 배웠던 late가 매우 유용하다.
생성자를 매우 편하게 만들 수 있는 방법이 dart에 있는데
이는 java에서 하위클래스가 상위클래스에 super로 생성자 호출할때랑 비슷해 보인다.

Player(this.name, this.xp);

이렇게 간단하게 생성자를 만들어 줄 수가 있다.

Named Constructor Parameters

class가 매우 커지거나 복잡해질때 유용함
named parameter와 똑같이 {}를 넣어주고 매개변수를
받아올 때도 거의 완벽하게 동일하게 해준다.

Named Constructor

비슷한 class인데 조금 다르게 동작하는 생성자를
가지고 싶다면 named constructor을 사용한다.

var player = Player.createBluePlayer();

Player뒤에 .을 붙이고 따로 생성해줄 생성자를 적어주면 끝이다.
그런 다음에 class로 돌아가서 Player.createBluePlayer() 생성자를 생성한다.
여기서 새로운 문법이 나오는데 (많이 쓰인다고 함) :을 통해 변수값을 넣어준다.

Player.createBluePlayer({
	required String name,
    required int age,
 }) : this.age = age,
 	  this.name = name,
      ......;

Cascade Notation

..operator를 사용하면
이미 생성된 클래스 인스턴스나 새로 생성하는 인스턴스의 파라미터를
아래와 같이 ..으로 접근이 가능하다.

void main(){
	var hwang = Player(매개변수~~~~);
    var gend = hwang
    	..name = 'hwang gend'
        ..xp = 120000
        //이런식
    }

Enum

enum은 새로운 데이터 타입을 만들어 낸다.
실수로 red, blue팀 둘 중에 하나인데 redd나 이렇게 오타가 타는 경우도 있을 수 있다.
그럴때 enum으로 red, blue 두 개를 미리 선언해놓으면 나중에 사용할때 헷갈릴 것 없이
안전하게 사용할 수 있다.

enum Team = { red, blue};
~~~
..team = Team.red
~~~

이런 식으로 사용이 가능하다.

Abstarct Classes

추상 클래스는 java에서도 사용하듯
구현할 클래스 내부의 메소드를 어떻게 작성할지 청사진을 제공한다.
그렇게 작성된 추상 클래스를 extends로 상속받으면 된다.
그 외에도 java와 거의 동일하다.
Flutter에서는 그리 많이 사용치는 않는다고 한다.

Inheritance 상속

이것도 정말 java랑 판박이다.
문법적인 것만 좀 보자면
Human class 생성자에서는 name이란 파라미터가 필요하다는 가정을 하겠다.

class Player extends Human(){
	Player({required this.team, required String name}): super(name);
    }
}

이런 식으로 사용한다. 그 외에도 override 함수나 이런 부분들은
동일 함으로 따로 서술하지 않겠다.

Mixin

생성자가 없는 클래스를 의미한다.
Flutter에서 자주 사용된다고 하는데
extend를 사용하는게 아니라 with 키워드를 사용하는데
이를 통해 메소드나 변수를 모두 긁어오는 느낌으로 이해하면 될 것이다.
부모클래스 자식클래스를 생각하지 않아도 되는게 좋고
주의할 점은 생성자가 없는 클래스여야 한다는 것이다.

profile
화이팅~

0개의 댓글