본문 바로가기
Dart/Dart Programming language

[중급] Dart 클래스 심화/연산자 오버로딩과 메소드 체이닝 활용법

by Maccrey Coding 2024. 9. 6.
728x90
반응형

 

1. 연산자 오버로딩 (Operator Overloading)

1.1 연산자 오버로딩이란?

연산자 오버로딩은 우리가 일반적으로 사용하는 수학적 연산자(예: +, -, *, / 등)를 클래스에서 재정의할 수 있는 기능입니다. 이 기능을 사용하면, 객체를 더하거나 빼는 등의 연산을 클래스 내에서 정의한 대로 사용할 수 있습니다.

1.2 연산자 오버로딩 예제

예를 들어, Vector라는 2D 벡터를 나타내는 클래스를 만들고 벡터끼리 더하는 기능을 구현해 보겠습니다.

class Vector {
  final double x;
  final double y;

  Vector(this.x, this.y);

  // + 연산자 오버로딩
  Vector operator +(Vector other) {
    return Vector(x + other.x, y + other.y);
  }

  @override
  String toString() => 'Vector($x, $y)';
}

void main() {
  var v1 = Vector(2, 3);  // (2, 3) 벡터 생성
  var v2 = Vector(4, 5);  // (4, 5) 벡터 생성
  
  var result = v1 + v2;   // 벡터 덧셈
  print(result); // 결과: Vector(6, 8)
}

위 예제에서 Vector 클래스는 x와 y라는 두 개의 좌표를 가집니다. operator + 메서드는 두 벡터를 더하는 방법을 정의합니다. v1 + v2를 호출하면, v1과 v2의 각 좌표를 더한 새로운 벡터가 생성됩니다.

2. 메소드 체이닝 (Method Chaining)

2.1 메소드 체이닝이란?

메소드 체이닝은 객체에서 여러 메서드를 연속적으로 호출할 수 있는 방법입니다. 각 메서드는 자기 자신을 반환하여 다음 메서드 호출을 가능하게 합니다. 이를 통해 코드가 더 깔끔하고 직관적으로 보입니다.

2.2 메소드 체이닝 예제

예를 들어, 문자열을 여러 줄로 추가하는 Builder 클래스를 만들어보겠습니다.

class Builder {
  String _result = ''; // 문자열을 저장할 변수

  // 문자열 추가 메서드
  Builder add(String value) {
    _result += value;   // 문자열을 추가
    return this;        // 자기 자신을 반환
  }

  // 줄 바꿈을 추가하는 메서드
  Builder addLine(String value) {
    _result += value + '\n'; // 줄 바꿈을 추가
    return this;            // 자기 자신을 반환
  }

  // 결과 문자열을 반환하는 메서드
  String build() {
    return _result;
  }
}

void main() {
  var builder = Builder();
  
  var result = builder
      .add('Hello')      // 문자열 'Hello' 추가
      .addLine('World')  // 'World' 추가 후 줄 바꿈
      .add('!')          // 문자열 '!' 추가
      .build();          // 최종 문자열을 빌드

  print(result); // 결과: Hello\nWorld\n!
}

위 예제에서 Builder 클래스는 문자열을 추가하고 최종 결과를 빌드하는 기능을 제공합니다.

add와 addLine 메서드는 문자열을 추가한 후 this(자기 자신)를 반환하여 메소드 체이닝을 가능하게 합니다.

이렇게 하면 메서드를 연속적으로 호출하여 문자열을 쉽게 구성할 수 있습니다.

3. 연산자 오버로딩과 메소드 체이닝의 장점

  • 연산자 오버로딩의 장점
    • 직관성 향상: 연산자를 사용하여 객체 간의 연산을 직관적으로 표현할 수 있습니다.
    • 코드 간결성: 복잡한 연산을 간단하게 표현할 수 있어 코드가 더 깔끔해집니다.
  • 메소드 체이닝의 장점
    • 코드 가독성 향상: 여러 메서드를 한 줄로 연속적으로 호출할 수 있어 코드가 더 깔끔하고 읽기 쉽습니다.
    • 유연성: 객체의 상태를 단계별로 구성할 수 있어 복잡한 객체 생성 및 조작이 더 쉬워집니다.

4. 연산자 오버로딩과 메소드 체이닝의 활용

4.1 연산자 오버로딩 활용 사례

  • 수학적 계산: 복잡한 수학적 계산을 수행하는 클래스에서 연산자를 오버로딩하여 직관적인 수식을 작성할 수 있습니다.
  • 벡터 연산: 벡터나 행렬 같은 수학적 개념을 구현할 때 유용합니다.

4.2 메소드 체이닝 활용 사례

  • 빌더 패턴: 객체의 설정을 단계별로 구성할 때 메소드 체이닝을 사용하여 가독성을 높일 수 있습니다.
  • 데이터 조작: 데이터베이스 쿼리나 문자열 조작과 같은 연산에서 메소드 체이닝을 활용하여 코드를 간결하게 작성할 수 있습니다.

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

 

 

728x90
반응형