상속이란
상속은 객체지향 프로그래밍(OOP)의 꽃이라 불릴 만큼 중요한 개념입니다.
여러 클래스가 공통적으로 가지는 요소를 상위 클래스(부모 클래스) 에 정의한 후, 이를 하위 클래스(자식 클래스) 가 물려받아 재사용하는 방식입니다.
✅ 주요 특징
- 코드 중복 방지: 동일한 기능을 여러 클래스에서 반복적으로 구현할 필요 없음.
- 유지보수 용이: 부모 클래스의 변경 사항이 하위 클래스에도 자동 반영됨.
- 확장성 강화: 상속받은 클래스를 기반으로 새로운 기능을 쉽게 추가 가능.
🔹 클래스의 정규화 (Normalization)
객체지향 설계에서 중복 요소를 제거하는 과정입니다.
📌 예제
❌ 정규화 전: 각 관리자 클래스가 중복된 로그인() 메소드를 개별적으로 구현
✅ 정규화 후: 관리자추상클래스에서 로그인()을 정의하고, 하위 클래스들이 이를 상속받아 사용
type
TManager = class
procedure Login; virtual;
end;
TUserManager = class(TManager);
TBoardManager = class(TManager);
TProductManager = class(TManager);
🔹 메소드 재정의 (Override)
부모 클래스에서 정의한 메소드를 하위 클래스에서 변형하여 사용할 수 있습니다.
TBaseClass = class
procedure Draw; virtual;
end;
TChildClass = class(TBaseClass)
procedure Draw; override;
end;
💡 virtual: 상속받을 메소드임을 선언
💡 override: 상속받은 메소드를 재정의
❗ 주의: override 사용 시, 부모 클래스의 메소드는 virtual 또는 dynamic으로 선언되어 있어야 합니다.
🔹 다형성 (Polymorphism)
같은 메소드명을 사용하더라도 객체의 타입에 따라 다른 동작을 수행하는 개념입니다.
📌 예제: 직원 급여 계산
다형성 없이 if 문을 사용한 경우
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 문을 계속 수정해야 함
다형성을 활용한 경우
TEmployee = class
procedure CalcPay; virtual; abstract;
end;
TSalariedEmployee = class(TEmployee)
procedure CalcPay; override;
end;
THourlyEmployee = class(TEmployee)
procedure CalcPay; override;
end;
var
i: Integer;
begin
for i := 0 to Employees.Count - 1 do
Employees[i].CalcPay; // 직원 타입에 따라 자동으로 맞는 메소드 실행
end;
✅ 결과: 새로운 급여 방식이 추가되더라도 기존 코드를 수정할 필요 없이 TEmployee의
자식 클래스를 추가하기만 하면 됨!
🎯 결론
상속을 활용하면 코드의 중복을 줄이고, 유지보수를 편리하게 할 수 있으며,
다형성을 이용해 유연한 설계를 할 수 있습니다.
OOP를 효과적으로 활용하려면 상속을 적절히 적용하는 것이 필수입니다! 🚀
'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 |
댓글