본문 바로가기

CS

(26)
객체지향이란 소프트웨어 개발 방법론 중 하나로, 프로그램에서 가장 작은 단위를 객체로 만들고 객체 간의 상호작용을 이용해 소프트웨어를 개발하는 개념입니다. 객체지향의 특징 클래스와 객체 (Class & Objects): 클래스(Class)는 객체(Object)를 생성하기 위한 설계도로, 데이터와 메서드(함수)로 구성됩니다. 객체는 클래스의 인스턴스로, 클래스의 구조를 기반으로 실제 메모리에 할당된 것을 의미합니다. 캡슐화 (Encapsulation): 캡슐화는 데이터와 관련 기능(메서드)을 하나로 묶고, 외부에서의 접근을 제한하여 데이터의 안전성과 보안성을 보장합니다. 클래스는 자체적인 데이터를 관리하며, 외부에서는 내부 동작 방식을 몰라도 인터페이스를 통해 접근할 수 있습니다. 상속 (Inheritance): 상속..
자료구조의 종류와 차이점 배열(Array) 일련의 요소를 연속된 메모리 공간에 저장하는 자료구조입니다. 인덱스를 사용하여 빠른 요소 접근이 가능하며, 요소들은 순차적으로 저장됩니다. 크기가 고정되어 있어 삽입 및 삭제가 오버헤드가 크고 비효율적일 수 있습니다. 연결 리스트(Linked List) 노드들이 포인터로 서로 연결된 자료구조입니다. 각 노드는 데이터와 다음 노드를 가리키는 포인터로 구성되어 있습니다. 중간에 요소를 추가하거나 삭제하기 용이하지만, 임의의 위치에 빠르게 접근하는 것이 어려울 수 있습니다. 스택(Stack) 후입선출(LIFO, Last In First Out) 구조를 가진 자료구조입니다. 데이터를 넣는 작업을 푸시(push), 데이터를 꺼내는 작업을 팝(pop)이라고 합니다. 함수 호출의 실행 순서, 역추적..
값 형식과 참조 형식의 차이점 값 형식(Value Types)과 참조 형식(Reference Types)은 C#과 같은 프로그래밍 언어에서 데이터를 저장하고 다루는 데 사용되는 두 가지 기본적인 유형입니다. 값 형식 (Value Types): 기본 특징: 값 형식은 데이터를 스택(stack) 또는 메모리의 스택 영역에 직접 저장합니다. 기본 데이터 유형(int, float, double 등)과 구조체(struct)가 값 형식에 속합니다. 변수에 실제 값이 저장되며, 해당 값이 직접 콜렉션됩니다. 특징: 메모리에 데이터 자체가 저장되므로 다른 변수에 할당될 때 값이 복사됩니다. 값 형식 변수의 수정은 다른 변수에 영향을 주지 않습니다. 값 형식의 크기는 컴파일 시점에 결정되며, 스택 메모리 공간에 할당되므로 메모리 사용량이 예측 가능합..
스택, 힙 메모리와 차이점 스택(Stack)과 힙(Heap)은 컴퓨터 메모리에서 데이터 및 프로그램 실행에 사용되는 두 가지 주요 메모리 영역입니다. 이 두 영역은 데이터를 저장하는 방식, 할당 및 해제 방법, 사용 목적 등에서 차이가 있습니다. 스택(Stack): 특징: 스택은 메모리의 한 부분으로, 함수 호출 및 지역 변수와 같은 정적 메모리 할당에 사용됩니다. 데이터를 차곡차곡 쌓아 올리는 구조로, 후입선출(LIFO, Last In First Out) 방식을 따릅니다. 가장 최근에 추가된 데이터가 가장 먼저 제거됩니다. 주로 함수 호출 시 지역 변수, 함수의 매개변수, 복귀 주소 등을 저장하고 관리합니다. 할당 방식: 스택 메모리는 컴파일 시 크기가 결정되며, 메모리 관리가 운영체제에 의해 자동으로 이루어집니다. 지역 변수와..
선택 정렬과 버블 정렬 선택 정렬 배열을 반복하여 최소값을 찾아 해당 위치에 배치하는 방식으로 동작합니다. 매번 가장 작은 값을 찾아서 배열의 앞부분부터 순서대로 정렬해가는 방식입니다. int n = arr.Length; for (int i = 0; i < n - 1; i++) { int min_idx = i; for (int j = i + 1; j < n; j++) { if (arr[j] < arr[min_idx]) { min_idx = j; } } int temp = arr[min_idx]; arr[min_idx] = arr[i]; arr[i] = temp; } 버블 정렬 인접한 두 원소를 비교하여 순서가 잘못된 경우 서로 위치를 교환하는 정렬 알고리즘입니다. 가장 큰(또는 작은) 값이 배열의 마지막으로 이동할 때까지 반복..
정렬 알고리즘이란 정렬 알고리즘은 데이터를 특정한 순서로 재배열하는 알고리즘입니다. 이러한 알고리즘은 주어진 데이터 집합을 특정 기준에 따라 오름차순(ascending order) 또는 내림차순(descending order)으로 정렬하는데 사용됩니다. 다양한 정렬 알고리즘이 존재하며, 이 알고리즘들은 다양한 방법으로 작동합니다. 몇 가지 주요한 정렬 알고리즘에는 다음과 같은 것들이 있습니다: 버블 정렬 (Bubble Sort): 이웃한 두 요소를 비교하여 순서를 바꾸는 방식으로 데이터를 정렬합니다. 정렬이 완료될 때까지 반복하여 사용됩니다. 하지만 비효율적인 알고리즘이기 때문에 큰 데이터 집합에 대해서는 성능이 좋지 않습니다. 삽입 정렬 (Insertion Sort): 데이터를 하나씩 삽입하면서 이미 정렬된 부분에 적절..
콜백이란 콜백(callback)은 어떤 함수가 다른 함수에 인수로 전달되는 개념을 의미합니다. 이런 방식으로, 함수 A가 실행된 이후에 함수 B를 실행하도록 할 수 있는데 이때 함수 B를 '콜백 함수'라고 부릅니다 콜백은 비동기적인 작업을 처리할 때 많이 사용됩니다. 예를 들어, 네트워크 요청과 같은 작업을 수행할 때, 작업이 완료되면 특정 함수를 실행하도록 설정하면, 그 작업이 언제 끝날지 모르는 상황에서도 다른 작업들을 계속 진행할 수 있습니다. C#에서는 대표적으로 델리게이트(delegate)를 이용해서 콜백을 구현할 수 있습니다. 델리게이트는 함수에 대한 참조를 저장하는 타입으로, 이를 통해 함수를 인자로 전달하거나 반환값으로 사용할 수 있습니다.
람다식(Lambda Expression)이란 람다식(lambda expression)은 익명 함수(anonymous function)를 만드는데 사용되는 개념입니다. 주로 함수형 프로그래밍에서 쓰이며, 다른 함수에 인자로 전달되거나 변수에 할당되는 등의 용도로 활용됩니다.
delegate, event, action, func 간의 차이 delegate는 메서드의 참조를 저장하고 호출할 수 있는 형식입니다. 함수 포인터와 유사한 역할을 하며, 다른 메서드를 대신 호출할 수 있습니다. event는 델리게이트의 특별한 형태로, 특정 델리게이트 형식에 연결된 메서드들의 목록을 관리하는 데 사용됩니다. 주로 Observer 디자인 패턴을 구현하는 데 사용되며, 이벤트가 발생하면 다른 클래스에서 그 이벤트를 구독하고 처리할 수 있습니다. Action은 C#에서 제공하는 내장 델리게이트로, 델리게이트 선언과 이벤트 선언을 합쳐놓은 것이고, Func은 반환값이 있는 Action입니다.
델리게이트란 델리게이트(Delegate)는 C#에서 매우 중요한 개념의 하나로, 특정 메소드에 대한 참조를 저장하는 타입입니다. 이는 다른 언어의 함수 포인터와 유사한 개념이지만, 델리게이트는 객체 지향적이고 타입-안전한 방식을 제공합니다. 델리게이트는 메소드의 시그니처(리턴 타입과 매개변수)를 따르는 메소드를 참조하게 됩니다. 이를 통해 런타임에 메소드를 동적으로 바꿀 수 있게 해주며, 이는 콜백 메소드나 이벤트 핸들러 구현, 비동기 프로그래밍 등 다양한 상황에서 유용하게 사용됩니다.