[교육원] 변수 ,구조체 및 배열 정리 본문

[PL]/C# & WPF

[교육원] 변수 ,구조체 및 배열 정리

객과 함께. 2011. 6. 8. 00:33

★ 타입(Type)


 ┌─ 값(Value)  Type ─┬─ 내장형 : 이미 정의가 내려저 있는 형식
 │                              │
 │                              │   - 정수형 : byte , sbyte , short , unit
 │                              │         - 실수형 : float(4 byte) , double(8 byte) 
│                              │                       , decimal(16 byte)
 │                             │  - 논리형 : bool(1 byte)
 │                             │  - 문자형 : char(2 byte) , string
 │                             │
 │                             ├─ 열거형  : 사용자 정의 형식
 │                            │ 
 │                            └─ 구조체  : 사용자 정의 형식
 │
 └─ 참조(Reference) Type 

 

 

★ 변수 사용
Ⅰ. 파괴성  -  새로운 데이터가 변수안에 들어가면 기존에 데이터는 지워지고 새로운 데이터가 저장된다.
            -  객체가 수행을 끝나고 나서 사라질 때 정리 작업을 수행한다.
     -  인수를 가질수도 없으며 리턴 되어지는 값도 없다.
            -  오버로딩 할 수 없다.

Ⅱ. 전역 변수 , 지역 변수라는 개념이 없다.
    - 변수의 Life Cycle만 기억한다.
    - 감싸고 있는 블럭({}) 안에서만 변수 사용이 가능 하다.
  
 ⅰ. 변수의 형식
  [Type][v_name] : 변수 사용 준비
                   -> 메모리(스택)에 예약 , 초기값이 들어올 경우 할당.

         [Type][v_name] = [value]
       -> value데이터 범위가 지정한 타입과 일치 해야 한다.

Ⅱ. 인스턴스 영역 : 선언된 멤버 변수는 클래스가 소멸 되는 시점 까지 사용이 가능 하다.

Ⅳ. char Type - 문자의 종류를 판별 하는 함수를 제공 한다.
  (islower() , isupper() , isdigit() , isletter() , isnumber())

 

 IsDigit   유니코드 문자가 10진수인지 여부를 나타냅니다.
 IsLetter  유니코드 문자가 자모인지 여부를 나타냅니다.
 IsLower  유니코드 문자가 소문자 자모인지 여부를 나타냅니다.
 IsLetterOrDigit  유니코드 문자가 자모인지 아니면 10진수인지 여부를 나타냅니다
 IsNumber  유니코드 문자가 숫자인지 여부를 나타냅니다.
 IsUpper   유니코드 자모가 대문자인지 여부를 나타냅니다.

 

Ⅴ예제 소스
    - 오버 로딩 , 변수 선언 , char type문자 판별 종합적이 소스

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace KH_DOTNET63_4
{
    class Program
    {
        static void Main(string[] args)
        {

     // 변수의 lift cycle 
            INT i = new INT();
            i.integer1();

            //오버로딩 - 인수의 개수가 같고 메소드의 이르이 같은 메소드를 여러개 정의 할 수 있다.

            Console.Write("값 설정1 : ");
            char c = Convert.ToChar(Console.ReadLine());
            i.Char(c);

            Console.Write("값 설정2 : ");
            char d = Convert.ToChar(Console.ReadLine());
            i.Char(d);
           
        }
    }

    class INT
    {
        int i;       

        public void Char(char c)    // 호출 받는 곳은 호출 한 곳의 타입과 값의 갯수가 같아야 함
        {
            if (char.IsNumber(c))  // 메인 부터 넘겨 받은 값이 숫자인지 검사하는 함수
            {
                Console.WriteLine("메인으로 부터 넘겨받은 {0}는 숫자입니다.", c);
            }
            else if(char.IsLetter(c))  // 넘겨 받은 값이 문자 인지를 검사한는 함수.
            {
                if (char.IsUpper(c)) // 넘겨 받은 값이 대문자 인지를 검사하는 함수
                {
                    Console.WriteLine("메인으로 부터 넘겨받은 {0}는 대문자입니다.", c);
                }
                else if (char.IsLower(c)) // 넘겨 받은 값이 소문자 인지를 검사하는 함수
                {
                    Console.WriteLine("메인으로 부터 넘겨받은 {0}는 소문자입니다.", c);
                }
            }

        }

        //인스턴스 영역 : 선언된 멤버변수는 클래스가 소멸 되는 시점까지 사용이 가능 하다.
        public void integer1()
        {
            //이곳에 선언된 변수들은 메소드가 호출될때 생성되었다가 메소드의 종료 블럭이  끝나면 변수는 사용 못함.
           
            i = 0; //초기값 설정.
           
            integer2();
            Console.WriteLine("변수의 i의후 => {0}", i);
        }

        void integer2()
        {
            i = 2;
        }
    }
}

 

★ 구조체(Struct) (값 타입)
   - 여러개의 데이터 타입을 하나의 구조체로 접근하고 저장 할 수 있음.
   - 변수들의 집합체.
   - 클래스 내외부에서 선언 될 수 있다.
   - 형식 :
    struct name {
    각 변수 타입과 정의
   }

 - 구조체를 사용 할 경우에는 클래스와 동일하게 선언.


★ 캡슐화(보안성)
★ 값전달  -
★ 생성자  - 외부에서 값을 변경 하지 못하도록 숨겨야 하는데 이것을 캡슐화 이고 캡슐화한 메소드에 값을 전달
           -  생성자를 만들지 않으면 컴파일러 스스로 생성자를 만든다.
     - 생성자는 오버로딩이 가능 하다.

★  파괴자  - 생성자의 반대되는 메서드.
     -  객체가 수행을 끝나고 나서 사라질 때 정리 작업을 수행한다.
★  보안성  -


★Array(배열)
   같은 타입의 여러 데이터 를 마치 하나의 변수에 다가 저장 .

   선언방식:
    type[index] v_name new type[만들저장장소];  메모리 힙영역에 선언과 동시에  활당됨
    int[] i = new int[5];
    i[0] = 1    // 저장

    선언과  동시에 활당

    int[] i = {1,2,3,4,5}  -1차원 배열
    int[,] = new int[2,5]  - 2차원 배열
    저장 방식은 i[0,0] = 1, i[0,1] = 2


    직접 대입 방식
  int [] i = {{1,2,3,4,5},{6,7,8,9,10}} - 선언과 동시에 값 대입

 

★ 구조체 예제 소스1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace KH_DOTNET63_4
{
    class Program
    {
        struct empinfo
        {
            // 사원 번호     이름        급여       보너스        나이
            //empno         name       sal         comm          age

            //생성자 - 구조체 명과 메서드 명이 동일 한 것을 생성자

            public int empno, sal, comm, age;
            public string ename;
          
        }

       

        static void Main(string[] args)
        {

         
           INT i = new INT();
           
            empinfo ei;
            ei.empno = 1001;
            ei.ename = "아무개";
            ei.sal = 3500;
            ei.comm = 2000;
            ei.age = 37;

           Console.WriteLine("사원번호: {0} \n 성   명: {1} \n 급   여: {2} \n 보너스 : {3} \n 나  이 : {4}\n", ei.comm, ei.ename, ei.sal, ei.comm, ei.age);

           
        }
    }
}

 

★ 구조체 예제 소스2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace kh_dotnet63_4_2
{
    class Program
    {
        static void Main(string[] args)
        {
             empinfo ei = new empinfo(1000, "아무개", 3500, 3000, 42);
             //ei.output();
             Console.WriteLine(ei.ename);
        }
    }
   
    struct empinfo
    {
        public int empno, esal, ecomm, eage;
        public string ename;

        public empinfo(int pempno , string pename , int pesal , int pecomm , int peage)
        {
            empno = pempno;
            ename = pename;
            esal = pesal;
            ecomm = pecomm;
            eage = peage;
        }

        public void output()
        {
            //Console.WriteLine("");
            Console.WriteLine("사원번호: {0} \n 성   명: {1} \n 급   여: {2} \n 보너스 : {3} \n 나  이 : {4}\n",empno, ename , esal,ecomm, eage);
        }
    }


}

'[PL] > C# & WPF' 카테고리의 다른 글

[C#] 연산자 오버로딩 , 프로퍼티 예제  (0) 2011.06.16
참조 , 값   (0) 2011.06.08
[교육원]기본문법  (0) 2011.06.01
[교육원]간단한 신상명세   (0) 2011.06.01
[교육원] c# 문법  (0) 2011.06.01