본문 바로가기
Flutter

[Flutter] 플러터 객체지향 프로그래밍 - (1) 클래스

by jungha_k 2023. 6. 7.

클래스 :

일종의 설계도 (데이터가 보유할 속성, 기능을 정의)

 

인스턴스 :

클래스를 사용해서 객체를 선언시, 해당 객체를 일컫음

 

* 인스턴스화 되어야 실제 사용할 수 있는 데이터가 생성된다!

 

* 클래스 :

class Idol{
	String name = '블랙핑크';
    
    void sayName(){
    print('저는 ${this.name}입니다.');
    
    print('저는 $name입니다.');
}

메서드 : 클래스에 종속되는 함수

this 키워드 : 클래스 내부의 속성 지칭

(* 스코프 안에 같은 속성 이름이 하나만 존재할 경우 this 생략 가능)

 

 

* 생성자 :

클래스의 인스턴스를 생성하는 메서드

class Idol{

final String name;

//생성자 선언
Idol(String name) : this.name = name;

void sayName(){
	print('저는 ${this.name}입니다.');
	}
}

 

성자에서 입력받을 변수 - 일반적으로 final 으로 선언

: 인스턴스화한 다음에 변수 값 변경하는 실수를 막기 위함!

 

생성자 - 클래스와 같은 이름 사용

//생성자 선언
// 클래스와같은 이름 (매개변수 지정) : 입력받은 매개변수가 저장될 클래스 변수 지정
Idol(String name) : this.name = name;
class Idol{
	final String name;
    
    //this 사용시
    // 해당되는 변수에 자동으로 매개변수 저장됨
    Idol(this.name);
    
    void sayName(){
    	print('저는 ${this.name}입니다.');
    }
}

 

* 네임드 생성자 : 

네임드 파라미터와 유사

클래스 생성하는 여러 방법 명시하고 싶을때 사용

class Idol{
	final String name;
    final int membersCount;
    
// 1) 생성자
Idol(String name, int membersCount)
	: this.name = name,
    : this.membersCount = membersCount;
    
// 2) 네임드 생성자
// {클래스명.네임드 생성자명}
Idol.fromMap(Map<String, dynamic> map)
	: this.name = map['name'],
    	this.membersCount = map['membersCount'];

void sayName(){
	print('저는 ${this.name}입니다. 멤버는 ${this.membersCount}명 입니다.');
	}
}
void main(){
	// 기본 생성자 사용
    Idol blackPink = Idol('블랙핑크', 4);
    blackPink.sayName();
    
    // 네임드 생성자 (fromMap) 사용
    Idol bts = Idol.fromMap({
    'name': 'BTS',
    'membersCount': 7,
    });
    
    bts.sayName();
}

 

 

* 프라이빗 변수 : 

일반적인 언어에서의 프라이빗 변수? - 클래스 내부에서만 사용하는 변수

다트언어에서의 프라이빗 변수? - 같은 파일에서만 접근 가능

 

class Idol{
	// _로 시작하는 변수? : 프라이빗 변수
	String _name;
    
    Idol(this._name);
}

void main(){
	Idol blackPink = Idol('블랙핑크');
    // 같은 파일에서는 _name 변수에 접근 가능
    // 다른 파일에서는 _name 변수에 접근 불가능
}

 

* 게터 / 세터 : 

getter : 값을 가져올 경우

setter : 값을 지정할 경우

 

게터세터 사용시에 어떤 변수 노출, 변경 가능하게 할지 유연하게 정할 수 있음

(요새는 setter 거의 사용하지 않음)

class Idol{
	String _name = '블랙핑크';
    
    // getter
    // 매개변수 정의 안함
    // 프라이빗일 경우에 게터 사용시 간접적으로 _name 변수에 접근 가능
    String get name{
    	return this._name;
    }
    
    // setter
    set name(String name)
    this._name = name;
	}
}

댓글