본문 바로가기

전체 글

(59)
5. 얕은 복사(Shadow Copy)와 깊은 복사(Deep Copy) C#으로 코딩하다보면 서로 비슷하거나, 같은 부분이 많은 클래스를 복사하고 싶어질 때가 있다. 그럴 때, 아래와 같이 클래스를 복사하는 경우도 존재한다.using System;namespace Favor{ class Test { int num; int num1; } internal class Program { static void Main(string[] args) { Test t = new Test(); t.num = 10; t.num1 = 20; Test t2 = t; } }} 이렇게 복사했을 경우, 만약 t2의 값이나 t의 값을 바꾸고 싶어지는 경우도 물론 존재..
4. 생성자 (Constructor) 이번에는 C#의 클래스에 있는 요소들 중, 생성자에 대해 다루어 보겠다. 우선, C# 클래스의 구조는 C++때와는 조금 다른데, C#클래스의 구조를 보자. using System; namespace Favor { class Player { int hp; } internal class Program { static void Main(string[] args) { } } } 간략하게 Player라는 class를 만들어보았다. C++에서 다뤘던 때와 달리, 굉장히 간소해졌다. public 멤버와 private 구역을 나누는 public: private:이 모두 없다. 대신, 이제 class에서 선언되는 멤버들은 따로 접근제한자(public, private...)를 설정하지 않으면 디폴트로 private로 설정..
3. foreach문 C++을 사용할 때 까지는 for문을 다뤘었다. 기준이 되는 연산식을 직접 for문 안에 대입하고 기입한 연산식이 참이 될 때 까지 증감식을 통해 반복하는 구조였다. 앞서 2. 배열 에서 배웠던 배열에 담긴 자료형을 다룰 때에 유용한 반복문이 C#에서 추가로 생겨났는데, 이 개념이 오늘 다루어 볼 foreach 문이다. foreach 문은, 구문 안에 배열 혹은 추후에 다루게 될 컬렉션을 삽입하여, 내부의 값에 전부 접근할 때 까지 index값을 조정하며 순환하는 반복문이다. using System; namespace Favor { internal class Program { static void Main(string[] args) { int[] arr1 = new int[5] { 1, 2, 3, 4, ..
2. 배열 C++에서 그랬듯 C#에서도 배열을 선언하고 초기화할 수 있다. 그러나 C++ 과는 다른 식으로 배열을 선언하고 초기화 해야한다. using System; namespace Favor { internal class Program { static void Main(string[] args) { int[] arr1 = new int[3] {1, 2, 3}; } } } C#에서의 배열의 선언은 위와 같다. C++에서는 자료형을 명시하고, 배열의 이름을 명시한 뒤, 이름 뒤에 배열의 크기를 [] 대괄호 안에 명시했었는데, C#에서는 오히려 자료형 뒤에 []대괄호를 사용해 이 변수가 단순히 int형 변수인지, int형 자료를 저장하는 배열 변수인지를 나타낸다. 또 다른점은, 대입 연산자 = 를 사용한다는 점과 더..
1. 값 형식 변수와 참조 형식 변수 우리가 C++에서 다루었던 변수들은 다양했다. 3. 변수(Variable)에서 설명했던 변수는 저장하고 싶은 데이터의 자료형과 이름을 정하고, 그 값을 대입하면 됐었다. 이렇게 선언된 변수는 메모리영역 중 스택에 값이 저장되고, 그 값의 이름을 호출하면 그 값이 대입되는 방식이다. 예를들어, int a = 10; 이라고 변수를 선언했다면, 이 변수를 선언한 함수에서는 a는 곧 10이다. 스택영역의 특성상, 선언된 변수는 선언이 되었던 함수가 종료되면 방을 빼게 되어있다. 즉, 변수의 이름도, 값도 전부 사라지는 것이다. 이러한 변수를 값 형식의 변수라고 부른다. 스택 영역에 특정 값이 저장되고, 그 값을 변수의 이름을 통해 사용할 수 있는 것이다. 직접 값을 갖는 값 형식 변수 말고, 주소값을 갖는 참조..
0. C# 입출력 (Console.) 이번엔 새로 C#에 대해 다루어볼 것이다. C++과 C#은 서로 공통점도 많고, 사용하는 문법의 형식도 완전히 같은 경우가 많지만, 그 중에서도 이번엔 입출력과 관련한 부분 중 서로 다른 부분들에 대해서 알아볼 것이다. 먼저 기존에 입력과 출력을 위해 사용했던 std 네임스페이스는 사용하지 않고, Console이라는 클래스를 사용한다. using System; namespace Favor { internal class Program { static void Main(string[] args) { int a = 10; Console.WriteLine(a); Console.Write("hello"); Console.Write("world"); // 출력값 : 10 // hello world } } } Con..
21. STL 컨테이너 vector 이번 장에서는 갑자기 모르는 단어뿐으로 제목이 이루어져있다. STL은 무엇이고, 컨테이너는 무엇이며, 또 vector는 무엇인가? 이를 하나씩 천천히 다루어 보려고 한다. 맨 먼저, STL은 무엇인가? STL은 Standard Template Library의 약자로, 템플릿을 이용한 자료구조, 알고리즘 등을 정리해둔 라이브러리. 즉, 저장소를 표준으로써 지정한 것이다. 우리가 프로그램을 구현하면서, 다루기 복잡한 자료형을 다룰 때도 있고, 구현하기 어렵거나 혹은 구현하는 것이 굉장히 번거로워서 알고리즘이 필요해 사용할 때 마다 오랜 시간을 잡아먹는 알고리즘들이 생길 때가 찾아온다. 그럴 때를 위해, 사용 빈도가 높고, 관리하기 쉬운 자료구조나 알고리즘을 미리 제공하는 것이다. STL에는 대표적으로 3개의..
20. 템플릿 프로그래밍을 하다보면, 함수든 변수든 자료형을 특정하여 선언해야하는 경우가 대부분이다. 그렇기 때문에, 아래와 같이 다른 자료형을 다루지만 같은 의미를 가진 변수나, 다른 자료형을 다루지만 같은 기능을 가진 함수를 선언해야하는 일이 잦다. #include int GetMax(int x, int y) { if (x > y)return x; else return y; }; float GetMax(float x, float y) { if (x > y)return x; else return y; } //double GetMax... 이러한 불편함을 피하기 위해서 C++에서는 템플릿이라는 기능이 있다. 템플릿에는 크게 함수 템플릿, 클래스 템플릿이 있다. 템플릿에 사용예는 아래와 같다. #include templ..