in ( 매개변수 키워드 , 참조 전달 )
·
⭐C Sharp/07. 메서드(함수)
in ( 매개변수 키워드 )C# 에서 in 매개변수 키워드는 잘 쓰이지 않지만, 읽기 전용 참조 전달을 할 때에 유용하다.in 키워드는 매개변수를 참조로 전달 ( ref / out 처럼 ) 한다.메서드 안에서 앖을 수정할 수 없게 ( 읽기 전용 ) 만드는 역할을 한다.값 형식 ( 구조체 같은 큰 데이터 ) 을 복사하지 않고 참조로 전달하므로 성능 최적화에 유용 문법▼메서드 정의public void MyMethod(in int number){ // number = 20; 컴파일 에러! in 매개변수는 수정 불가 Console.WriteLine(number); // 읽기 전용 사용 가능} ▼메서드 호출int x = 10;MyMethod(x); // 호출할 때는 그냥 변수 전달 가능My..
out ( 매개변수 키워드 , 참조 전달 )
·
⭐C Sharp/07. 메서드(함수)
out ( 매개변수 키워드 )out 키워드는 메서드의 매개변수를 참조 ( Reference ) 로 전달하는 방식 중 하나이다.ref 와 달리 호출하는 쪽에서 변수를 초기화할 필요는 없다.메서드 안에서 해당 매개변수에 반드시 값을 할당해야 한다.주로 여러 개의 값을 반환해야 할때 사용된다. 문법▼메서드 정의 반환형 메서드이름(매개변수1, out 자료형 변수명, ...) ▼메서드 호출메서드이름(값1, out 변수명); 예시 코드using System;class Program{ // 두 정수를 나눠서 몫과 나머지를 out으로 반환 static void Divide(int a, int b, out int quotient, out int remainder) { quotient = ..
ref ( 매개변수 키워드 , 참조 전달 )
·
⭐C Sharp/07. 메서드(함수)
ref ( 참조 전달 , 매개변수 키워드 )ref 는 메서드의 매개변수를 참조 ( Reference ) 로 전달할 때 사용하는 키워드이다.기본적으로 C# 에서 값 형식 ( Value Type ) 은 메서드 호출 시 복사되어 전달된다.그래서 메서드 안에서 값을 변경해도 원본에는 영향이 없다.ref 를 붙이면 원본 변수를 직접 참조하기 때문에, 메서드 안에서 수정하면 호출한 쪽 변수도 같이 변경된다. 문법▼메서드 정의void ChangeValue(ref int number){ number = 100; // 원본 변수 자체가 변경됨} ▼메서드 호출int x = 10;ChangeValue(ref x);Console.WriteLine(x); // 100 출력 ref 는 메서드 정의와 호출 양쪽 모두에 붙..
참조 ( Reference Type )
·
⭐C Sharp/10. 참조
참조 ( Reference Type )참조 타입의 객체가 지역변수로 생성되면 힙 ( Heap ) 메모리에 원본 데이터가 올라간다.그 객체를 가리키는 변수는 그 주소값을 스택 ( Stack ) 메모리에 저장한다. 메모리 저장 위치 설명class Player{ public string Name;}Player plr = new Player(); plr : 스택 ( Stack ) 에 위치 ( 4 byte 또는 8 byte 주소값 )new Player() : 힙 ( Heap ) 에 실제 원본 데이터를 할당한다. 인스턴스를 생성한다 ( 실제 데이터 공간 )변수 plr 는 힙의 메모리 주소를 가리키는 역할을 한다.class Monster{ public string Name; public int Leve..
제네릭 ( Generic )
·
⭐C Sharp/15-1. 제네릭
제네릭 ( Generic )제네릭은 클래스 , 메서드 , 구조체 등에 데이터 타입을 매개변수화 해서 코드의 재사용성과 타입 안정성을 높이는 문법이다.자료형을 고정하지 않고 어떤 타입이든 받을 수 있도록 만든 문법이다. 1. 제네릭 클래스 선언public class Box{ private T item; public void SetItem(T value) { item = value; } public T GetItem() { return item; }} 람다식 ( => ) 을 사용하면 코드를 간결하게 할수 있다.public class Box // → 타입 매개변수{ private T item; public void SetItem(T..
딕셔너리<TKey , TValue> ( Dictionary )
·
⭐C Sharp/15-5. 딕셔너리 해시테이블
딕셔너리딕셔너리는 자료구조 중에서 데이터를 Key 와 Value 의 쌍으로 저장하는 해시 테이블 ( Hashtable ) 을 기반으로 하는 제네릭 컬렉션이다. 배열이나 리스트처럼 순서 ( Index ) 로 접근하는 것이 아니라, 고유한 키 ( Key ) 를 통해 값 ( Value ) 을 빠르게 조회할 수 있다. 선언과 초기화Dictionary 변수명 = new Dictionary();- TKey : 키의 자료형- TValue : 값의 자료형 초기 값을 설정할 수 있다.Dictionary scores = new Dictionary(){ { "장한", 90 }, { "호찬", 85 }, { "윤수", 100 }}; 요소 추가dict.Add("향숙", 60); // Add 메서드로 추가d..
퀵 정렬 ( Quick Sort )
·
📊Algorithm/정렬
퀵 정렬 ( Quick Sort )퀵 정렬은 분할 정복 ( Divide and Conquer ) 방법을 사용하는 정렬 알고리즘이다.배열에서 피벗 ( Pivot )을 선택하고 , 피벗을 기준으로 작은 값은 왼쪽, 큰 값은 오른쪽으로 분할한다.이 과정을 재귀적으로 반복하여 정렬한다.배열에서 기준값 피벗 ( pivot )을 하나 정한다피벗보다 작은 값은 왼쪽으로, 큰 값은 오른쪽으로 보낸다이렇게 나뉜 두 구간을 다시 퀵 정렬로 정렬한다더 이상 나눌 수 없을 때까지 재귀적으로 반복한다 동작 과정1. 배열에서 하나의 원소를 피벗 ( pivot )으로 선택한다.2. 피벗보다 작은 원소들은 왼쪽 , 큰 원소들은 오른쪽에 배치한다.3. 피벗을 제외한 왼쪽 부분 배열과 오른쪽 부분 배열을 재귀적으로 정렬한다.4. 더 ..
피셔 예이츠 셔플 ( Fisher Yates Shuffle )
·
📊Algorithm/셔플
피셔 예이츠 셔플 ( Fisher Yates Shuffle )피셔 예이츠 셔플은 배열이나 리스트의 원소들을 무작위 ( Random )로 섞는 알고리즘이다.모든 가능한 순열이 동일한 확률로 발생하도록 보장한다는 특징이 있다.피셔 예이츠 셔플은 처음 기술한 로널드 피셔와 Frank Yates 의 이름을 따서 명명되었다.도널드 커누스의 이름을 따서 커누스 셔플이라고 부르기도 한다.배열의 끝에서부터 앞으로 이동하면서,현재 위치 i 와 0 ~ i 사이 임의의 위치 j 를 뽑는다.arr[ i ] 와 arr [ j ] 를 교환한다.배열의 처음까지 진행하면, 전체 배열이 무작위로 섞인다. 동작 과정1. 배열의 끝에서 시작한다. ( i = n - 1 )2. 현재 인덱스 i 와 0 ~ i 사이의 무작위 인덱스 j 를 선..
삽입 정렬 ( Insertion Sort )
·
📊Algorithm/정렬
삽입 정렬 ( Insertion Sort )삽입 정렬은 배열을 앞에서부터 차례대로 보면서, 현재 원소를 알맞은 위치에 삽입하는 방식의 정렬 알고리즘이다.이미 정렬된 부분 배열을 유지하면서, 새로운 원소를 하나씩 삽입하는 방식이라 삽입 정렬이라 부른다.배열의 두 번째 요소부터 시작해앞쪽 정렬된 부분과 비교하며 자신보다 큰 값을 밀어낸 뒤,빈 자리에 현재 값을 삽입한다. 동작 과정예를 들어 [ 5 , 3 , 8 , 4 , 2 ] 를 오름차순 정렬한다고 가정1. 초기 상태- 첫 번째 원소 ( 5 ) 는 이미 정렬된 상태로 간주 2. [ 3 ] 삽입- 5 > 3 → [ 5 ] 에서 [ 3 ] 의 위치를 찾음 → [ 5 ] 앞에 삽입- [ 3 , 5 , 8 , 4 , 2 ] 3. [ 8 ] 삽입- [ 3 , 5..