프레임워크
라이브러리
API
이 세가지를 가지고 차이점을 물어보는 경우가 많음
API : 응용프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
어플리케이션 프로그래밍 인터페이스
인터페이스는 우리가 상호작용할 때 사용했듯 마찬가지
EX ) 손님 - 과일가게 여기서 - 가 API
USER - 카카오톡 API - 카카오톡
프레임워크와 라이브러리는 클래스 뭉치
프레임워크 : EX) 차를 만들기 위한 뼈대, 뼈대에 대한 이해가 없더라도 만들 수 있도록 해주는 것
정의 : 응용프로그램 및 소프트웨어 개발을 수월하게 하기위해 제공된 개발환경
프레임워크는 종속성을 우리에게 줌
라이브러리 : EX) 컴포넌트화 된 모듈, 즉 뼈대가 아닌 그 뼈대를 만들기 위한 모듈
정의 :
라이브러리는 독립성을 가짐
라이브러리가 도구라면 API는 그 도구를 쓸수있게해주는 수단
우리는 닷넬 프레임워크에서 만들고있으니, 그 뼈대의 룰을 지킬수밖에 없음
유니티는 기본적으로 c++로 개발되어져 있음
하지만 표현하는 방식은 c#
그 c#기반을 어떤 프레임워크로 기반으로 할것이냐가 빌드세팅의 API COMPATIBILITY LEVEL => 우리가 직접적으로 코드치는 부분에 관여되는 프레임워크
예를들어 저것이 .NET Standard 2.1버전은 우선순위큐가 없지만 5.0이상은 using으로 바로 쓸수있음
그렇다면 프레임워크는 무엇을 가지고 있을까?
메모리관리나, 쓰레드관리 또한 함
그렇다면 가비지컬렉터란? 프레임워크마다 방식이 다름. 개발환경이 달라지니 당연히 달라질수밖에
거기서 CLI c#과 유니티 c#의 차이가 발생 두 가비지컬렉터가 다름
그러나 유니티는 어떤 닷넷프레임워크를 쓰든 가비지컬렉터가 동일함. 유니티의 고질적인 문제가있기 때문
유니티 가비지컬렉터는 기본적으로 비효율적임.
토막상식 . var는 런타임에서 작동이 아닌 그냥 = 때렸을 때 당연히 얘구나 하고 타입을 맞춰줌
.NET Framework 로부터 파생됨
.NET Core 위와 따로 버전이 존재
왜이렇게 파생이 된것이냐 -> 리눅스 같은 곳에선 필요없는 기능이 존재, 그래서 핵심적인 기능만 추려서 파생된것이 .NET Core
.ASP FrameWork는 웹기반 개발을 위한 기능들만 추려서 만든것
.ASP Core는 웹기반 개발을 위한 핵심기능만 추린것
Mono 도 위와 마찬가지로 .NET FrameWork로부터 파생된 것 (오픈소스), 최초목적은 리눅스에 대응하기위함. 유니티는 Mono를 씀.
.NET Standard 위처럼 파생된게 많아 유연하게 관리할 수 있도록 한것이 이놈.
즉 전부 닷넷프레임워크에 기반하여 파생이 된 프레임워크들임.
닷넷 프레임워크로부터 파생된놈들은 공통된 환경에서 다루는 게 합리적, 즉
공통 언어 기반 (CLI)에서 작동을 하게된다. => 즉 특정한 규격을 맞춰줘야함
CLI : 공통언어기반 , 규격 덩어리
CIL : 공통중간언어
CLR : 공통언어런타임, 닷넷프레임워크가 가진 가상머신
즉 CLI를 참조해 여러 언어들을 CIL로 바꾸고 CLR에서 번역. CLR의 역할은 이것말고도 메모리관리, 쓰레기 수집 등 여러가지.
즉 CLI가 규격에 대한 인프라. CLR은 공통 중간언어. CLR은 닷넷프레임워크를 기반한 놈들의 가상머신 (메모리관리 등)
CLR에서 처리하는 컴파일 방식은 닷넷 프레임워크의 종류에 따라 다름. 일반적으로 JIT컴파일러를 사용, 또는 AOT
이미 프로그램이 실행중인 런타임에 되므로 요청이 들어왔을 때 JIT, 미리 전부 해석해두는 것은 AOT
JIT는 요청들어올때마다기 때문에 빌드타임이 짧다. 장점! 중간중간 요청이 들어오면 연산이 들어감. 단점
! 한줄한줄씩 해석하는 것을 인터프리터 방식 -> 이를 요청이 들어올 때마다 해석하는것
AOT는 빌드타임이 길어짐. 단점. 하지만 그 뒤엔 연산이없다.
AOT는 제너릭타입을 쓰게되면 미리 해야되서 모든 타입들에 대응하기 위해 해석해둘 필요가 있기 때문에 최적화적으로 문제가 있음.
유니티엔 SCIRPTING BAEKEND에 Mono가 JIT, IL2CPP가 AOT
즉, 최종빌드 시엔 AOT기반인 IL2CPP를 쓰는게 최적화적으로 좋을 수 있다. 계속 빌드가 필요할 땐 MONO로 사용하는 것
'CS' 카테고리의 다른 글
가비지 컬렉터 (0) | 2023.12.06 |
---|---|
API / STL (0) | 2023.07.26 |
객체지향 프로그래밍이란? (0) | 2023.07.13 |
메모리의 구조 - 메모리 영역 (0) | 2023.07.12 |