'C#'에 해당되는 글 39건

  1. 2019.03.25 Console.Read() 의 형변환 [해결]
  2. 2019.03.25 5. Stack과 Heap
  3. 2019.03.25 4. 문자열 표현식
  4. 2019.03.25 3. 데이터의 값형식과 참조형식
  5. 2019.03.24 2. 몬스터 공격 예제[3단계]
  6. 2019.03.24 1. For문의 구성과 흐름
  7. 2019.03.24 1. Method

Console.Read() 의 형변환 [해결]

C#/Problems 2019. 3. 25. 20:31

Console.Read() 메서드는 기본적으로 integer 형을 반환하게 되어있는데,

'4'를 입력하고 integer 형의 변수로 값을 받았을 때, 52가 출력된다.



이는 Convert.Tochar를 이용하고, 파싱을 다시 해야하는데

이는 공부해보고 Read는 integer형으로 받았는데 왜 다른 값이 나오는지 알아봐야겠다.

이번 주 안에 풀어서 해답과 함께 포스팅해야지






-해답

Console.Read() 메서드는 integer형을 반환하나, 전달받은 값을 문자로 받고, ASCII Code로 변환하여 반환한다.

결국 integer형을 반환하는 것은 같지만, 그래서 내가 넣은 값이 그대로 return되지 않았다.

:

5. Stack과 Heap

C#/과제 2019. 3. 25. 00:57

Memory는 Text, Data, BSS, Heap, Stack으로 구성된다.


1. Stack이란?

Stack은 데이터가 Method가 실행되고서 부터 하나씩 차례대로 저장하는 구조이다.

하나 하나 쌓이다가 나중에 들어온 데이터가 가장 먼저 나가는 'LIFO(Last In First Out)' 구조이다.

이는 우리가 문서를 PC로 작성하다가 쓰는 단축키를 예로 들면 쉽게 이해가 된다.

Ctrl+Z를 하면 바로 이전 단계로 되돌아가는데 이처럼 마지막에 실행된 값이 가장 먼저 나가는 구조이다.

PUSH를 통하여 값을 쌓고, POP을 통하여 값을 꺼내 지운다. 


즉, 우리가 작성한 Method가 실행될 때 변수가 Stack에 PUSH되고, Method가 return을 함으로서 종료될때 POP이 되는 것이다.

예를 들어 위와 같은 코드에서는 Main에서 ABC개체의 sum이라는 Method에 10과 20을 보낸다.

Method를 호출함과 동시에 스택에는 a=10; b=20;이 저장되고,

return a + b;를 통하여 30을 리턴함과 동시에 스택은 비워지게 된다.



2. Heap이란?

우리가 흔히 동적할당, 즉 new나 malloc을 통하여 메모리를 할당할 때 사용하는 메모리 공간이다.

Heap은 참조형식의 데이터타입 변수들이 가리키는 곳으로 이 곳에 저장되는 데이터들은 다른 참조형식의 변수가 접근할 수 있다.

그 누구도 메모리를 가리키지 않을 때 메모리할당을 해제하거나 하기 때문에, 수동적으로 메모리 할당을 해제하여 주는 것이 좋다.

주소를 참조하는 변수를 이용하여 접근하기 때문에 액세스 속도가 Stack에 비해 떨어지지만,

Method가 소멸할 때 같이 소멸하는 Stack과는 달리 Method와 관계없이 존재하기 때문에 어느 지점에서든 접근할 수 있는 것이 장점이다.

즉, 전역변수가 존재하는 구역이라고 생각하면 된다.

위의 예제와 같은 것인데 Main부분을 보면, new calcul();이라는 곳이 보인다.

이를 통하여 Heap공간에 calcul개체 하나만큼의 공간을 할당하고 개체를 생성한다는 뜻이다.

ABC는 참조형식의 변수이므로 그 할당한 개체의 주소를 참조하고 있기 때문에 sum이라는 Method를 불러올 수 있는 것이다.

하지만 ABC는 Stack에 저장되므로, 만약 Main이 아닌 다른 Method에 위치했을 경우에는 그 Method가 소멸할 때 ABC도 소멸한다.

그렇게 될 경우 new calcul();을 가리키는 변수가 없으므로 메모리는 의미없이 누수되는 것이다.




참조

시스템 해킹 강좌 5강 메모리 구조 이해하기 (동빈나)

https://www.youtube.com/watch?v=TxWOaKE5w_s


.NET Stack and Heap (Wallace Kelly)

https://www.youtube.com/watch?v=clOUdVDDzIM


Pointers and dynamic memory - stack vs heap (mycodeschool)

https://www.youtube.com/watch?v=_8-ht2AKyH4


C# Heap(int) Vs Stack(ing) In .NET - Part One (Metthew Cochran)

https://www.c-sharpcorner.com/article/C-Sharp-heaping-vs-stacking-in-net-part-i/


'C# > 과제' 카테고리의 다른 글

7. 형식변환  (0) 2019.03.26
6. using  (0) 2019.03.26
4. 문자열 표현식  (0) 2019.03.25
3. 데이터의 값형식과 참조형식  (0) 2019.03.25
2. 몬스터 공격 예제[3단계]  (0) 2019.03.24
:

4. 문자열 표현식

C#/과제 2019. 3. 25. 00:13

C#에는 우리가 C, C++에서 사용하던 printf, cout과는 달리 여러가지 문자열 표현방식을 제공한다.



위의 캡처에서 말하는 Escape 문자란,

\n(줄내림), \t(탭), \a(삐-소리) 등 문자로 표현하기 힘든 기능들을 역슬래시와 문자를 결합하여 사용하는 것을 뜻한다.

\\라고 작성할 경우 \\는 Escape 문자로 역슬래시를 1개 출력하는 문자인데, @를 포함하여 작성할 경우 2번째 처럼 \\ 그대로 출력이 되는 것이다.



참조 : Microsoft Docs

https://docs.microsoft.com/ko-kr/dotnet/csharp/tutorials/string-interpolation (문자열보간)

https://docs.microsoft.com/ko-kr/dotnet/api/system.string?view=netframework-4.7.2 (String Class)

'C# > 과제' 카테고리의 다른 글

6. using  (0) 2019.03.26
5. Stack과 Heap  (0) 2019.03.25
3. 데이터의 값형식과 참조형식  (0) 2019.03.25
2. 몬스터 공격 예제[3단계]  (0) 2019.03.24
1. For문의 구성과 흐름  (0) 2019.03.24
:

3. 데이터의 값형식과 참조형식

C#/과제 2019. 3. 25. 00:04

C#의 데이터 형식은 값형식과 참조형식으로 나눌 수 있다.

이 두가지 형식의 차이점은 Value로 볼 수 있다.


또한 모든 값 형식은 System.ValueType에서 암시적으로 파생된다.


이처럼 우리가 사용하는 int, char, double 등의 값형식의 데이터타입들은 모두 System속에서 파생된 것이란걸 알 수 있다.

값 형식은 기본적으로 NULL일 수 없으나 nullable 형식의 변수는 NULL일 수 있다.

이 말인 즉슨 값형식의 데이터타입은 모두 기본적으로 초기화를 해야만 사용할 수 있다는 뜻이다.

기본 생성자가 존재하며, 생성자 또는 리터럴을 통하여 초기화 할 수 있다.



예시를 들어 확인해보자.


<값 형식>

위의 예시와 같이 기본적으로 초기화를 해주지 않으면 사용할 수 없다.



<참조 형식>



값형식은 Stack에 존재하고, 데이터 그 자체를 Stack안에 존재하는 값형식의 변수가 복사하여 가지고 있다.

이와 다르게 참조형식은 변수가 Stack에 존재하지만, 가지고 있는 값은 Heap에 존재하는 객체의 주소를 가지고 있다.


즉, 값형식은 다른 변수가 개입을 할 수 없게 개인의 값을 가지고 있는 것이고,

    참조형식은 Heap에 존재하는 데이터의 주소를 가지고 있으므로 다른 변수가 개입하여 그 주소의 값을 변경할 수 있다.



참조 : Microsoft Docs

https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/value-types (값 형식)

https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/reference-types (참조 형식)


youtube - .NET Stack and Heap (Wallace Kelly)

https://www.youtube.com/watch?v=clOUdVDDzIM



'C# > 과제' 카테고리의 다른 글

6. using  (0) 2019.03.26
5. Stack과 Heap  (0) 2019.03.25
4. 문자열 표현식  (0) 2019.03.25
2. 몬스터 공격 예제[3단계]  (0) 2019.03.24
1. For문의 구성과 흐름  (0) 2019.03.24
:

2. 몬스터 공격 예제[3단계]

C#/과제 2019. 3. 24. 23:50



'C# > 과제' 카테고리의 다른 글

6. using  (0) 2019.03.26
5. Stack과 Heap  (0) 2019.03.25
4. 문자열 표현식  (0) 2019.03.25
3. 데이터의 값형식과 참조형식  (0) 2019.03.25
1. For문의 구성과 흐름  (0) 2019.03.24
:

1. For문의 구성과 흐름

C#/과제 2019. 3. 24. 23:38

for문은 반복문으로서 condition(조건문, 부울식)의 결과값이 True일 동안 { } 안에 쓰인 본문을 계속하여 실행한다.

for문은 break;를 이용하여 종료할 수 있고, 결과값이 False일 경우 종료된다.



for문은 이렇게 구성된다.



여기서 int i = 0; 부분은 initializer 부분으로 초기값을 설정해주는 부분이다.

i < 3; 부분은 condition 부분으로 for문이 반복하여 실행하는 것의 기준인 True와 False를 리턴하는 연산을 한다.

즉, 비교 연산자를 이용하여 반복 실행하는 조건을 작성하는 부분이다.

i++ 부분은 iterator 부분으로써 본문이 실행 된 후에 증감연산자를 이용하여 값을 증감시키는 부분이다.



위의 예시를 순서대로 풀어보면 이렇게 된다.


1. int형 변수 i의 값은 0이다. (initializer 부분)

2. i의 값은 0이다. (condition 부분)

3. 0은 3보다 작다. (condition 부분)

4. 비교연산자(<)의 결과 값이 True이므로 for문의 본문을 실행한다. (condition 부분)

5. Console.Write(i); 에서 i의 값은 0이다. Console.Write를 이용하여 0을 출력한다.

6. i의 값은 0이다. (iterator 부분)

7. 0을 1증가시킨다. (iterator 부분)


8. i의 값은 1이다. (condition 부분)

9. 1은 3보다 작다. (condition 부분)

10. 비교연산자(<)의 결과 값이 True이므로 for문의 본문을 실행한다. (condition 부분)

11. Console.Write(i); 에서 i의 값은 1이다. Console.Write를 이용하여 1을 출력한다.

12. i의 값은 1이다. (iterator 부분)

13. 1을 1증가시킨다. (iterator 부분)


14. i의 값은 2이다. (condition 부분)

15. 2는 3보다 작다. (condition 부분)

16. 비교연산자(<)의 결과 값이 True이므로 for문의 본문을 실행한다. (condition 부분)

17. Console.Write(i); 에서 i의 값은 2이다. Console.Write를 이용하여 2를 출력한다.

18. i의 값은 2이다. (iterator 부분)

19. 2를 1증가시킨다. (iterator 부분)


20. i의 값은 3이다. (condition 부분)

21. 3은 3보다 작다. (condition 부분)

22. 비교연산자(<)의 결과 값이 False이므로 for문을 종료한다. (condition 부분)




참조 : Microsoft Docs

   https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/for

'C# > 과제' 카테고리의 다른 글

6. using  (0) 2019.03.26
5. Stack과 Heap  (0) 2019.03.25
4. 문자열 표현식  (0) 2019.03.25
3. 데이터의 값형식과 참조형식  (0) 2019.03.25
2. 몬스터 공격 예제[3단계]  (0) 2019.03.24
:

1. Method

C#/수업내용 2019. 3. 24. 23:33

c#에서 Method(메서드)는 일련의 문을 포함하는 코드 블록으로서, Class 또는 Struct 내에서 서명한다.

서명의 범위는 액세스 수준(public, private), 선택적 한정자, 리턴 값, 이름, 매개 변수를 포함한다.

C, C++에서 얘기하는 Function(함수)와 형식이 같다.


예제


위의 예제에서는 Computer에 속한 public수준을 가진 out_info라는 Method를 서명하고 Main에서 호출하는 예제이다.

이 예제에서 액세스 수준은 public, 리턴 값은 void형이므로 없음, 이름은 out_info, 매개 변수는 int형 number이다.

호출시 A_Computer라는 개체에 존재하는 out_info를 불러야 하므로 온점(' . ')을 사용하여 호출 후, 괄호안에 number에 해당하는 값을 전달한다.

그 결과 전달된 "1"이라는 값이 number의 값에 대입되어 "1번째 삼보의 가격 : 100"이라는 문자열이 출력된다.



참조 : Microsoft Docs(메서드(C# 프로그래밍 가이드))

   https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/methods

'C# > 수업내용' 카테고리의 다른 글

제너릭 클래스, 상속을 이용하여 Inventory 만들기  (0) 2019.04.01
List를 이용하여 Inventory 만들기  (0) 2019.04.01
Array를 이용하여 Inventory 만들기  (0) 2019.04.01
공부할것  (0) 2019.03.29
2. for, foreach, while  (0) 2019.03.27
: