Q1.배열이란?

A1.<동일한 데이터 유형>을 가지는 데이터 요소들을 한번에 모아서 다룰 수 있는 구조
선언된 크기 만큼 공간을 메모리에 할당받음 -> new int[10] ; //10개 int 변수(공간)을 할당받음

 

p.s

C/C++ 에서 2차원 배열 선언시 방식이 너무 달라서 적응이 힘들었음
C/C++ : int arr[2][3];

C# : int[,] arr = new int [2,3];

Q2.컬렉션이란?

A2.C#의 자료구조를 보관하고 있는 공간이며, C/C++로 치면 STL(Standard Template Library)와 유사함

using System.Collections.Generic

네임스페이스 안에 선언하고 사용함

 

p.s 컬렉션 안에 있는 자료구조 

1)List -> C++의 vector 생각하면됨(비슷함)
2)Dictionary -> C++의 unorderedamp 생각하면됨
key와 value값으로 나눠짐 , 중복된 키값을 가질수 없음 
3)Stack -> 선입후출(LIFO)
4)Queue -> 선인선출(FIFO)
5)HashSet -> C++의 Set 생각하면됨 ,중복되지 않음

 

배열 vs List (중요)

더보기

List는 삽입,삭제과 가능하여 매우 유용하지만 남발할경우 최적화에 좋지 않다.

 

1.메모리 사용량 증가 : 리스트는 동적배열이기에 크기 조정이 가능해짐
C# List가 제너릭으로 구성되어있고 내부가 동적배열 기반으로 되어있음
add도 메서드로 호출해서 추가하는 것,  

add의 방식을 간단히 설명하면 처음 초기화시 배열[4] 만들었다고 가정했을때

배열을 초과하는 숫자로 추가되는경우 배열[4]짜리를 지우고 배열크기를 2배로 늘려서 만듬


즉, 이러한 과정때문에 실제로 List를 사용시 처리비용이 매우큼
초기화시 .Capacity를 만들어 크기를 미리 선언 하면 최적화에 도움이 됨 

 

Q3.재귀호출이란?

A3.간단히 말하면 함수 자기자신을 호출하는 것
1.자기 자신 메서드를 호출하는 것을 의미
2.재귀 호출은 문제를 작은 부분으로 분할하여 해결하는 방법 중 하나
3.작은 부분의 해결 방법이 큰문제의 해결방법과 동일한 구조를 갖고 있는 경우 적합 -> 피보나치 수열
4.재귀 호출은 호출 스택에 호출된 메서드의 정보를 순차적으로 쌓고, 메서드가 반환되면서 스택에서
순차적으로 제거되는 방식으로 동작

 

(중요)

재귀 호출 활용과 주의점
1.복잡한 문제를 단순한 방식으로 해결하는 장점
2.종료조건을 명확하게 선언 , 무한 반복으로 인해 스택 오버플로우 발생 가능성
3.메모리사용량이 더크고 실행속도가 느림, 필요한 경우에만 적절히 사용 필요

 

Q4.구조체란?

A4.여러개의 데이터를 묶어서 하나의 사용자 정의 형식으로 만들기 위한 방법
구조제는 값 형식(Value Type)으로 분류되며, 데이터를 저장하고 필요한 기능을 제공 함

 

구조체 vs 클래스 (중요)

더보기

공통점

1)모두 사용자 정의 형식을 만드는데 사용

차이점
2)구조체는 값(value)형식, 스택에 할당되고 복사될 때 값이 복사
3)클래스는 참조 형식힙에 할당되고 참조로 전달되므로 성능 측면에서 다소 차이가 있음.
4)구조체는 상속을 받을 수 없지만 , 클래스는 단일 상속 및 다중 상속이 가능하다.
5)구조체는 작은 크기의 데이터 저장이나 단순한 데이터 구조에 적합
6)클래스는 더 복잡한 객체를 표현하고 다양한 기능을 제공하기 위해 사용

+ Recent posts