Unity/복습

Unity 21.04.26. 개념복습

HappyFrog 2021. 4. 26. 23:15

**OOP : Object-Oriented Programming의 약자로서 '객체 지향 프로그래밍'을 뜻한다. 이는 컴퓨터 프로그램을 명령어로 보는 시각에서 벗어나 여러개의 독립된 단위인 객체들의 모임으로 파악하여 객체끼리 메시지를 주고받고 메시지를 처리할 수 있다. 장점은 유연하고 변경이 용이하기 때문에 대규모 소프트웨어 개발에 많이 사용되며 배우기 쉬우며 개발, 보수가 간편하고 코드분석을 할 때 보다 직관적으로 분석을 수행할 수 있다. 하지만 비교적 처리하는데 시간이 오래걸리며 차지하는 용량이 커질 수 있으며 객체의 속성을 고민하는데 시간이 들어가는 단점을 가진다.

OOP의 특징으로는 캡슐화, 추상화, 상속, 다형성(Polymorphism)이 있다.

 

*캡슐화(Encapsulation)

캡슐화의 목적은 코드의 재사용이다.

관련된 속성과 행위들을 하나의 클래스에 넣어 관리하기 때문에 재사용하기 편하다.

ex)하나의 클래스에 필드와 메서드를 선언하는 행위.

 

*추상화(Abstraction)

추상화는 사물이 지니는 여러가지 측면 중에 특정한 측면을 추려내어 포착하는 것이다. 즉, 목적에 따라 필요없는 요소들은 무시하고 필요한 요소들만 구현하는 것이라고 할 수 있다.

클래스를 정의하는 것 자체가 추상화라고 할 수 있다.

 

*상속(Inheritance){

상속은 부모 클래스의 속성과 기능들을 이어받아 사용할 수 있는게 하는것이다. (부모 - virtual // 자식 - override)로 부모에서 선언한 메서드를 자식메서드에서 변형하여 쓸 수 있다. 단, 부모클래스에 있는 메서드의 이름과 매개변수가 같아야한다.(메서드의 내용만 변경) override로 덮어서 사용하지 않는다면 부모의 메서드 기능을 수행하게 된다.

 

*다형성(Polymorphism)

다형성은 여러가지 형태를 갖는다는 의미를 내포하고 있다.

다형성은 하나의 행위가 여러가지 결과를 만들어내기도 하며 이는 프로그램 측면에서 같은 메시지에 대해 이를 수신하는 개체마다 다르게 행동하는 것을 의미한다.

 

ㄴ오버로딩은 한 클래스에 이름이 동일한 메서드가 중복정의 되어있는 경우를 말한다. 이 때는 매개변수를 다르게하여 구별한다.  이렇게 같은 이름의 메서드를 서로 구별할 수 있게 해주는 요소를 시그니처라고 한다. 또한 위에서 서술했듯이 상속구조에서도 오버로딩이 일어나는데, 이 때는 매개변수와 이름이 모두 같지만 내용이 다르다.

 

ㄴ메서드 오버라이딩역시 상속구조에서 발생한다. 하지만 오버로딩과 다른점은 상위클래스의 메서드는 무시되고 하위클래스의 메서드가 사용된다.

 

** 프로세스와 쓰레드 (프로세스 > 스레드)

*프로세스

ㄴ컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램(프로그램 : 어떤 작업을 위해 실행할 수 있는 파일)

ㄴ메모리에 올라와 실행되고있는 프로그램의 인스턴스(독립적인 객체)

ㄴ운영체제로부터 시스템 자원을 할당받는 작업의 단위

ㄴ동적인 개념으로는 실행된 프로그램

 

- 프로세스가 할당받는 시스템자원의 예

ㄴCPU 시간

ㄴ운영되기 위해 필요한 주소 공간

ㄴ Code, Data, Stack, Heap 구조로 되어 있는 독립된 메모리영역, 프로세스는 각각 독립된 메모리영역(코드, 데이터, 스택, 힙)을 할당받는다.

ㄴ 프로세스는 기본적으로 1개의 (메인)스레드를 가지고있다

ㄴ각 프로세스는 별도의 주소공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근불가.

ㄴ한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스간의 통신(Inter-process communication : IPC)을 사용해야한다.

 

* 쓰레드

ㄴ프로세스 내에서 실행되는 여러 흐름의 단위

ㄴ프로세스의 특정한 수행 경로

ㄴ프로세스가 할당받은 자원을 이용하는 실행의 단위

ㄴ쓰레드는 프로세스 내에서 각각 Stack만 할당받고 나머지는 공유한다.

 

=동시에 여러개의 프로그램을 돌리려면 여러개의 프로세스가 필요하고, 그 프로그램에서 동시에 여러개의 동작을 수행하려면 여러개의 쓰레드가 필요하다.

 

**가비지콜렉터

*GC(가비지콜렉터)는 메모리 관리 기법중의 하나로 프로그램이 동적으로 할당했던 메모리 영역중에서 필요없는 영역을 해제하는 기능이다.

ㄴ필요없는 영역이란 어떠한 변수도 가리키지 않는 영역을 의미한다.

ㄴC#, 자바 그리고 일부 스크립트 언어들은 이 GC를 염두에 두고 설계되어 언어정의에 포함되어 있지만 C,C++등의 언어는 수동으로 메모리를 관리해야 한다. 하지만 GC를 지원하는 구현도 존재한다.

 

장점

-이미 해제된 메모리로의 접근을 막아준다.

-이미 해제된 메모리를 또 다시 해제하는 버그를 방지해준다.

-필요하지 않은 메모리가 해제되지않고 남아있는 버그를 방지하여 메모리고갈을 방지한다.

 

단점

-어떤 메모리를 해제할지 결정하는데 비용이 든다.

-GC가 발생하는 타이밍이나 시간을 예측하기 어렵다. 따라서 예측 불가능하게 일시적으로 정지할 수도 있기 때문에 실시간 시스템에는 부적합하다.

-할당된 메모리가 해제되는 시점을 알 수 없다.

 

**프리팹(Prefab)

프리팹으로부터 파생된 오브젝트들(복사본, 자식 프리팹)은 부모 프리팹(원본)의 모든 컴포넌트, 속성값에 대해 영향을 받는다. 주로 오브젝트를 씬의 여러장소 또는 프로젝트의 여러 씬에서 재사용하고 싶을 때 사용한다. 부모프리팹의 설정값을 바꾸면 자식프리팹도 알아서 바뀌기 때문에 복사보다 훨씬 효율적이다.