[Dart] Object Oriented Programming - 클래스 & 객체

yeahsilver·2023년 6월 19일
0
post-thumbnail

OOP(Object Oriented Programming: 객체 지향 프로그래밍)란 무엇인가?

  • 인간 중심적 프로그래밍 패러다임
  • 현실 세계의 사물들을 객체라고 생각하고, 해당 객체로부터 개발하고자 하는 필요한 특징을 뽑아와 프로그래밍하는 것
  • 프로그래밍에서 필요한 데이터를 추상화시켜 상태(속성, 어트리뷰트)와 행위(메소드)를 가진 객체를 생성하고, 그 객체간의 상호작용을 통해 로직을 구성

클래스와 객체

  • 클래스와 객체는 OOP에서 가장 기초적이고 필수적
  • 실세계 문제를 해결하기 위해 프로그래머들에게 도움을 줌

클래스와 객체 생성

  1. class 생성

    class Fruit{}
  2. 특성 (property) 추가

    class Fruit{
      String? color;
      String? taste;
      String? name;
    }
  3. 행위 (메소드) 추가

    class Fruit{
      String? color;
      String? taste;
      String? name;
      
      void eat() {
      	print("The taste of $name is $taste");
      }
    }
  • 여기까지 생성했다면, Fruit 클래스의 청사진을 생성한 것과 동일
  1. 객체 생성

    class Fruit{
      String? color;
      String? taste;
      String? name;
      
      void eat() {
      	print("The taste of $name is $taste");
      }
    }
    
    void main() {
    	final apple = Fruit();
    }
  2. 객체에 속성 주입

    class Fruit{
      String? color;
      String? taste;
      String? name;
      
      void eat() {
      	print("The taste of $name is $taste");
      }
    }
    
    void main() {
      final apple = Fruit();
      
      apple.color = "Red";
      apple.taste = "Sweet";
      apple.name = "Apple";
    }
  3. 객체에 행동 주입

    class Fruit{
      String? color;
      String? taste;
      String? name;
      
      void eat() {
      	print("The taste of $name is $taste");
      }
    }
    
    void main() {
      final apple = Fruit();
      
      apple.color = "Red";
      apple.taste = "Sweet";
      apple.name = "Apple";
      
      apple.eat();
      
      // cascode operator 사용 가능
      final banana = Fruit()
        ..color = "Yello"
        ..taste = "Sweet"
        ..name = "Banana"
        ..eat();
    }

Constructor

  • 클래스로부터 객체를 생성 시 가장 먼저 호출되는 부분
  • 3가지 종류의 constructor가 존재
    • Default Constructor
    • Parameter Constructor
    • Named Constructor

Default Constructor

: 매개변수가 없는 constructor

class Fruit {

 Fruit(){
   print("Fruit is Created");
 }

 String? color;
 String? taste;
 String? name;

  void eat() {
     print("The taste of $name is $taste");
  }
}

Parameter Constructor

  • 매개변수를 전달하는 constructor
  • 객체 속성을 초기화 할 때 주로 사용
class Fruit {
 Fruit({String color, String taste, String name}){
   this.color = color;
   this.taste = taste;
   this.name = name;
 }
}

void main() {
  final apple = Fruit(color: "Red", name: "Apple", taste: "Sweet");
}

Named Constructor

  • 다른 기능을 수행하기 위해서 둘 이상의 constrcutor가 필요할 때 사용

    class Fruit {
        Fruit.foo(){}
        Fruit.bar(){}
        //...
    }

Constructor 사용시 주의사항

  1. Constructor의 이름은 클래스 이름과 동일해야함
  2. Constructor는 아무것도 리턴하지 않음
  3. 객체가 생성될 때 딱 한번 호출됨

Reference

profile
Hello yeahsilver's world!

0개의 댓글