TIL: Flutter | Dart (5) 클래스 - 221211

Lumpen·2022년 12월 11일
0

Dart

목록 보기
5/20

클래스

다트는 모든 것이 객체인 완전 객체지향 언어다
모든 객체는 클래스의 인스턴스다
모든 클래스는 Object 클래스의 자식이다

객체, 멤버, 인스턴스

클래스는 멤버를 가진다
멤버는 멤버 함수(메소드)와 멤버 변수(인스턴스 변수)로 구성된다
클래스를 사용하려면 객체를 생성해야 한다
객체를 생성하는 것은 클래스가 메모리에 올라가는 것이고
이 것은 인스턴스화 라고 부른다
메모리에 클래스가 할당되어 인스턴스가 된 것을 객체라고 부른다

플러터에서 객체 생성 시 new 키워드를 생략할 수 있다
나는 사용하는 쪽이 좋을 것 같다

String 같은 타입도 객체
변수도 객체다..
이쯤 되면 어질어질 하다

사용자가 개발한 사용자 정의 클래스도 하나의 커스텀 타입이 된다

생성자

클래스에는 생성자가 있다
생성자는 클래스가 인스턴스화 될 때 (객체 생성 시) 호출된다

  • 기본 생성자
  • 이름이 있는 생성자
  • 초기화 리스트
  • 리다이렉팅 생성자
  • 상수 생성자
  • 팩토리 생성자

기본 생성자

클래스를 구현할 때 생성자를 생략할 수 있다
이 때 암묵적으로 생성자가 존재한다

기본 생성자는 클래스명과 동일하고 인자가 없다
또한 기본 생성자는 부모 클래스의 기본 생성자를 호출한다

기본 생성자는 상속되지 않는다 -> 부모의 기본 생성자를 호출만 할 뿐

기본 생성자는 하나만 가질 수 있다
이름 있는 생성자를 선언하면 기본 생성자는 생략할 수 없다

이름이 있는 생성자

생성자에 이름을 부여한 형태로
클래스명.생성자명 으로 정의한다
한 클래스 내에 많은 생성자를 정의하거나 생성자를 명확히 할 경우에 사용

초기화 리스트

초기화 리스트를 사용하면 생성자의 구현부가 실행되기 전에 인스턴트 변수를 초기화할 수 있다
초기화 리스트는 생성자 옆에 콜론 (:) 으로 선언할 수 있다

생성자: 초기화 리스트 {

}

Person(): name = 'Kim' {

}

리다이렉팅 생성자

초기화 리스트를 이용해서 단순히 리다이렉팅을 위한 생성자를 만들 수 있다
이러한 생성자는 매인 생성자에게 위임을 하고, 몸체가 비어있다
단순히 기본 값을 주기 위해서 사용하는건지.. 잘 모르겠지만

String name;
int age;

Person(this.name, this.age) {
	
}

Person.initName(String name) : this(name, 20); // 리다이렉팅 생성자

상수 생성자

생성자를 상수처럼 만들어준다
해당 클래스가 상수처럼 변하지 않는 객체 (readonly)를 생성한다는 것이다
상수 생성자를 만들기 위해서는 인스턴스 변수가 모두 final이어야 하고
생성자에는 const 키워드를 사용한다

final은 상속될 수 없는 값으로 값도 상수처럼 변하지 않는다
여기서 변하지 않는다는 것은 1회 값으로 초기화된 이후 변하지 않는다는 것을 말한다

하나의 const 생성자를 사용하여 생성된 인스턴스를 받는 변수는
모두 같은 인스턴스를 참조하게 된다
const 생성자가 아닌 경우에는 똑같은 모양이라도 각각 새로운 인스턴스를 생성한다

팩토리 생성자

팩토리 생성자는 팩토리 패턴을 적용하기 편리하다
팩토리 패턴은 해당 클래스의 인스턴스를 매번 생성하지 않을 수 있도록 한다
보통 자식 클래스의 인스턴스를 리턴 받는다

인스턴스 생성을 자식 클래스에 위임하고
자식 클래스의 인스턴스를 리턴 받는다

profile
떠돌이 생활을 하는. 실업자는 아니지만, 부랑 생활을 하는

0개의 댓글