APP/Dart

dart 문법 총 정리 OOP (객체지향 프로그래밍) 1. 생성자

개발자 aloe 2022. 8. 4. 20:18
728x90

OOP 핵심개념 클래스로 설계도를 만들고 실제 사용하는건 인스턴스 라고 생각 하면 된다.

ex 붕어빵 기기 => 붕어빵(크림맛, 녹차맛, 김치맛 ..... )

 

 

클래안에 아래와 같은 것을 정의 하는 방법

// Idol class
// name (이름) - 변수
// members (맴버들) - 변수
// sayHello (인사) - 함수
// introduce (맴버소개) - 함수

 

이게 가장 기본적인 클레스 구조임 

생성자라는 것은 이전글에서 소개했듯이 함수에 파라미터의 값에 따라 반환 값과 내부에 값이 각각 달라지는 것 처럼  처럼 럼 클래스에서도 각각 값을 인스턴스에 대입해주기 위해서 사용하는 것인데 

 

기본적으로 대부분의 객체지향 언어가 그렇듯이 클래스 명을 그대로 입력해서 들어오는 변수에 대한 정의 와 이 값을 넣어줄 변수들을 정의 해주면 됨 

통상적으로 외부 매개변수와 내부 클레스 변수(멤버변수)의 이름을 같게 사용하고 클래스 변수를 나타내게 해주는

this 키워드를 사용함 즉 this(클래스),name(맴버변수에) = name(외부 변수 값을 넣어주겠다) 

 

Idol(this.name, this.members);

위에 코드와 사진에 코드는 같은 기능을 하는데 좀더 쉽게 작성 하는 방법임 알아서 순서대로 클래스 맴버 변수에 값을 넣겠다는 문법임 지우고 위에코드 사용해도 전~혀 문제 없음 

 

위에서 설명한건 일반 생성자임 

 

네임드 생성자

하지만 좀더 특히하게 사용할수 있는 네임드 생성자가 있음 

 

참고 지식 

인자( Argument ) 는 어떤 함수를 호출시에 전달돼는 값을 말하고
매개 변수( Parameter ) 는 그 전달된 인자를 받아들이는 변수다.

 

클래스명.원하는이름(자료형 매개변수)

 

class Idol{
String name ;                
List<String> members;

// 일반생성자 
const Idol(this.name, this.members);  

// 네임드 생성자 

Idol.fromList(List values)   
    : this.members = values[0],  // 리스트 자료형 매개변수로 0번째 즉 1번째 입력값 this.members  넣고
      this.name = values[1]; 	// 2번째 입력값  this.name 에 넣음

  

  void sayHello()
{
  print("안녕하세요 ${this.name}입니다.");
}

void introduce(){
  print("저희 멤버는 ${this.members}가 있습니다.");
}

}

 

클레스를 정의 했으니 사용해봐야함 

 

일반 생성자를 통해 생성 

참고로 다른 객체 지향 언어에서는 인스턴스 만들때 new 키워드를 사용하는데 dart는 그런게 필요 없음 

즉   Idol blackPink = Idol( ~~~)      ==   Idol blackPink =  new Idol( ~~)  같다는 것임 

  Idol blackPink = Idol( 
    "블랙핑크",     
    ['지수', '제니', '리사', '로제'],    
  );
  
  
  
  print(blackPink.name);
  print(blackPink.members);
  blackPink.sayHello();
  blackPink.introduce();

네임드 생성자를 통해 생성 

네임드 생성자 사용할때 지정했던 이름 사용해서 만들면 됨  

    Idol BTS = Idol.fromList(  
      [
        ['RM', '진', '슈가', '뷔', '정국'],
        "BTS",      
      ]
    );


  print(BTS.name);
  print(BTS.members);
  BTS.sayHello();
  BTS.introduce();

 

둘중 어느것을 통해 만들어도 상관 없음 생성자 2개만들어서 둘다 사용해도 상관 없음 

 

728x90