본문 바로가기

프레임워크/다트언어

클래스와 생성자는 어떻게 사용할까?

반응형
  • 오늘은 다트에서 클래스의 선언과 생성하는 방법 그리고 객체 멤버와 클래스 멤버 등등을 소프트웨어 공학 개념과 더해 살펴볼거에요!
  • 조금 어려울 수도 있으니 잘 따라와 주세요!

클래스 선언과 생성

  • 다트에서도 마찬가지로 다른 객체지향 언어와 같이 클래스 선언을 class라는 예약어를 통해 해준답니다. 아래 코드로 예를 보시죠!
class User{
  String name = "Minseo";
  int age = 24;

  void hello(){
    print('hello ${name}, age: ${age}');
  }
}
  • 위 처럼 다른 보시면 자바 코드랑 굉장히 유사하죠? 이런식으로 클래스 선언을 해주시면 됩니다!

클래스를 객체로 만들어주기!

  • 위에서 만든 클래스로 객체를 만들어주기 위해서는 new 예약어를 사용해 객체화 시켜주어야 하는데요. 다트에서는 이런 new예약어를 사용해도 되고, 안해도 됩니다!
User user1 = new User();
User user2 = User();
  • 보통은 잘 안써주니 안쓰는게 좋을듯 합니다! 사진보면 IDE에서도 밑줄치고 new 없애라구 하더라구요.그래서 저는 보통 사용할 때 new 빼고 써줘요!
  • Untitled

클래스 맴버와 객체 멤버

  • 위에서 우리는 클래스와 객체가 무엇인지 알아보았는데요! 여기서 멤버라는 개념이 등장을 해요. 멤버는 클래스 멤버와 객체 멤버가 존재하는데, 위 내용을 기반으로 생각해보면 클래스 멤버는 클래스에서 쓰는거고, 객체 멤버는 객체에서 쓰는 것을 유추해볼 수 있죠. 코드로 한번 볼게요
class User{
  String name = "Minseo";
  int age = 24;
  static String classvaribale = 'user';

  void hello(){
    print('hello ${name}, age: ${age}');
  }
}
  • 코드에서 static 예약어가 보이시나요? 바로 이 static예약어가 클래스 맴버로 만들어주는 것이에요. 그럼 static이 아닌 것은 무엇일까요? 바로 객체 멤버가 되는겁니다!
  • 자 그럼 사용법을 한번 봐볼게요.
void main()
{
  User user1 = new User();
  User user2 = User();

  print(user1.name);
  print(User.classvaribale);
}
  • 클래스 멤버와 객체 멤버가 한 눈에 보이시죠? 쉽게 생각해서, 그냥 클래스 변수는 클래스를 객체로 안만들어도 써줄 수 있는 것을 의미하죠! 잘 써먹어봐요!

생성자

  • 자바에서도 생성자가 있었죠? 어떻게 만들었는지 기억하세요?
  • 바로 클래스 이름을 따라서 만들었죠! 다트에서도 마찬가지에요 클래스 이름과 똑같은 메서드를 만들면됩니다!
class User{
  late String name;
  late int age;
  static String classvaribale = 'user';

  User(String name, int age){
    this.name = name;
    this.age = age;
  }

  void hello(){
    print('hello ${name}, age: ${age}');
  }
}
  • 위에서 만들었던 User클래스에 대한 생성자를 만들어보았어요! 잘 보시면 멤버변수에 배웠던 late 예약어가 보이시죠? 바로 여기서 써먹을 수 있어요 name, age 변수는 생성자에서 초기화 해주기 때문에 나중에 초기화 된다는 의미로 쓸 수 있겠죠?자 위에서 보았던 초기화 방법은 흔히 자바에서 써먹던 방법이구, 다트에서는 좀 더 색다르고, 이해하기 편하게 초기화 방법을 사용해줍니다. 코드로 나열해볼게요.위와 같이 생성자 매개변수로 바로 맴버변수를 넣을 수 있어요!위 와 같이 초기화 목록을 사용할수도 있어요!
  • User(String name, int age):this.name = name, this.age = age {}
  • class User{ late String name; late int age; static String classvaribale = 'user'; User(this.name, this.age); void hello(){ print('hello ${name}, age: ${age}'); } }
  • 초기화 방법

여러 개의 생성자 만들기

  • 다트는 자바처럼 함수 오버로딩을 지원하지 않아서 다른 방법으로 이를 구현해주고 있어요
class User{
  late String name;
  late int age;
  static String classvaribale = 'user';

  User(String name, int age):this.name = name, this.age = age {}
  User.first(){}
  User.second(){}

}

보시면 User 생성자 밑으로 User.first()가 보이시죠? 이런식으로 생성자를 따로 지정해 줄 수 있습니다!

void main()
{
  User user1 = User.first();
  User user2 = User.second();

}

그럼 위처럼 객체를 생성해줄 때 생성자를 바꿔 사용해줄 수 있습니다!

팩토리 생성자

  • 다트에서는 객체를 만들어주기 위한 팩토리 생성자라는 개념이 존재합니다.
  • 코드로 보시죠!
class User{
  User._instance();
  factory User(){
    return User._instance();
  }
}

위 처럼 팩토리 생성자는 외부관점에서는 단순히 생성자로 사용이 되지만, 그 내부에서는 상황에 맞는 객체를 준비해 반환하는 역할을 해줍니다!

상수 생성자

  • 클래스의 모든 변수를 초깃값으로만 사용하고 싶다! 할 때 사용합니다!
class User{

  final String name;
  final int age;

  const User(this.name, this.age);

}

이런식으로 코드를 만들어줍니다! → 이렇게 하면, 상수 객체가 하나 생성되는거죠!

이렇게 오늘은 다트에서 클래스가 어떻게 사용되고, 생성자는 무엇이 있는지 알아보았어요! 특히 팩토리 생성자는 소프트웨어 공학 설계부분에서도 중요하게 생각되는 내용이니 확실하게 알고 써먹으면 좋을 것 같아요!

반응형