'분류 전체보기'에 해당되는 글 47건
- 2019.02.19 classic ASP FCM 서버 예제
- 2019.02.18 C# - 보충 : 함수와 return
- 2019.02.09 C#-11. 객체지향에서 용어정리
- 2019.02.08 프로그래밍은 어떻게 배워야 할것인가
- 2019.02.06 C#-10. 클래스의 정적멤버
- 2019.02.05 암호화폐 거래소의 입출금에 대한 2중적인 면
- 2019.02.05 C#-9. 생성자
- 2019.02.03 C#-8. C# 응용프로그램의 기본구조
- 2019.01.31 C#-7. 객체지향과 클래스
- 2019.01.29 C#-6. 데이타 타입
프로그래밍을 제일 처음하시는분들 그리고 저또한 프로그래밍을 처음할때 여러가지 우여곡절이
많았습니다. 함수가 없는 프로그래이밍 언어는 거의 없습니다. 함수는 프로그래밍을 이루는 아주 중요한 요소입니다. 함수용어 및 함수의 기능에 대해 완벽하지 않다면, 프로그래밍을 할 수가 없습니다.
절대로....
프로그래밍 기초부분이니까 다시 한번 보시겠습니다
그중에 함수의 return에 대해서만 오늘은 알아 보고, 다형성으로 넘어가지요
@. 리턴(return)의 정의
- "돌아가겠다" 라고 해석하시는분들도 계시고, "끝내겠따", "반환하겠다"라고 해석하시는
분들이 있는데 맞는말입니다.
- 정의를 하기 위해서는 기능을 알아보겠습니다.
1. 리턴의 의미
- 보이는그대로 return 이라는 글자만 있습니다. 종료의 의미만을 나타냅니다.
무엇을 종료하는냐?
- 함수를 종료할때 쓰입니다.
- 예를 들어보죠
class A
{
public int plus(int a, int b)
{
int c = a + b;
return c;
}
}
class program
{
static void Main()
{
A a = new A();
int result = a.plus(3, 4);
Console.WriteLine(result);
}
}
A클래스안에 plus라는 함수(메서드)가 있습니다. 함수라고 통칭하지요
public int plus(int a, int b)
1.함수이름 : plus
2.함수매개변수값 : int a, int b(2개)
3.함수의 리턴값 : int (함수이름앞에 int를 붙인거)
1,2,3번을 잘 보십시오, 함수자체로의 이러한 속성을 딱 봤을때 바로 보여야 합니다. 쉽지요?
물어보죠...함수의 이름이 뭔데요?? plus....
그렇다면...함수의 반환값은 뭔데요?? int형
오..그럼....함수의 매개변수는 뭔가요 int형 변수 a, int형 변수 b 이렇게 2개입니다.
자 정확히 답변이 되야합니다.
그렇다면 다시
public void Minus(string s) {......}
이 함수에 대해서 설명해보세요.
1. 함수이름 : Minus
2. 함수의 반환값 : void(없음) ;
// void는 return할 값이 없기때문에 {} 몸체부분에 return을 안적어주셔됩니다.
3. 함수의 매개변수값 : string s (문자열 s)
다시 아래 소스를 보겠습니다.
class A
{
public int plus(int a, int b)
{
int c = a + b;
return c;
}
}
class program
{
static void Main()
{
A a = new A();
int result = a.plus(3, 4);
Console.WriteLine(result);
}
}
지금 A클래스내의 plus라는 함수의 선언부분(public int plus(int a, int b))만 보다 각이 나와야합니다.
아...이함수는 plus라는 이름이니깐 대략 더하겠다는 기능의 개발자의 의미가 있구나.
아...이함수는 void가 아니니깐 일단은 return값이 존재하며 return값은 int형이구나.
아...이함수는 매개변수 2개구나, 매개변수가 두개다 int형이고, 이름은 a, b이구나 라고 아셔야합니다.
그리고 {.............}이것을 우리는 함수 몸체라고 합니다.
자 이제 몸체를 보겠습니다. 내용을 보겠다는것이지요
int c = a + b; 입니다.
매개변수로 즉, a, b를 이용해서 main 함수에서 던져진 값이 이 변수에 할당됩니다.
3, 4가 할당되었으므로,
a = 3
b = 4
가 할당됩니다.
그리고 int c 변수가 만들어짐과 동시에 a+b의 연산결과인 7이 할당되어
c변수에는 7이 저장이 되는것이지요;
그렇다면 여기서 return c; 라는것이 중요한데 이것을 보죠
return은 끝내겠다는 함수를 종료하겠다는 동시에 c값을 main함수에서 호출한 곳으로 던져주겠다는 뜻입니다.
메인함수안을 보죠
int result = a.plus(3, 4);
이부분에서 a.plus(3,4);가 함수를 호출한 부분이고, 호출(부르는것)을 하게 되면 아까 위에서 본 연산의 결과가
리턴이 되어서 a.plus(3,4)는 7이라는 값이 되는셈이지요.
그리고 7이라는 값이 result;에 대입이 되어
result는 7이 대입되는것입니다.
여기서 return 이라는 것은 역시나 함수를 종료하겠다는것이고, 이와 동시에 return 뒤에
적어준 변수나 값을 호출을 한곳으로 던져준다는것이지요. 이것이 함수의 기능입니다.
자 그럼 void라고 적힌 함수는 어떤의미일까요.
void는 그냥 아무것도 없다는 뜻입니다.
public void print();라는 함수가 있으면 print라는 함수는 아무런값도 리턴할것이 없다는 뜻입니다.
고로 호출한 메인함수에서는 그냥 호출만 할뿐이지 받을 값이 없기때문에, 주로 출력을 할때 자주 쓰입니다.
public void Print(int a, int b)
{
Console.WriteLine(a+b);
//return ; 이런식으로 끝내겠다는 의미만을 위해서 return만 적어주셔도 괜찬습니다.
//값은 넣을수 없습니다.
}
단지 호출만 되면 void이기 때문에 return [값]식으로 적어주면 error가 납니다.
class A
{
public string Print(string s)
{
s = s + " hello";
return s;
}
}
class program
{
static void Main()
{
A a = new A();
string result = a.Print("hi~ ");
Console.WriteLIne(result);
}
}
위의 소소로 복습을 합니다.
위의 Print함수는 return할값이 있는데 그 형식은 string입니다.
매개변수는 string s; 문자열 하나만 받을수 있지요
return값은 당연히 string으로 만들어졌으니 string 형 변수가 되야하지요
몸체설명은 어떤 특정한 문자열이 오면 거기에다가 hello라는 글자를 더해서 그 글자를
리턴하는것입니다.
메인함수에서 함수를 hi라는 값을 준후에 Print함수를 호출합니다.
그럼 Print함수는 값을 처리해서 hi~hello 라는 글자를 리턴해주고 그값역시 string이기 때문에
string result 를 선언해서 값을 대입해줘야 합니다.
그리고 값을 출력을 하는것이지요.
예가 적절했는지 설명이 적절했는지 잘모르겠지만,
의외로 모르는 사람들이 많아서 다시 한번 정리했습니다. 솔직히 놀랬습니다.
이것을 모르고 계속 수업 듣고 계신줄은......꼭 이것을 알고 넘어가시길
바랍니다. 왜냐면 return과 함수는 밥먹듯이 쓰이기 때문입니다.
정말 중요합니다.
'프로그래밍 > C#' 카테고리의 다른 글
C#-11. 객체지향에서 용어정리 (0) | 2019.02.09 |
---|---|
C#-10. 클래스의 정적멤버 (0) | 2019.02.06 |
C#-9. 생성자 (0) | 2019.02.05 |
C#-8. C# 응용프로그램의 기본구조 (0) | 2019.02.03 |
C#-7. 객체지향과 클래스 (0) | 2019.01.31 |
이번장에는 상속을 할려고 했는데, 제가 정리를 잘 못 한탓도 있고, 여러가지 이유로 해서 다시 한번 용어에 대해서 정리하는 시간을 가져봐야 할거 같습니다
결과적으로는 모든 학습은 용어에서 지면 될것도 안된다는것을 항상 명심해야
한다는 말이 생각나는군요 모든 시작은 용어정리입니다.
1. 클래스와 객체(object)
- 객체를 만들기 위한 하나의 틀이라고 보시면 됩니다.
- 먼 미래에 사람을 복제하는 기술이 있다고 치면, 사람이라는 모든 속성(키, 생김새, 피부색)
이 복사가 되고, 그 사람의 모든 행동(모든 메서드)이 복사가 됩니다. ( -->> 클래스로
부터 객체 완성한 부분) 이런것을 만들어주는것이 클래스입니다. 그리고, 우리는 무조건
똑같을 순 없잖습니까...아무리 복제인간이라해도
사람이니깐 성격까지는 복사를 못하겠지요,
그러면서 성격에 따라 밥먹는 습관(메서드)이나, 잠자는 모습(메서드), 노는것(메서드)이
다 다를 수 있겠지요.
- 같은 엄마 배속(클래스) 에서 태어난 쌍둥이(객체)라도 성격이 다르니깐 추상적인
메서드(밥먹기, 놀기)의 내용이 구체적으로 달라지는것이지요
==> 클래스는 객체를 생성하기 위한 하나의 추상적인 형태 입니다.
2. 인스턴트화
- 보통은 코드만으로만 봤을때 new 를 써서 객체를 만듭니다.
- 그전에 객체란것은 모든 하나의 사물이라지만, 참 애매모호 하시지요?
>> 객체 : 핸드폰, 나, 너, 라면, TV, 컴퓨터, 개, 고양이, 호랑이, 공룡, 책, 등등
모든 사물을 객체라고 말합니다.
- 그렇다면 우리가 열심히 머리 싸메면서 하는 C#에서 객체를 만들었다는것은 내가
클래스를 바탕으로 객체를 만든것인데 객체가 만들어졌다는것은 메모리에 올라갔다는
뜻이기도 합니다. 실세계에서 사물(객체)를 사용하기 위해서는 실세계가 존재해야
하듯, 내가 만든 프로그램이 컴퓨터세계에서 돌기위해선 Ram(메모리)에 적재가
되야 하는것입니다.
그것을 우리는 인스턴트화 됐다고 합니다.
- 인스턴트란 뜻은 즉석식품이 아니라, 엄밀히 따지면 바로 먹을수 있다는것으로,
바로 사용할수 있다 즉, 이제 사용할수있다.
그렇기때문에 클래스를 기반으로 만든 객체는 인스턴트화...즉 바로 사용이
가능하단말입니다.
classA A ; // 객체를 담을 그릇을 만든것뿐..인스턴트화는 아님
A = new ClassA() ; // 생성자를 호출해서 인스턴트화가 되었음! 클래스내의
// 객체 생성자로 인해서 객체가 만들어짐
// 인스턴트화가 되었음.
3. 추상화
- 미술분야에서 추상화를 많이 말을 하는데, 추상적으로....라는말이 참...애매모호 합니다.
- 추상을 정의하게 전에 예를 들어보죠
>> 먹는다, 잔다, 공부한다.
무슨 말인지는 알겠지만, 뜻이 참 함축적입니다. 구체적으으로 뭘 먹는다는거고,
언제자고 어떻게 언제 잘래, 뭘 공부해서 어떻게 공부해서 얼마나 무엇을 위해서 공부한다
라고 구체적으로 다시 말하면 좀더 낫지요
구체화의 반대말로 접근하시면 이해가 빠를거 같습니다.
잔다 -> 낮잠을 잔다 -> 코를 걸면서 잔다 -> 코를 걸고, 잠꼬대를 하면서 잔다 ->
코걸고, 잠꼬대에 옆으로 누워잔다.
잔다 : 상당히 추상적이지요?(어떻게 해석이 될지 잠재력이 대단히 많지요?)
코골면서 잠꼬대하면서 옆으로 누워서 낮잠을 잔다 : 상당히 구체적입니다.
결국은 추상적으로 객체를 표현해야 되는것입니다.
일일히 사람에 대해서 다 표현을 하자면 무지하게 많습니다.
사람에 대한 속성과 행동은 누구나 공통적인것이 있을것입니다.
그것을 메서드(함수)로 표현합니다.
왜 그럼 추상적으로 표현해야 하나?? 너무 구체적이면 어떻게 될까요?
사람이라는 클래스를 만든다면, 이제 그 클래스로 여러가지 사람을 나타낼수가 있는데,
너무 구체적으로 사람을 정의 하면 클래스 자체가 함수가 되어버립니다.
함수는 특정 기능을 절차적으로 완벽한 답을 도출해야 하기때문이지요
눈사람을 만들때 딱 눈사람 모형만 만들면 거기서 꾸밀것이 참 많습니다.
하지만 눈사람을 완전히 사람같이 구체적으로 만들고, 옷입히고, 눈코입 그리고,
장갑끼우고 신발 입히고, 색칠하면,,,,좋겠지만,
그 눈사람은 그냥 사람이 되어버리는것이지요, 클래스 재사용도 불가능합니다.
결국은 추상화란 구체적이지 않는 사물의 일반적이고,
얼마든지 구체적으로 만들수있는가를 준비하는 방법이지요
4. Static (정적)
- 모든 프로그램에서 매우 중요하게 쓰이는 용어입니다. 여기서는 하드웨어에 대한 지식이
약간 필요합니다.
- 결국은 static을 앞에 쓰고 안쓰고 차이는 엄청난 차이가 납니다.
- static을 앞에 붙인 메소드나, 변수는 무조건 프로그램이 실행되면,
메모리에 로딩이 되어, 제일 먼저 생성이 됩니다.
그렇기 때문에 언제든지 사용이 가능해집니다.
전역변수와 같이 똑같은 의미로 사용되어 지는데, 전역변수(javascript)에서 했었지요?
어느 함수나 어느 영역에도
포함되지 않는 변수였지요, 어느 함수에서든지 호출해서 사용할수 있는 변수였습니다.
프로그램이 실행되자마자 Main() 메서드와 똑같이 생성되어 프로그램이 끝날때
까지 메모리에 계속 상주하게 되어, 자유롭게 쓸수있습니다.
Class A
{
public int a;
public void Write(){ Console.WriteLine("안녕");}
}
Class B
{
public static int b;
public static void Write() {Console.WriteLine("정적 안녕"); }
}
여기서 A클래스를 사용하기 위해선 객체를 만들어야 사용할수있습니다.
A a = new A() ; 반드시 인스턴트화...객체를 만들어(메모리에 적재시킨뒤)
사용이 가능합니다.
이렇게 ... a.Write(); a.a = 3;
하지만 정적은 이미 메모리에 적재가 되어있기때문에
인스턴트화가 필요없이 B.Write()라고만 하지면 메소드가 호출이 됩니다.
그리고 정적변수... B.b 이건 이렇게 사용하게 전역변수처럼 쓸수있습니다.
5. 필드 / 메소드
- 클래스에서 속성이 정의된 영역을 필드라 부르고,
행위가 정의된 것을 메소드라고 합니다.
class Dog
{
protected string TypeDog; // 개종류
protected string gender; // 암수구분
protected string name ; // 개이름
protected int age ; // 개나이
// 저위에 4개의 속성이 필드영역입니다. 필드라고 합니다.
// 나머지 Dog의 행위가 있는 밑을 메소드라고 합니다.
public void Cry() {....}; // 짖는행위
public void Run() {....}; // 달리는 행위
public void Sleep() {....}; // 자는 행위
pubilc void Fee(){....}; // 먹이를 먹는 행위
}
이렇게 아주 기초적이면서 매우 자주쓰이며, 중요한 부분만 나름대로...많이 부족하네요
다시 읽어보니...저도 아직 많이 부족해서 설명이 참......쉽지가 않네요
틀린부분은 언제든 지적감사드리면, 다같이 힘내시기 바랍니다!!
'프로그래밍 > C#' 카테고리의 다른 글
C# - 보충 : 함수와 return (0) | 2019.02.18 |
---|---|
C#-10. 클래스의 정적멤버 (0) | 2019.02.06 |
C#-9. 생성자 (0) | 2019.02.05 |
C#-8. C# 응용프로그램의 기본구조 (0) | 2019.02.03 |
C#-7. 객체지향과 클래스 (0) | 2019.01.31 |
내가 요새 느낀 점 한가지..
모든 기술적인 공부는
무엇을 만들어야 하는지
누구를 위해 만들어야 하는지
만들면 뭐가 좋은지
이런 인문적인 생각부터가 우선인것 같다.
기술적인 것은 스스로 공부하고 갈고 닦는것은 기본이고
실질적인 것은 얼마나 목적을 가지고 나아가냐인것 같다
초보자들입장에서는 당장에는 문법이 중요할 수도 있다.
하지만 문법은 거의 다 거기서 거기이다.
'프로그래밍 > C#' 카테고리의 다른 글
C# - 보충 : 함수와 return (0) | 2019.02.18 |
---|---|
C#-11. 객체지향에서 용어정리 (0) | 2019.02.09 |
C#-9. 생성자 (0) | 2019.02.05 |
C#-8. C# 응용프로그램의 기본구조 (0) | 2019.02.03 |
C#-7. 객체지향과 클래스 (0) | 2019.01.31 |
암호화폐 거래소들이 많습니다. 최근에는 신규거래소가 많이 생겼습니다. 지난 포스트에서도 신규 암호화폐 거래소가 우후죽순 생긴다는 현상에 대해서 언급한적도 있습니다. 결론은 돈이 되기 때문에 생겨나는 원인이지요. 그렇지만 우리 투자자들이 늘상 마주하고 있는 현실중 하나인 점 입출금에 대해서 언급해보도록 하겠습니다.
입출금에는 크게 2가지가 있습니다. 하나는 원화 입출금(통장으로의 입출금), 다른 하나는 코인지갑간의 입출금 입니다. 예를 들면 제가 A라는 거래소에서 B라는 거래소로 비트코인 1개를 전송했다고 가정해봅니다. 그런데 A라는 거래소에서 출금이 지연되고 있습니다. 원인을 분석해본 결과 아직 블록체인 트랙재션에 온라인 되지도 않았습니다. 즉 거래소자체에서 펜딩중이라는 거지요. 입금은 자유롭게 진행되는데 출금만 늘 늦어지고, 해당거래소에 이메일을 보내고 나서야 몇 분뒤 정상적으로 출금이 됩니다.
또하나는 입금지갑 생성은 회원가입중 기본적인 체크만 하며, 바로 생성해줍니다. 당연히 입금은 아주 잘 처리 되겠지요. 그 후 출금을 하려고 하는데 온갖 인증을 하라고 합니다. 물론 인증은 필수지요. 그렇지만 뭔가 기분이 언짢습니다. 입금은 아무 인증없이 할 수 있게 해놨는데 말이죠.
거래소내의 입금은 막지 않겠다. 나가는건 막는다?
거래소 중 제법 규모가 있는 거래소에서도 비슷한 경험을 한적이 많습니다. 이부분은 한두번이 아니라서 언급하는겁니다. 결론적으로 생각할 수 있는건 자금유출을 막는거라고 밖에 생각할 수 없습니다. 어느정도는 이해할 수 있지만 보안을 위해서라도 입금 지갑 생성시에도 처음부터 인증을 해야한다고 생각합니다.
신규거래소 일수록 그럴 확률이 높습니다.
신규거래소는 신생 업체이므로 자금유입을 적극적으로 해놓는게 맞습니다. 신규유입자금을 높여서 자산을 늘리고 조금조금씩 발전하는 것이 일반적입니다. 하지만 제일 중요한 것은 거래소의 신뢰도 입니다. 신뢰된 거래소가 투자자들을 유입시키는 것이 우선이라고 생각합니다. 어처구니가 없었다고 생각되는 부분 중 하나가 출금신청 후 1시간을 기다려도 되지 않는 출금이 메일 한통 보내고 5분뒤 해결이 됐다는 점만 봐도 더더욱 치가 떨리는 상황이 되었죠.
극히 최근에 모 신생 거래소가 또 먹튀를 했다고 합니다. 객관적인 생각을 해도 이거 너무 파격적인 이벤트라고 생각하는건 돌다리라도 하나 두들겨보고 건너듯 한번 의심해보는것도 나쁘지 않습니다.
내 자산 내가 지켜야 하니깐요. 남이 지켜주지 않습니다. 절대로
class A{
public A(){
Console.WriteLine("생성자 호출");
}
class A{
public A(){
Console.WriteLine("기본생성자"); // 1번 생성자
}
public A(int i){
Console.WriteLine("int 매개변수 생성자"); // 2번 생성자
}
public A(string s){
Console.WriteLine("string 매개변수 생성자"); // 3번 생성자
}
}
class Child : Parent{
public Child() : base(1){
Console.WriteLine("자식생성자");
}
}
위와 같이 자식 객체 생성자에서 부모 객체 특정 생성자를 명시적으로 호출합니다.
'프로그래밍 > C#' 카테고리의 다른 글
C#-11. 객체지향에서 용어정리 (0) | 2019.02.09 |
---|---|
C#-10. 클래스의 정적멤버 (0) | 2019.02.06 |
C#-8. C# 응용프로그램의 기본구조 (0) | 2019.02.03 |
C#-7. 객체지향과 클래스 (0) | 2019.01.31 |
C#-6. 데이타 타입 (0) | 2019.01.29 |

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("안녕하세요"); //콘솔창에 문자열 출력
}
}
}
이번장은 역시나 당연하다고 지나칠수 있는부분을 (매우 중요하다고 생각됩니다)
한번 살펴보겠씁니다.
1. Main 메서드
- 오직 하나의 진입점만 허용(즉 프로그램은 하나의 Main 메서드만 가짐!!!!)
- 즉, 프로그램의 진입점(시작점) 역할을 하는 함수로써 닷넷 런타임에 의해 호출됩니다.
- 하나의 응용프로그램에는 하나의 Main 메서드만 가능합니다.
> 대문자 M? : 반드시 대문자여야 합니다
(C#은 대소문자를 구분하지요? 즉, 소문자 a, 대문자 A는 다른겁니다)
> static 의 의미는? : 사전적으로는 정적이라는 해석입니다.
: C#에서는 전역변수가 존재 하지 않습니다!!,
왜냐하면 모든 변수나 메서드는 클래스의 소속이 되야하기때문입니다.
그런데 전역변수가 있다고 치면, 전역변수는 프로그램의 시작할때부터 자동으로 생성되어,
프로그램이 끝날때까지 계속해서
메모리에 존재하기때문에, 전역변수나 전역함수등을 쓴다면, 메모리 소비도 많아지고,
잘못 사용시에는 프로그램에 뒤죽박죽 엉키는 [일명 : 스파게티 소스] 가 되어 버립니다.
그와 함께 static 이 변수나 메소드 앞에 붙는다면?? 마찬가지로 프로그램이
시작할때 자동으로 생성되어 프로그램이 끝날때까지 없어지지 않습니다.
즉...전역변수와 비슷한 기능을 합니다.
마찬가지로 Main 메소드는 무조건 제일 먼저 실행되야 함
...제일 먼저 메모리에 로딩이 되어하므로, static을 반드시 명시해주셔야 합니다.
2. namespace
- 프로그램 요소를 논리적으로 구분하게 하는 키워드입니다.
- 여기서는 helloworld 로 지정되었는데,
지정하지 않게 되면, 기본 네임스페이스로 자동으로 지정되게 됩니다.
- 논리적으로 프로그램 구성요소를 그룹화 시킴으로써 이름 충돌을 자동으로 방지하고,
의미있게 부여/구분하여 공용 어셈블리의 구성을 보다 직관적으로 관리할수 있겠습니다.
밑에 그림 참조하세요

'프로그래밍 > C#' 카테고리의 다른 글
C#-10. 클래스의 정적멤버 (0) | 2019.02.06 |
---|---|
C#-9. 생성자 (0) | 2019.02.05 |
C#-7. 객체지향과 클래스 (0) | 2019.01.31 |
C#-6. 데이타 타입 (0) | 2019.01.29 |
C#-4. 컴파일러와 dll파일 (0) | 2019.01.25 |
class Human
{
public string Name;
public int Age;
public Human(string name, int age)
{
this.Name = name;
this.Age = age;
}
public void Eat() { Console.WriteLine("{0}은 밥을 먹습니다", Name); }
public void Sleep() { Console.WriteLine("{0}은 잠을 잡니다", Name); }
public void Walk() { Console.WriteLine("{0}은 걷습니다", Name); }
}
{
static void Main()
{
Human Kim ;
Kim = new Human("Kim", 20); // 이름이 Kim 나이가 20살인 사람(객체)를
Kim.Eat(); // 생성했습니다.
Kim.Sleep();
Kim.Walk();
}
}
코드자체에 대해 크게 해석하려 들지는 마시길바랍니다;;
'프로그래밍 > C#' 카테고리의 다른 글
C#-9. 생성자 (0) | 2019.02.05 |
---|---|
C#-8. C# 응용프로그램의 기본구조 (0) | 2019.02.03 |
C#-6. 데이타 타입 (0) | 2019.01.29 |
C#-4. 컴파일러와 dll파일 (0) | 2019.01.25 |
C#-3. 네임스페이스 (0) | 2019.01.25 |
어떠한 프로그래밍을 공부한다고 해도 제일 먼저 배우는 코딩문법은 변수입니다.
타 입 | 실제이름 | 범위 |
sbyte | System.SByte | -128 ~ 127 |
byte | System.Byte | 0 ~ 255 |
char | System.Char | 하나의 유니코드 문자. U+0000 ~ U+FFFF |
short | System.Int16 | -32,768 ~ 32,767 |
ushort | System.UInt16 | 0 ~ 65,535 |
int | System.Int32 | -2,147,483,648 ~ 2,147,483,647 |
uint | System.UInt32 | 0 ~ 4,294,967,295 |
long | System.Int64 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
ulong | System.UInt64 | 0 ~ 18,446,744,073,709,551,615 |
사실 이것을 일일이 다 외울필요는 없습니다. 코딩을 하시다보면, 익숙해지기 때문에 자동적으로
예를 들어보죠
System.Int32 x = 10;
int의 실제이름은 System.Int32라고 했습니다.
위의 두 문장은 같은 뜻입니다. 둘중에 어느것을 써도 괜찮은거죠.
b. 실수형
타 입 | 실제이름 | 정밀도 | 범 위 |
float | System.Single | 7개의 자릿수 | ±1.5 ×10~45 ~ ±3.4 × 1038 |
Double | System.Double | 15~16개의 자릿수 | ±5.0 ×10~324 ~ ±1.7 × 10308 |
Decimal | System.Decimal | 28~29개의 자릿수 | 1.0 ×10~28 ~ 7.9× 1028 |
c. 참조형
타 입 | 실제이름 | 특 징 |
Object | System.Object | 모든 타입의 최상위 부모 클래스. C#에서 모든 객체들은 이 Object 클래스로부터 상속받는다. |
String | System.String | 문자열을 나타내는 타입이다. |
Bool | System.Boolean | Boolean 값이며 참(true) 또는 거짓(false)를 나타낸다. |
C#은 모든 변수를 사용하기 전에 초기화를 해주어야 합니다. 안그러면 에러가 날 수도 있죠..
변수에 초기값을 지정해 주지 않으면 디폴트 값으로 초기화가 됩니다.
타 입 | 디폴트 값 |
bool | false |
byte | 0 |
char | '\0' |
decimal | 0.0M |
double | 0.0D |
enum | 0 |
float | 0.0F |
int | 0 |
long | 0L |
sbyte | 0 |
short | 0 |
struct | 구조체안의 모든 타입은 그에 해당하는 디폴트 값으로 할당된다. |
uint | 0 |
ulong | 0 |
ushort | 0 |
2. 값 타입(Value type) / 참조 타입(Reference type)
1. 스택(Stack)
스택은 지역변수(메소드 내에 존재하는 변수, 메소드의 인자)가 존재하는 공간입니다.
메소드를 호출하면 호출 스택(call stack)의 맨 위에 stack frame(코드, 지역 변수 값)이 쌓이게 되죠. 함수호출이 끝나야만 호출 스택에서 해당 스택 프레임을 pop(제거 및 값을 리턴)하게 됩니다.
2. 힙(Heap)
힙은 객체가 존재하는 공간이고, 당연히 인스턴스 변수(클래스 내에 선언되어 있는 변수)도 이 안에 존재한다. 여기에서 힙은 일반적인 힙과는 약간 다르다. 왜냐하면 garbage collection을 하는 힙이기 때문이다.(자동 쓰레기 처리기) : 필요없는 데이타는 자동으로 삭제/관리
'프로그래밍 > C#' 카테고리의 다른 글
C#-8. C# 응용프로그램의 기본구조 (0) | 2019.02.03 |
---|---|
C#-7. 객체지향과 클래스 (0) | 2019.01.31 |
C#-4. 컴파일러와 dll파일 (0) | 2019.01.25 |
C#-3. 네임스페이스 (0) | 2019.01.25 |
C#-2. C#으로 첫 발자국 (0) | 2019.01.24 |