프로그래밍 이론/기본 이론

간단하고 핵심적인 이론 정리

minquu 2021. 9. 2. 17:11
반응형

1. OOP
객체지향프로그래밍이라는 영어(object-Oriented Programming)의
약자이다. 컴퓨터 프로그래밍의 패러다임 중 하나이다. 이것은 프로그램을 명령어의
목록으로 보는 시각을 벗어나 여러개의 "객체"들의 모임으로 파악하고자 하는 것을 의미한다.
기본 구성 요소로는 클래스, 객체, 메서드등이 있으며,
특징으로는 프로그램을 유연하게 변경이 가능해서 대규모 소프트웨어 개발에 많이 사용되고,
자료 추상화, 상속, 다형개념, 동적 바인딩, 다중 상속 등의 특징이 존재한다. 

2. Process & Thread
process : 실행파일이 실행되어 메모리에 적재된 인스턴스
예를 들면 우리가 유투브를 보면서, 노래를 듣고, 동시에 비주얼 스튜디오 작업을 할 수 있다.
여기서 각각 브라우저, 음악플레이어, 프로그램 하나가 각자의 프로세스이다.(실행파일)
Thread : 프로세스내에서 실행되는 흐름의 단위를 말한다
각 프로세스는 주 스레드라고 하는 단일 스레드로 시작한다.
프로세스는 하나 이상의 스레드로 이루어진다.
스레드는 프로세스를 여러개의 조각으로 나눈 것이다. 
한 프로세스에서 여러 스레드가 동시에 작업을 처리 할 수 있게 해준다.
예를 들면 음악플레이어 프로세스에서 여러 스레드로 나눠서
한 스레드는 음악을 재생, 또 다른 스레드는 가사를 보여 주고, 다른건 음악 싱크를 맞추는 등의 방식으로
여러가지 작업을 동시에 처리하게 할 수 있다.

3. Garbage Collector
Garbage Collector는 메모리 관리 기법 중의 하나이다.
프로그램이 동적으로 할당했던 메모리 영역중에서 필요없게 된 영역을 해제하는 기능
즉, 동적으로 할당된 메모리에서 더 이상 사용할수 없게된 영역을 탐지하여 자동으로 지우는 것
대표적으로 값 형식 객체는 메모리 스택에 할당되고, 블록이 끝나면 메모리에서 지워지지만,
참조형식 객체는 힙에 할당되어 계속 남아있게 된다. 계속 남아있으면 메모리를 차지하게 되는데
이걸 GC가 어느 시점에서 처리를 해주는 역할을 한다.

4. Prefab 
Prefab은 어원은 미리 부품의 가공과 조립을 만들어 놓고 설치하는 건축용어이다.
즉, 도장 같은 개념이라고 보면된다.
유니티에서는 여러컴포넌트를 구성하고, 이미 완선된 게임오브젝트를 언제든지
재사용할 수 있는 기능을 뜻한다. 프리팹을 여러개 만들어도, 프리팹의 속성을 바꾸면
생성된 게임오브젝트에 모드 반영되기 때문에 일일히 바꾸는 수고를 덜어준다.


5. Stack overflow 
Stack overflow는 메모리 오류의 일종이다.
자료구조의 한 종류인 스택에서 원래 할당된 메모리 공간보다 많은 데이터가
들어갈 경우 데이터를 받아들이지 못하고 생기는 오류를 의미한다.
즉, Stack 영역의 메모리가 지정된 범위를 넘어갈때 발생한다.
무한 루프나 재귀함수에서 탈출문을 만들어주지 않는 경우 많이 발생한다.

6. Stack & Queue 
둘 다 자료구조(데이터를 어떻게 넣고 관리하는지)의 종류중 하나이다.
Stack은 "쌓아 올린다"라는 의미를 가진다.
따라서, 스택 자료구조는 마치 책을 쌓는 것 처럼 차곡차곡 쌓아 올린 형태의 자료구조를 말한다.
특징으로는 LIFO(Last In First Out) 방식으로 후입선출 방법으로 데이터가 들어가고 나온다.
제일 위에 있는 데이터를 TOP이라하고, TOP를 통해서 삽입되는 연산은 "PUSH" 삭제는 "POP"를 사용한다.
Queue는 "줄을 서서 기다린다."라는 의미로 생각하면 좋다.
따라서, 큐 자료구조는 먼저 넣은 데이터가 먼저 빠지는 구조로 되어있다.
특징으로는 FIFO(First in first ot) 방식으로 선인선출 방법으로 데이터가 들어가고 나온다.
큐의 가장 첫 데이터는 Front, 가장 끝 데이터는 Rear 라고하고,
삽입연산은 Rear에서 EnQueue, 삭제연산은 Front에서 DeQueue로 작동한다.


7. Method overloading & overriding 
overloading 은 사전적으로는 과적하다라는 의미를 가지고있습니다.
오버로딩은 하나의 메소드에 여러가지로 구현하는 것을 말합니다.
간단하게 말하면, 클래스 내에서 메서드의 이름은 똑같지만, 매개변수 갯수나, 타입, 리턴 타입이 
다른 메서드를 여러개를 정의할 수 있게하여, 일관성 있게 메서드를 작성해주는 방법을 말합니다.
overriding 은 사전적 의미는 더 중요한, 최우선되는 의미를 가집니다.
자식클래스에서 부모클래스로부터 상속받은 부모의 메서드를 재정의하여 사용하는 것을 의미합니다.
메서드를 오버라이딩 할때는 부모클래스에서는 virtual로 자식 클래스는 override 키워드를 써야한다.
그리고 private 한정자를 넣으면 안된다.
OOP 프로그래밍에서 다형성(Polymorphism)은 객체가 여러행태를 가지는 것인데.
그 다형성을 구현하기 위해서는 오버라이딩을 사용합니다.


8. Polymorphism 
객체지향프로그래밍은 다형성을 지원한다는 특징을 가지고있다. 다형성이란 
쉽게 말하면, 형태는 같지만 그 안에는 각자 고유의 특징을 가질 수 있다는 걸 의미합니다.
예를 들어 상속과 연관을 지으면, 동물이라는 클래스를 상속받는 강아지와 고양이가 있습니다.
두 동물 모두 동물의 기능인 "움직임"를 가지고 있습니다. 하지만, 울음소리는 저마다 다를 수 있습니다.
위와같이 개별적으로 따로 기능을 구현하지않고, 하나의 코드로 쉽고, 효율적으로 처리할 수있게 도와줍니다.
다형성과 관련하여 C#에서는 오버라이팅, 업캐스팅, 다운캐스팅, virtual, abstract, 인터페이스 등등이 있습니다.

 
9. Syncoronous & Asynchronous 
동기(Synchronous)는 순차적, 직렬적으로 테스크를 수행한다.
요청을 보낸 후 응답을 받아아야지만 그 다음 작업을 실시하는 방식을 말한다.
즉, 모든 작업은 순차적으로 실행되며, 어떤 작업이 수행 중이라면 다음 작업은 대기하게 된다.
비동기(Asynchronous)는 비순차적, 병렬적으로 태스트를 수행한다.
비동기는 이전 작업이 끝나지 않아도 작동하는 특징을 가지고 있다.
만약 동기로 작업 처리를 한다면, 여러군데로 데이터를 보내는 통신을 할때, 이전 데이터 전송이 작업이
끝나지 않으면 계속 지연되는 문제를 야기 시킨다. 이런 경우에는 비동기로 해야한다.
비동기식은 작업이 끝난 후 처리 결과를 알려주는 콜백이라는 함수를 함께 사용해서 알려준다.


10. Coroutine 
코루틴은 Unity 프로그래밍에서 중요한 개념 중 하나입니다.
유니티의 LifeCycle에서 Update 합수는 고저오딘 일정 주기를 가지고 수행이 된다. 
그래서 함수 제어권을 가지기 힘들다 (특정 프레임마다 계속 돌고있다.)
하지만 코루틴은 Yield를 사용해서 함수 제어권을 가질수 있기 때문에 원하는
시점에 메서드를 수행 할 수 있고, 또는 멈추고 다음 프레임으로 순서를 조정 할 수 있는 큰 특징을 가지고있는다.
장점은 위에서 와 같이 원하는 타이밍에 코드 실행 가능.
시작과 종료 지점을 정할 수 있음
코루틴 별로 따로 관리 가능
단점으로는 스크립트가 사용정지 할 때 코루틴도 직접 종료시켜줘야함
GC가 자주 생성됌
선형적인 코드 작성에서 벗어나서 해석이 어려워 질 수도있음
코루틴을 쓰기 위한 조건은 
IEnumerator 와 yield return 를 꼭 기입해줘야한다.

반응형