성엽이
KKIMSSI
성엽이
전체 방문자
오늘
어제
  • 분류 전체보기 (454)
    • :) (2)
    • C프로그래밍이론 (9)
    • C++프로그래밍 (64)
      • STL (1)
    • C# (2)
    • Visual studio 10.0 (9)
    • AT91SAM7S256 (21)
    • 논리회로 (14)
    • AVR2560 (11)
    • TCPIP (16)
    • NetWork (4)
      • Ubuntu Linux (2)
    • Assembly (21)
    • UNIX 프로그래밍 (6)
    • RFID 분석 (1)
    • Win32 API (7)
    • Cortex-M3 (4)
    • Unity (91)
    • Flutter (9)
    • OwnProject (11)
      • It's mine (5)
      • 마인드스톰 실습 (1)
      • 보고서 자료 (2)
      • RPi B+ (2)
    • ETC (25)
      • 상식 (3)
    • MFC (40)
    • PostgeSQL (18)
    • 영상제어 (6)
      • VFW_영상처리 (1)
    • Python (0)
    • Java (30)
      • SpringBoot (2)
      • Javascript (1)
      • JSP (13)
      • Spring (8)
    • Oracle (4)
      • SQL (3)
    • HTML (6)
      • Thymeleaf (1)
      • CSS (1)
      • Bootstrap (3)
    • IDE (1)
      • VS Code (1)
    • Android (2)
    • Privacy Policy (0)
    • MYSQL (2)
      • MariaDB (2)
    • AWS (5)
    • 개인공부 (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
  • 관리자
  • 글쓰기

공지사항

인기 글

태그

  • ARM Reverse Engineering
  • WINAPI
  • MFC
  • 문자열 나누기
  • Boot Code 분석

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
성엽이

KKIMSSI

Unity

[Unity] abstract, virtual, interface 정의

2022. 11. 16. 14:31

https://hongjinhyeon.tistory.com/93

 

[C#] Virtual(가상) vs Abstract(추상) vs Interface(인터페이스)

OOP개념에서 상속을 이야기할 때 Virtual이나 Abstract 한정자가 사용이됩니다.두개를 사용하면서 헷갈리는 점을 정리했습니다. 또한 Interface와 비슷한 기능을 제공하는데같이 비교해보겠습니다. 1.Vi

hongjinhyeon.tistory.com


interface Params 를 쓰는 경우 예시를 찾아보면

 

public interface IApple{
    int I {get; set;}	// 맛의 성분 1
    int J {get; set;}	// 맛의 성분 2
}

// 초록색 사과
public class GrannySmith : IApple{

    public GrannySmith()
    {
        this.I = 10;
        this.J = 6;
    }
    int I {get; set;}
    int J {get; set;}
}

// 빨간색 사과
public class PinkLady : IApple{

    public PinkLady()
    {
        this.I = 42;
        this.J = 1;
    }
    int I {get; set;}
    int J {get; set;}
}

public class FruitUtils{
    // 사과맛
    public int CalculateAppleness(IApple apple)
    {
         return apple.J * apple.I;
    }
}

 

interface 를 정의한 후 사용법

 

var apple = new GrannySmith();
var result = new FruitUtils().CalculateAppleness(apple);
var apple2 = new PinkLady();
var result2 = new FruitUtils().CalculateAppleness(apple2);

Console.WriteLine(result); //Produces 60
Console.WriteLine(result2); //Produces 42

 

사용이유 와 차이점

 

1. 확장성, 코딩실수에 편의를 가져다 준다.

 

public class FruitUtils{
    // GrannySmith Appleness
    public int CalculateGrannySmithAppleness(GrannySmith gsAppleness)
    {
         return gsAppleness.J * gsAppleness.I;
    }
    
    // PinkLady Appleness
    public int CalculatePinkLadyAppleness(PinkLady plAppleness)
    {
         return plAppleness.J * plAppleness.I;
    }
}

 

각각의 CalculateGrannySmithAppleness, CalculatePinkLadyAppleness 함수의 매개변수가 GrannySmith 거나 PinkLady 면 각각의 사과맛은 계산이 되지만 만약 IApple 을 상속받는 종류가 더 많아지면 확장하기 힘들어진다. 다분히 객체지향적이다. 그리고 interface 에서 정의된 몸통없는 메소드, 프로퍼티, 인덱서 를 강제하므로 스펠링에러가 생기는걸 방지한다.

 

아는데 참 안써진다...

저작자표시 (새창열림)

'Unity' 카테고리의 다른 글

[Unity] 유니티 설계  (0) 2022.12.07
[Unity Error] Unity ARMv7 ARM64 빌드시 크래시 에러  (0) 2022.12.05
[Unity] 10가지 팁 by TaroDev  (0) 2022.11.15
유니티 그래픽스 최적화 - GI (Global Illumination) 정리  (0) 2022.11.11
iOS용 AppStore 배포 등록절차  (0) 2022.11.02
    'Unity' 카테고리의 다른 글
    • [Unity] 유니티 설계
    • [Unity Error] Unity ARMv7 ARM64 빌드시 크래시 에러
    • [Unity] 10가지 팁 by TaroDev
    • 유니티 그래픽스 최적화 - GI (Global Illumination) 정리
    성엽이
    성엽이

    티스토리툴바