개요
추상화는 객체 지향 프로그래밍(OOP)의 네 가지 기본 개념 중 하나입니다. 소프트웨어에서 해당 엔터티를 모델링하고 조작하는 데 사용할 수 있는 복잡한 실제 엔터티의 단순화되고 일반화된 표현을 만드는 프로세스를 말합니다.
OOP에서 추상화를 통해 프로그래머는 객체의 필수 기능에 집중하고 중요하지 않은 세부 정보는 무시할 수 있습니다. 이것은 소프트웨어의 복잡성을 줄이는 데 도움이 되므로 이해 및 유지 관리가 더 쉬워집니다. 추상화는 구체적인 클래스에 의해 구현되어야 하는 일련의 메서드를 정의하는 추상 클래스 및 인터페이스를 사용하여 달성됩니다.
OOP에서 추상화의 이점에는 향상된 코드 품질, 더 나은 코드 재사용성 및 향상된 유연성이 포함됩니다. 추상 클래스와 인터페이스를 생성함으로써 프로그래머는 새로운 상황에 쉽게 적응할 수 있는 재사용 가능한 모듈식 코드를 생성할 수 있습니다. 또한 추상화는 기본 구현에 대한 변경의 영향을 줄이는 데 도움이 되므로 시간이 지남에 따라 소프트웨어를 더 쉽게 수정하고 확장할 수 있습니다.
추상화를 이용한 모델링
모델링은 소프트웨어 개발에 필수적입니다. 복잡한 실제 엔티티의 단순화되고 일반화된 표현을 만들 수 있기 때문입니다. 이 모델은 일반적으로 추상 클래스, 인터페이스 및 캡슐화와 같은 추상화 기술을 사용하여 만들어 지므로 소프트웨어의 복잡성을 줄이고 이해하고 유지 관리하기 쉽습니다.
추상화를 사용하여 모델을 생성함으로써 개발자는 객체의 필수 기능에 집중하면서 필수적인 세부 사항을 무시할 수 있습니다. 이를 통해 객체를 구현하는 데 필요한 코드의 양을 줄이고 코드를보다 모듈화하고 재사용 할 수 있습니다. 또한 추상화로 생성된 모델은 기술적 배경이 없는 프로젝트 관리자 및 고객과 같은 다른 개발자 및 이해 관계자와 소통하는 데 사용할 수 있습니다. 추상화는 복잡한 시스템을 단순화하고 비 기술적 사용자에게 더 이해하기 쉽게하는 데 도움이 될 수 있습니다.
또한 추상화를 통해 모델링하면 오류를 줄이고 테스트 및 유지 관리를보다 쉽게 만들어 소프트웨어의 품질을 향상시키는 데 도움이 될 수 있습니다. 명확하고 간결한 모델을 만들어 개발자는 잠재적 인 문제와 버그를보다 쉽게 식별 할 수 있으며, 이는 최종 사용자에게 문제를 일으키기 전에 수정할 수 있습니다.
모델링은 소프트웨어 개발의 중요한 부분입니다. 소프트웨어 시스템의 품질, 유지 가능성 및 유용성을 향상시키는 데 도움이 됩니다. 이를 통해 개발자는 더 간단하고 모듈화된, 쉬운 코드를 만들 수 있으므로 개발자와 사용자 모두에게 좋습니다.
추상화의 목적
- 복잡성 단순화
- 재사용성 증가
- 코드 중복 감소
- 코드 유연성 향상
- 오류 및 버그 최소화
- 이해관계자와의 원활한 커뮤니케이션
- 코드 유지보수성 향상
추상화 유형 (넓은 의미에서)
데이터 추상화
데이터 추상화는 객체의 내부 세부 사항을 숨기고 필요한 정보 만 외부 세계에 노출시키는 실무를 말합니다. 이것은 캡슐화를 사용하여 달성 될 수 있으며,이를 통해 객체를 잘 정의 된 인터페이스를 갖춘 블랙 박스로 처리 할 수 있습니다.
public abstract class Animal
{
public string Name { get; set; }
public int Age { get; set; }
public abstract void MakeSound();
}
public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Meow!");
}
}
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Woof!");
}
}
이 예제에서 동물 클래스는 동물의 종, 서식지 및 먹이와 같은 동물의 내부 세부 정보를 추상화합니다. 클래스의 사용자는 이러한 작업이 내부적으로 어떻게 실행되는지 알 필요 없이 동물이 소리를 내도록 하는 메서드만 알면 됩니다.
Cat과 Dog 클래스는 Animal 클래스에서 상속되며 각각의 종에 특정한 MakeSound 메서드의 자체 구현을 제공합니다. 이를 통해 클래스의 사용자는 기본 구현에 관계없이 일관된 방식으로 클래스와 상호 작용할 수 있습니다.
절차 추상화
절차 추상화는 메소드 또는 함수의 내부 세부 사항을 숨기고 입력, 출력 및 동작 만 노출시킵니다. '입력과 출력'의 단순화가 키포인트입니다.
public static void BubbleSort<T>(T[] array) where T : IComparable<T>
{
int length = array.Length;
for (int i = 0; i < length - 1; i++)
{
for (int j = 0; j < length - i - 1; j++)
{
if (array[j].CompareTo(array[j + 1]) > 0)
{
T temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
이 예제에서 BubbleSort 메서드는 요소의 스왑 및 중첩 루프와 같은 정렬 알고리즘의 내부 정보를 추상화합니다.
제어 추상화
제어 추상화는 제어 흐름의 저수준 세부 사항을 숨기고 높은 수준의 제어 구조만 노출시킵니다. 루프문과 조건문이 곧 제어 추상화입니다.
foreach (var item in collection)
{
if (condition(item))
{
Process(item);
}
}
추상화를 위한 OOP 언어의 기능
넓은 의미의 추상화는 프로그래밍에서 거의 모든 것을 의미할 수 있습니다. 이름짓기, 클래스로 묶기, 델리게이트, 캡슐화, 상속, 다형성... 이 모든 것이 추상화에 해당할 수 있지만, OOP 언어에서 추상화를 목적으로 만들어진 대표적 기능은 다음 두 가지입니다.
추상 클래스
인스턴스화 할 수없고 서브 클래스로 설계된 클래스입니다. 그것은 그것을 물려받는 구체적인 클래스에서 구현 해야하는 추상 방법 세트를 정의합니다.
인터페이스
인터페이스는 콘크리트 클래스에서 구현 해야하는 일련의 방법을 정의한다는 점에서 초록 클래스와 유사합니다. 그러나 인터페이스에는 구현 코드가 포함될 수 없으며 여러 클래스에서 구현할 수 있습니다.
'OOP' 카테고리의 다른 글
[OOP] 디자인 패턴을 사용하는 이유 (1) | 2022.09.09 |
---|---|
[OOP] 좋은 코드 (1) | 2022.09.02 |
[OOP] SOLID, 객체지향 설계의 원칙 (0) | 2022.08.27 |
[OOP] Inheritance, 상속이란 무엇인가 (0) | 2022.08.26 |
[OOP] Abstraction, 추상화란 무엇인가 (0) | 2022.08.26 |
댓글