본문 바로가기
Dart/Dart Programming language

[초급] 객체 지향 프로그래밍 기초/클래스 및 객체의 개념

by Maccrey Coding 2024. 9. 5.
반응형

 
Dart는 현대적인 객체 지향 프로그래밍 언어로, 클래스와 객체를 사용하여 코드의 재사용성과 유지보수성을 높일 수 있습니다.
이 글에서는 Dart의 클래스와 객체의 기본 개념을 초보자들도 이해할 수 있도록 쉽게 설명하고, 객체 지향 프로그래밍의 핵심 요소를 소개합니다.

1. 클래스와 객체의 기본 개념

클래스란?

클래스는 객체를 생성하기 위한 설계도 또는 청사진입니다. 클래스는 객체가 가져야 할 속성(변수)과 행동(메서드)을 정의합니다. Dart에서는 class 키워드를 사용하여 클래스를 정의합니다.
예를 들어, Person이라는 클래스를 정의할 때는 다음과 같은 형태가 됩니다.

class Person {
  String name;
  int age;

  void greet() {
    print('Hello, my name is $name and I am $age years old.');
  }
}

위의 코드에서 Person 클래스는 두 개의 속성(name, age)과 하나의 메서드(greet)를 가지고 있습니다.

객체란?

객체는 클래스로부터 생성된 인스턴스입니다. 객체는 클래스에서 정의한 속성과 메서드를 가지고 있으며, 클래스를 기반으로 여러 개의 객체를 생성할 수 있습니다.
클래스를 사용하여 객체를 생성하는 방법은 다음과 같습니다.

void main() {
  // Person 클래스의 인스턴스 생성
  Person person1 = Person();
  person1.name = 'Alice';
  person1.age = 30;

  // 메서드 호출
  person1.greet(); // 출력: Hello, my name is Alice and I am 30 years old.
}

* 인스턴스 : Class는 변수와 다르게 인스턴스를 생성하지 않으면 메모리에 올라와 있지않으므로 찾을 수가 없습니다. 인스턴스를 통해 메모리에 올리는 작업해주어야합니다.

2. 생성자(Constructor)

생성자는 객체가 생성될 때 자동으로 호출되는 특별한 메서드입니다. 생성자는 객체의 초기화 작업을 수행하며, 클래스 이름과 동일한 메서드로 정의합니다.

class Person {
  String name;
  int age;

  // 생성자
  Person(this.name, this.age);

  void greet() {
    print('Hello, my name is $name and I am $age years old.');
  }
}

생성자를 사용하면 객체 생성 시 초기값을 지정할 수 있습니다.

void main() {
  Person person1 = Person('Bob', 25);
  person1.greet(); // 출력: Hello, my name is Bob and I am 25 years old.
}

3. 상속(Inheritance)

상속은 기존 클래스의 속성과 메서드를 새로운 클래스에서 재사용할 수 있게 해줍니다. Dart에서는 extends 키워드를 사용하여 상속을 구현합니다.

class Student extends Person {
  String studentId;

  Student(String name, int age, this.studentId) : super(name, age);

  void study() {
    print('$name is studying.');
  }
}

Student 클래스는 Person 클래스를 상속받아 name, age 속성과 greet 메서드를 재사용하며, 추가로 studentId와 study 메서드를 추가합니다.

void main() {
  Student student1 = Student('Charlie', 20, 'S1234');
  student1.greet(); // 출력: Hello, my name is Charlie and I am 20 years old.
  student1.study(); // 출력: Charlie is studying.
}

4. 캡슐화(Encapsulation)

캡슐화는 객체의 속성과 메서드를 하나의 단위로 묶고, 외부에서 접근하지 못하도록 보호하는 개념입니다. Dart에서는 접근 제어자를 사용하여 캡슐화를 구현합니다.

class Person {
  String _name; // private 변수
  int _age; // private 변수

  Person(this._name, this._age);

  String get name => _name; // getter
  void set name(String name) => _name = name; // setter

  void greet() {
    print('Hello, my name is $_name and I am $_age years old.');
  }
}

여기서 _name과 _age는 private 변수로, 외부에서는 직접 접근할 수 없고, get과 set 메서드를 통해 접근합니다.

 

Dart에서 객체 지향 프로그래밍의 기본 개념인 클래스와 객체는 코드의 구조를 명확하게 하고, 재사용성을 높이며, 유지보수를 쉽게 만들어 줍니다. 이 글을 통해 Dart의 클래스와 객체 개념을 이해하는 데 도움이 되었기를 바랍니다.

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

반응형