TIL

abstract, Interface

Cadi 2024. 12. 21. 02:40

추상화

추상화는 대상을 간단한 개념으로 일반화 하는 과정이다. 

예를 들어, 연필, 샤프, 볼펜이 있따면 모두 필기구라고 묶어 이름을 붙이는 것이다.

 

추상화는 abstract 키워드를 사용하며 ,  abstract를 사용하면 파생 클래스에서 구현해야 하는 클래스 및 클래스 멤버를 만들 수 있다. 

 

무슨 말이냐 하면 

 

public abstract class A
{
    public abstract void DoWork(int i);
}

 

다음과 같이 추상 class를 만들면, class A를 상속받은 모든 클래스들은

반드시 DoWork(int i)라는 기능을 구현해야 한다. 

 

추상 메서드

  • 추상 메서드에는 '구현'이 없다 
    :  public abstract void DoWork(int i); 뒤에 구현할 기능을 써 놓지 않고 세미콜론으로 마무리한다.
  • new 라는 생성자를 통해 인스턴스로 만들 수도 없다. 
  • abstract 가 아닌 일반 필드와 일반 메서드(인스턴스 필드와 인스턴스 메서드)는 가질 수 있다.

 

 

 

 

정리하자면, 추상 클래스는 '미완성 설계도'이다. 새로운 클래스를 작성하는데 부모 클래스로써 중요한 역할이다.

 

추상 클래스를 사용하는 이유는

  • 구현의 강제성을 통한 기능 보장(인터페이스도 동일)
  • 규격에 맞는 설계 구현 등

인터페이스

 

인터페이스는 사용자가 어떤 것의 내부 구성 학습 없이, 지원해주는 메서드를 이용하여 간편한 개발을 도와주는 것이다.

인터페이스

 

  • 다중 상속이 되는 추상 메서드의 집합이라고 이해
  • 필드를 선언할 수 있지만, 변수가 아닌 상수로만 가능
  • public static fimal과 public abstract는 생략 가능 (컴파일러가 자동으로 추가해줌)
  • 추상 메서드처럼 그 자체로 인스턴스 생성 불가/ 상속받은 클래스는 구현해야 함.
  • 만일, 클래스가 구현하는 인터페이스의 메서드 중 일부만 구현한다면, 추상 클래스를 만들고 또 새로운 클래스에 상속해야한다.

인터페이스 사용 이유

  • 아무 관계도 없는 클래스들에게 하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계맺음 가능
  • 구현의 강제성을 통한 기능보장
  • 타입 접근 제한 // 마린, scv, 레이스 중, 지상유닛만 선택하고 싶을 때
  • 메서드 접근 제한  : A,B,C 클래스를 상속하고 A클래스 타입으로 반환하면, A 인터페이스 메서드만 보임
  • 의존성 제거 : 클래스의 관계를 상속이 아닌 구현(인터페이스)로 확장시킨다면 객체간의 의존성이 줄어듬 예를 들어 인터페이스 타입으로 통신하는 것이 있음
  • 표준화 : 클래스와 클래스의 관계를 , 인터페이스를 이용해 간접적인 관계로 변형하면, 독립적인 프로그래밍 가능

*단순 타입 체크용으로 마커 인터페이스를 쓰기도 함

 

 

인터페이스 VS 추상화

 

추상 클래스는, 상속을 통해 기능을 확장해야 할 때 미리 동작의 일부를 구현하고, 나머지 동작을 하위 클래스에 위임하는 등의 경우에 사용된다.

인터페이스는, 클래스 간 공통된 동작(게임 오브젝트의 상호작용 기능)이나  다중 상속이 필요할때 사용된다.

 

유니티에서의 인터페이스 예시

 

https://docs.unity3d.com/kr/530/Manual/SupportedEvents.html

 

지원되는 이벤트 - Unity 매뉴얼

이벤트 시스템은 다수의 이벤트를 지원하며 사용자가 작성한 입력 모듈을 통해 한층 더 효율적으로 커스터마이징할 수 있습니다.

docs.unity3d.com

 

참조

 

https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/abstract-and-sealed-classes-and-class-members

 

추상/봉인된 클래스 및 클래스 멤버 - C#

C#의 추상 키워드를 사용하여 불완전한 클래스와 클래스 멤버를 만듭니다. Sealed 키워드는 이전 가상 클래스 또는 클래스 멤버의 상속을 방지합니다.

learn.microsoft.com

https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/interface

 

interface 키워드 - C# reference

'인터페이스' 키워드를 사용하여 모든 구현 형식이 지원해야 하는 계약을 정의합니다. 인터페이스는 관련되지 않은 형식 집합 간에 공통 동작을 만드는 수단을 제공합니다.

learn.microsoft.com

https://imcoding-official.tistory.com/46

 

[C#] 추상화 abstract, interface

소개 안녕하세요 아임코딩입니다. 이번에는 C#에서 사용하는 추상화에 대해서 알아보겠습니다. 유튜브 링크 https://youtu.be/tZoe_tdgMEY 추상화 추상이란 사물이나 표상(表象)을 어떤 성질·공통성·본

imcoding-official.tistory.com

https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%B6%94%EC%83%81-%ED%81%B4%EB%9E%98%EC%8A%A4Abstract-%EC%9A%A9%EB%8F%84-%EC%99%84%EB%B2%BD-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

 

☕ 추상 클래스(Abstract) 용도 완벽 이해하기

추상 클래스 와 추상화 우리가 지금 까지 사용해왔던 일반적인 클래스는 구체적(concrete)으로 데이터를 담아 인스턴스화 하여 직접 다루는 클래스이다. 그 반대로 추상 클래스는 구체적이지 않은

inpa.tistory.com

https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4Interface%EC%9D%98-%EC%A0%95%EC%84%9D-%ED%83%84%ED%83%84%ED%95%98%EA%B2%8C-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC#%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%9D%98_%EB%8B%A4%EC%96%91%ED%95%9C_%ED%99%9C%EC%9A%A9%EB%8F%84

 

☕ 인터페이스(Interface) 문법 & 활용 - 완벽 가이드

인터페이스 정의 (친숙하게 설명) 객체 지향 프로그래밍의 추상화를 배우고 추상 클래스를 접해봤다면 그 다음 접해보는 것이 인터페이스(Interface) 일 것이다. 인터페이스는 간단히 말하자면 프

inpa.tistory.com