본문 바로가기
반응형

전체 글500

C# 문법 - 스택과 힙 Stack 메모리 굉장히 불안정하고 임시적으로 사용는 메모리 함수를 호출 할때 임시 값을 넣어 연산을하고 함수가 종료되면 더 이상 사용을 안하게 된다. 함수를 실행하기 위한 메모장이라고 생각하면 된다. 함수를 실행하기 위해 안에 있는 모든 내용은 스택에 저장된다. stack 공간은 함수가 호출되면 늘어나고 종료되면 알아서 줄어든다. ex) main 함수 안의 변수 Heap 메모리 메모리가 동적 할당 되므로 그때 그때 필요할 때 메모리를 할당 받아 사용된다. 메모리를 할당을 했으면 함수가 종료돼도 메모리에 할당되어져있으므로 메모리를 반드시 해제해야 한다. ex) class 객체, new로 생성된 객체 본 게시글은 MMORPG Part1을 수강하고 정리한 글입니다. https://www.inflearn.co.. 2023. 4. 11.
C# 문법 - 복사(값)와 참조 1. 복사(값) // Copy 복사 struct Mage { public int hp; public int attack; } 구조체의 값은 스택(stack)에 할당된다. static void KillMage(Mage mage) { mage.hp = 0; } Mage mage; mage.hp = 100; mage.attack = 50; KillMage(mage); Console.WriteLine(mage.hp); mage의 복사값을 killMage에 보내줬기 때문에 mage.hp가 100인 것은 변하지 않는다. Mage mage2 = mage; mage2.hp = 0; Console.WriteLine($"mage 값 : {mage2.hp}"); mage와 mage2는 별도의 마법사이다. 2. 참조 // R.. 2023. 4. 10.
C# 문법 - Generic, Generic Constraints, Where 1. Generic 제네릭 타입에서는 데이터 형식을 확정하지 않고 데이터 타입 자체를 Type Parameter로 정의한다. 일반적으로 로 작성한다. // Generic class -> T안에 어떤 타입을 넣어도 작동된다. class MyList { T[] arr = new T[10]; public T GetItem(int i) { return arr[i]; } } static void Test(T input) { } 제네릭 타입을 사용할 때는 클래스명과 데이터 타입을 지정해주면서 사용하면 된다. static void Main(string[] args) { Test(3); Test(3.0f); } 2. Generic Constraints Where이란? 특정 조건에만 대응되는 데이터 타입이 필요한 경우 .. 2023. 4. 10.
C# 문법 - Object(박싱과 언박싱) Object 데이터 타입 모든 데이터 타입의 조상이다. 그러므로 값 형식 (int short) 및 참조 형식(struct, class)등이 Object의 상속 받는다. 그러므로 Object는 데이터 타입의 제한이 없으므로 편리하게 사용할 수 있다. 하지만 Object는 참조 타입으로 실행이 되기 때문에 무분별하게 사용하게 되면 메모리 낭비가 발생하게 된다. 01 boxing 쉽게 택배로 예를 들어보자 만약 유리병을 택배로 보내고 싶으면 유리병을 택배로 포장하고 택배 회사로 보내게된다. 여기에서 유리병은 값타입, 택배 포장은 참조타입으로 포장(박싱), 택배회사에 보냄은 참조 타입만 받는 매개변수에 전달이다. 값 형식을 object를 통해서 참조 형식으로 변환 // boxing int p = 123; // .. 2023. 4. 10.
백준 C# 10951 using System; using System.Text; namespace baek2 { class Program { static void Main(string[] args) { while(true) { string n_input = Console.ReadLine(); if (n_input == null) return; string[] input = n_input.Split(); int A = int.Parse(input[0]); int B = int.Parse(input[1]); Console.WriteLine(A+B); } } } } 2023. 4. 9.
백준 C# 10952 using System; using System.Text; namespace baek2 { class Program { static void Main(string[] args) { while(true) { string n_input = Console.ReadLine(); string[] input = n_input.Split(); int A = int.Parse(input[0]); int B = int.Parse(input[1]); if ((A == 0) && (B == 0)) return; Console.WriteLine(A+B); } } } } 2023. 4. 9.
반응형