객체 지향 C#

C#에서 상속보다 컴포지션(composition) 선호하기

이 레슨에서는 상속 대신 함께 동작하는 작은 객체들로 주문을 구성합니다.

소개

컴포지션(composition)은 각자 분명한 역할을 가진 더 작은 객체들을 조합해 객체를 만드는 방식입니다. 상속에 비해 클래스가 가볍고 바꾸기 쉬우며, 복잡하고 경직된 상속 계층을 피할 수 있습니다.

주문 Order는 LineItem을 상속하지 않고 LineItem 목록을 가지고 있습니다. Total 속성은 Items.Sum(item => item.Price)로 계산을 각 줄에 맡깁니다. 각 객체는 책임이 하나뿐이며, 책과 펜의 합계는 35입니다.

실행 가능한 C# 예제

C#
코드 실행 →
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;

record LineItem(string Name, decimal Price);
class Order
{
    public List<LineItem> Items { get; } = new();
    public decimal Total => Items.Sum(item => item.Price);
}

class Program
{
    static void Main()
    {
        var order = new Order();
        order.Items.Add(new("Book", 30m));
        order.Items.Add(new("Pen", 5m));
        Console.WriteLine(order.Total);
    }
}
실행 결과
35

디버거로 연습하기

중요한 대입이나 조건에 중단점을 두고 Debug를 눌러 다음 줄로 넘어가기 전에 지역 변수 값을 확인하세요.