일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- graphene-django
- GraphQL
- Django-allauth
- tkinter Radio 동적버튼
- check_password
- flask
- SQL
- FastAPI
- Django
- allauth
- python
- numpy
- array
- for loop
- Today
- Total
객
참조 , 값 본문
Type - ⅰ.value Type - 내장형 : 정수형
실수형
논리형
문자형
열거형 : 시스템이 미리 정해 놓은 범위 값만정의
구조체 : 변수들의 집합
ⅱ.reference Type - 배열 : 동일한 변수들의 하나의 이름으로 묶어 놓은것.
문자열 : 동일 타입의 값들이 모여서 구성도는것.
클래스 : 메서드 묶음.이며 기본적이 라이브러이다.
■ 문자열
- 동일 타입의 값들이 여러개 모여서 구성되어진 것을 문자열 이라 한다.
- 별도의 타입을 제공하지 않으며 문자 배열을 대신 사용한다.
- 프레임 웍 차원에서 System.String 이라는 별도의 타입을 제공한다.
■ 클래스
-
ex1) using System;
class CSTest
{
static void Main()
{
Time Now(); //메모리에 Time이라는 타입으로 Now()메서드 영역을 선언 하였고
Now = new Time(); // 힙이라는 역역에 할 당 되기 때문에 new 라는 연사자를 사용 해서 Now알이아스 시켰다.
Now.Hour = 12; // Class Time() 클래스 내부에서 메인 값에 접근을 하기 위해서 힙영역의 Now가 스택 영역에
Now.min = 30; // hour = 12 에 접근을 하게 된다.
Now.sec = 45;
}
}
class Time()
{
public int hour , min , sec;
public void OutTime() //메서드와 같은 이름을 가지고 있으면 Time생성자 메서드이다.
{
Console.WriteLine("현재 시간은 {0}시 {1}분 {2}초이다", hour , min , sec); //hour , min , sec 는 인스턴스 변수로
// 선언되어 있으며 같은 클래스 안에
// 선언되어 있기 때문에 형제(?)와 같아서
// 바로 변수명을 사용 하였다.
}
}
ex2) using System;
class CSTest
{
static void Main()
{
Time Now = new Time(12, 30, 45); //캡슐화(보안성 강화)
Now.OutTime(); // 클래스는 힙 영역에 할당 이 되므로 직접 접근이 안된다.
// 그래서 new 사용 하여 선언을 하고 값을 넘겨줄 준비를 한다.
}
}
class Time
{
int hour , min , sec; //프로그램이 시작이 되면서 부터 인스턴스 영역의 변수들을 선언을 하고
// 메모리에 예약을 한다.
Time (int ahour , int amin , int asec) //Time 타입의 메서드는 int형으로 3개의 값을 넘겨받는 생성자 메서드이며
{ // 생성자 메서드 내에서 넘겨 받은 값을 저장 하기 위해 변수를 같은 이름의
hour = ahour; // 변수를 사용 할수 있으나 참조 곳의 값이 애매모호 하기 때문에 a라는 문자를
min = amin; // 첨가 시켜준 것이다.
sec = asec;
}
public void OutTime() //이곳의 변수들은 Time클래스 안에 들어있는 형제 메소드 이기 때문에
{ // 생성자의 변수를 그대로 사용 하였다.
Consoel.WriteLine("현재 시간은 {0}시{1}분{2}초 이다.",hour , min , sec);
}
}
★ 값과 참조
- 값(value Type), 참조(Reference Type)타입의 차이점은 데이터가 저장 되는 메모리상의 위치이다. 값타입은 크기가 작고 고정 적이기 때문에 스택 에 생성이 되며 , 참조타입은 크고 가변적이기 때문에 동적으로 관리 되는 힙에 생성이 된다.
ex1). using System;
class CSTest
{
static void Main()
{
int value = 3 , vcopy ; //스택에 선언과 동시에 할당 이 된다. , vcopy는 스택 영역에 예약만 되어있는상태이다.
vcopy = value;
vcopy = 4;
Console.WriteLine("value = {0} , vcopy={1}", value , vcopy);
int[] ar , arcopy; //배열이므로 힙영역에 할당이 되어진다. 힙 영역은 직접 접근이 어렵기 때문에 스택 영역에
// ar , 이라는 네임을 자진 접근자를 생성한다.
ar = new int[] {1,2,3,4,5};
arcopy = ar;
arcopy[1] =1234;
Console.WriteLine("value = {0} , vcopy={1}", value , vcopy);
}
}
※ arcopy 요소 값을 변경하면 동일한 대상을 ㅅ가리키는 ar도 변경된다.
ex2). using Systeml;
class CSTest
{
int value = 3 , vcopy = 3;
Console.WriteLine(값타입의 경우: " + (value == vcopy ? "같다" : "다르다");
// 값을 평가 하므로 같다
int[] ar = {1,2,3,4,5};
int[] arcopy = {1,2,3,4,5};
Console.WriteLine(값타입의 경우: " + (ar == arcopy ? "같다" : "다르다");
}
//배열은 차원과 배열요소의 값이 완전히 같더라도 힙의 다른 위치를 가리키기 때문에 다르다고 평가한 것이다.
■ 지역 변수 - 메서드가 호출도리 때마다 ㅅ로 생성된다.
■ 인스턴스 변수 - 객체가 생성 될때 같이 생성되고 객체가 파괴될때까지 존재한다.
■ 정적변수 -
■ 배열 요소 - 배열의 한 요소로 생성된다. 배열이 생성될때 같이 생성되며 배열이 해제될 때 파괴된다.
■ 값인수 - 메서드의 인수로 선언되며 메서드가 호출될때 생성된다.
■ 참조 인수 - 값인수와 같되 앞에 ref라는 키워드를 붙인다.
■ 출력용 인수 - 참조 인수로 전달되는 실인수는 반드시 초기화 되어야 하지만 출력용 인수는 초기화 되지 않아도 상관없다.
★캐스트(cast) - 변환 하려는 타입에 묶어서 ㄷ입 하면 되0는데 자격 요건을 꼭 따져 봐야 한다.
■ 타입변환
암시적 변환 - 사용자가 요구 하지 않아도 컴파일러가 적당한 타입으로 바꿔주는 것이다.
- 변수 값을 대입 할 때나 변수끼리 대입 할때는 좌우변의 타입이 일치해야 한다.
- 크기가 같아도 부호 여부에 따라표현 가능한 번위가 ㅏㄷㄹ라 안전하지 못하며 따라서 컴파일러는 암시적
변환을 허용하지 않는다.
명시적 변환 - 프로그래머가 어떤 타입을 어떻게 ㅂ꾸라고 컴파이러에게 분명히 지시하는 것.
- 캐스트 연사자를 사용한다.
- 큰 타입을 작은 타입에 대입하거나 정수형 변수에 실수를 대입하면 값으리 손실이나 정확도의 희생이 따른다.
'[PL] > C# & WPF' 카테고리의 다른 글
[C#] 인덱스 , 상속 정리 (0) | 2011.06.16 |
---|---|
[C#] 연산자 오버로딩 , 프로퍼티 예제 (0) | 2011.06.16 |
[교육원] 변수 ,구조체 및 배열 정리 (0) | 2011.06.08 |
[교육원]기본문법 (0) | 2011.06.01 |
[교육원]간단한 신상명세 (0) | 2011.06.01 |