추상화 (Abstract)

tacoyaggi ㅣ 2024. 2. 1. 11:02

Abstract

Abstract 는 추상 클래스와 추상 메서드를 정의하는데 사용함

 

여기서 추상화란 클래스와 인터페이스를 통해 객체의 특성과 행동을 모델링하고 일반화하는 것을 추상화라함

 

내가 풀어낸 추상화는 추상적이다! 즉 명확하지 않게 정의된 것을 의미한다고 생각함.

 

예를 들어 "잘생겼어?"라는 말은 기준이 없음. 누군가에게는 잘생겼을 수 있고 누군가에게는 못생겼을 수 있음.

 

이렇게 기준이 없는 경우를 나는 추상적이라고 표현함

 

좀 더 들어가서 추상화 메서드명이 HandSome() 라고 칭하자

 

그리고 AB 가 추상화를 구현한다고 가정 했을 때, A 는 맞아 잘생겼어 B 는 놉 못생김 이라고 나뉠 수 있는게 추상화!

 

프로그래밍에서는 추상화를 했다면 항상 구현체가 함께 해야함. 구현체 기준은 추상화 클래스나 인터페이스를 상속 받았을 경우임

 

정리하면 Abstract 는 1개의 추상 클래스를 통해 N개의 기능을 구현해야할 때 사용함

 

Abstract 가 선언된 메서드를 구현하기 위해서는 override 를 붙여줘야함. 그리고 추상 메서드의 반환형식과 동일해야함

 

객체지향 관점에서 보면 추상화 와 다형성 이 여기 해당됨.

AbstractTest A = new A();
AbstractTest B = new B();

A.HandSome();
B.HandSome();

class A : AbstractTest
{
    public override void HandSome()
    {
        Console.WriteLine("잘생김");
    }
}
class B : AbstractTest
{
    public override void HandSome()
    {
        Console.WriteLine("못생김");
    }

}

abstract class AbstractTest
{
    public abstract void HandSome();
}

Interface vs Abstract

둘다 큰 틀에서 추상화 , 다형성 을 포함한 같은 녀석들임. 다만 조금 다른점이 있는데 알아보자

 

Interface

다중 상속이 가능함

 

인터페이스안에서 메서드 구현만 가능(반환값 메서드명 2가지만 구현 가능)

 

생성자 생성 불가

 

Abstract

단일 상속만 가능함

 

추상 메서드 + 일반 메서드 짬뽕 가능함

 

생성자 생성 가능

 

 

결론

어느 상황에서 Abstract or Interface 를 사용해야 하는지 궁금하지 않을 수 없다!

 

가장 큰 차이는 다중 상속에 있다. 다중 상속이 필요하면 무조건 Interface  

 

Abstract 클래스 안에는 일반 메서드 구현이 가능하다고 했다. 그러니 일반 메서드와 추상 메서드가 함께 공존해야하는 상황? 에서는 Abstract 사용 한다.

 

강한 결합을 피하고 싶을 때는 Interface 를 사용한다고 하는데 흐음..

'SW 기능 > C#' 카테고리의 다른 글

Get Set  (0) 2024.02.02
Generic  (0) 2024.02.02
Base  (0) 2024.02.02
접근제한자  (0) 2024.02.01
코딩 컨벤션  (0) 2023.11.15