본문 바로가기
Delphi/문법

상속이란?

by MonoSoft 2025. 2. 10.
728x90
반응형

상속이란

 

 

상속은 객체지향 프로그래밍(OOP)의 꽃이라 불릴 만큼 중요한 개념입니다.

여러 클래스가 공통적으로 가지는 요소를 상위 클래스(부모 클래스) 에 정의한 후, 이를 하위 클래스(자식 클래스) 가 물려받아 재사용하는 방식입니다.

 

주요 특징

  • 코드 중복 방지: 동일한 기능을 여러 클래스에서 반복적으로 구현할 필요 없음.
  • 유지보수 용이: 부모 클래스의 변경 사항이 하위 클래스에도 자동 반영됨.
  • 확장성 강화: 상속받은 클래스를 기반으로 새로운 기능을 쉽게 추가 가능.

 

🔹 클래스의 정규화 (Normalization)

객체지향 설계에서 중복 요소를 제거하는 과정입니다.

 

📌 예제

정규화 전: 각 관리자 클래스가 중복된 로그인() 메소드를 개별적으로 구현
정규화 후: 관리자추상클래스에서 로그인()을 정의하고, 하위 클래스들이 이를 상속받아 사용

 

type
  TManager = class
    procedure Login; virtual;
  end;

  TUserManager = class(TManager);
  TBoardManager = class(TManager);
  TProductManager = class(TManager);

 

🔹 메소드 재정의 (Override)

부모 클래스에서 정의한 메소드를 하위 클래스에서 변형하여 사용할 수 있습니다.

type
  TBaseClass = class
    procedure Draw; virtual;
  end;

  TChildClass = class(TBaseClass)
    procedure Draw; override;
  end;
 

💡 virtual: 상속받을 메소드임을 선언
💡 override: 상속받은 메소드를 재정의

주의: override 사용 시, 부모 클래스의 메소드는 virtual 또는 dynamic으로 선언되어 있어야 합니다.

 

🔹 다형성 (Polymorphism)

같은 메소드명을 사용하더라도 객체의 타입에 따라 다른 동작을 수행하는 개념입니다.

📌 예제: 직원 급여 계산

다형성 없이 if 문을 사용한 경우

procedure TForm1.CalculateSalary;
var
  i: Integer;
begin
  for i := 0 to Employees.Count - 1 do
    if Employees[i].SalaryType = Monthly then
      Employees[i].MonthlyCalc
    else
      Employees[i].HourlyCalc;
end;
 

문제점: 새로운 급여 방식이 추가될 때마다 if 문을 계속 수정해야 함

 

다형성을 활용한 경우

type
  TEmployee = class
    procedure CalcPay; virtual; abstract;
  end;

  TSalariedEmployee = class(TEmployee)
    procedure CalcPay; override;
  end;

  THourlyEmployee = class(TEmployee)
    procedure CalcPay; override;
  end;
procedure TForm1.CalculateSalary;
var
  i: Integer;
begin
  for i := 0 to Employees.Count - 1 do
    Employees[i].CalcPay;  // 직원 타입에 따라 자동으로 맞는 메소드 실행
end;

 

결과: 새로운 급여 방식이 추가되더라도 기존 코드를 수정할 필요 없이 TEmployee의

자식 클래스를 추가하기만 하면 됨!

 

🎯 결론

상속을 활용하면 코드의 중복을 줄이고, 유지보수를 편리하게 할 수 있으며,

다형성을 이용해 유연한 설계를 할 수 있습니다.

OOP를 효과적으로 활용하려면 상속을 적절히 적용하는 것이 필수입니다! 🚀

728x90
반응형

'Delphi > 문법' 카테고리의 다른 글

델파이 포인터 사용 팁  (0) 2024.07.04
간단한 상속(succession) / 인터페이스(interface)  (0) 2024.06.20
인터페이스에 오브젝트 얻기  (0) 2024.05.30
델파이의 String 변수 팁  (0) 2024.05.24
for TCollectionItem  (0) 2024.05.11

댓글