[프로그래밍 언어 & Tool]/[C][C++][C#]

[C#] C++ 배운 사람을 위한 C# 기초 문법 정리 (1)_ 배열, 가변 배열, 데이터 타입

우당탕탕 개발 일지 2025. 4. 29. 15:27

안녕하세요. 우당탕탕 개발일지 입니다. 응용 소프트웨어에서 C#을 배우게 되어 간단하게 정리한걸 올리겠습니다. 

중간고사 범위까지 C# 문법 전부가 범위였고 또 교수님도 이미 언어 몇개 배웠다고 가정하고 알아서 공부해오라 하셔서 블로그 설명이  친절하지 않을 수 있습니다.  공부한 사이트 첨부 해주겠습니다. 

 

 

1. C# 기초문법 _ C# 프로그래밍 언어 

C# 특징

→ 객체 지향 프로그래밍,

→.NET Framework을 이용하여 프로그래밍하는 대표적인 언어.

→ 원도우,웹, 모마일 등등 에서 사용되는 범용 프로그래밍.

C# 프로그램 : .cs라는 확장자 사용. 별도의 헤더 파일 없음.

 


2. C# 기초 문법_ 데이터 타입

⭐⭐Object는 모든 데이터 타입의 기본 클래스 임.

C# 데이터 타입: int,double,string,…

.NET 데이터 타입: System.Int32 , System.Doubleㅡ…

 

 

출처: 예제로 베우는 C# 블로그



 

 

float f = 123.45F;
double d1 =123.45; 
double d2 =123.45D;
decimal d = 123.45M;
//실수에 아무것도 안붙이면 double

char c  ='C';
string s ="hello";

 

Nullable Type

int? i = null;
i = 101;
Console.WriteLine(i);//101

bool? b = null;
Console.WriteLine("b="+ b); // b= 

//int? 를 int로 할당
Nullable<int> j = null;
j = 10;
int k = j.Value;

Console.WriteLine(k); //10

3. C# 기초 문법_변수 및 상수 

로컬변수는 기본값을 할당받지 못하기 때문에 반드시 사용 전에 값을 할당해야 하는 반면, 필드(= 전역 변수 )는 값을 할당하지 않으면, 해당 타입의 기본값이 자동으로 할당된다.

 

class CSVar
{
    //필드 (클래스 내에서 공통적으로 사용되는 전역 변수)
    int globalVar;
    const int gv = 20;
    const int MAX = 1024;

    public void Method1()
    {
        // 로컬변수
        int localVar;
        const int lv = 80;

        // 아래 할당이 없으면 에러 발생
        localVar = 100;

        Console.WriteLine("전역변수"+globalVar); //0 _ 정수라서 자동으로 0 할당. 
        Console.WriteLine("로컬 변수"+localVar);//100
        Console.WriteLine("상수_local"+lv); //80
        Console.WriteLine("상수_global"+gv); //20
    }
}

class Program
{
    // 모든 프로그램에는 Main()이 있어야 함.
    static void Main(string[] args)
    {
        // 테스트
        CSVar obj = new CSVar();
        obj.Method1();
        
        
    }
}

 

상수 키워드 : const

상수와 변수의 차이점은, 변수는 프로그램 중간에 값을 변경할 수 있지만, 상수는 초기에 정한 값을 중간에 변경할 수 없다. const는 컴파일시 상수값이 결정된다.

 

 


 

 

4. C# 기초 문법_배열

배열: 동일한 데이터 타입의 집합.

  • 인덱스 0부터 시작.
  • C#은 1차 배열부터 최대 32차 배열까지 가질 수 있다.
  • 배열은 reference 타입이라 배열을 다른 객체나 메서드에 전달할 때, 직접 모든 배열 데이타를 복사하지 않고, 배열 전체를 가리키는 참조 값(Reference pointer)만을 전달.
  int[] arr = new int[10];

 int[] arr1 = { 1, 2, 3, 4, 5 };

 Console.WriteLine(arr.Length);

 foreach (var i in arr1)
 {
     Console.WriteLine("arr1["+i+"]="+ i);
 }
 

 int[,] arr2 = new int[3, 2];
 Random rand = new Random();

 for(int i=0; i<arr2.GetLength(0); i++)
 {
     for(int j=0; j<arr2.GetLength(1); j++)
     {
         arr2[i,j]=rand.Next(100);
         Console.WriteLine("arr2["+i+","+j+"] ="+ arr2[i, j]);
     }
 }

 //int[,] brr2 = { { 0,1},{3,4},{ 5,6}  }; // [3,2]
 int[,] brr2 = { { 0, 1, 2, 3 }, { 4, 5, 6, 7 } }; //[2,4]

 for (int i = 0; i<brr2.GetLength(0); i++)
 {
     for (int j = 0; j<brr2.GetLength(1); j++)
     {
         Console.WriteLine("brr2["+i+","+j+"] ="+ brr2[i, j]);
     }

 }

 

2차원 배열

string[,] arr2D = new string[,]
{
    { "1", "2" },
    { "11", "22" }
};


/*

arr[0,0] = "1"    
arr[0,1] = "2"
arr[1,0] = "11"
arr[1,1] = "22"

*/

 

 

3차원 배열 

string[,,] arr = new string[,,] { 
    { {"1", "2"}, {"11","22"} }, 
    { {"3", "4"}, {"33", "44"} }
};


/* 
arr[x, y, z]
arr[0, 0, 0] → "1"
arr[0, 0, 1] → "2"
arr[0, 1, 0] → "11"
arr[0, 1, 1] → "22"
arr[1, 0, 0] → "3"
arr[1, 0, 1] → "4"
arr[1, 1, 0] → "33"
arr[1, 1, 1] → "44"


*/

 

 

 

가변 배열

int[][] A = new int[3][];

//각 1차 배열 요소당 서로 다른 크기의 배열 할당 가능
A[0] = new int[2];
A[1] = new int[3] { 1, 2, 3 };
A[2] = new int[4] { 1, 2, 3, 4 };

A[0][0] = 1;
A[0][1] = 2;

 

⚠️⚠️가변 배열은 arr.Length/ arr[i].Length 이렇게 써야함. 가변 배열은 GetLength()사용 못함.

 

        int[][] arr = new int[2][];
        arr[0] = new int[] { 1, 2 };
        arr[1] = new int[] { 3,4,5 };
        for (int i = 0; i < arr.Length; i++)
        {
            for (int j = 0; j <  arr[i].Length; j++)
            {
                Console.Write(arr[i][j] + " ");
            }
            Console.WriteLine();
        }

 

 

 

 


퀴즈  _ 가변 배열

 

Q 문제 1. 가변 배열 선언 및 특정 요소 출력⭐️⭐️

아래 조건에 따라 가변 배열을 선언하고, A[2][1]의 값을 출력하는 코드를 작성하시오.

  • 3개의 1차원 배열을 가진 가변 배열 A를 선언
  • 각각의 요소는 다음과 같은 크기와 값을 가짐:
    • A[0] = { 10 }
    • A[1] = { 20, 30 }
    • A[2] = { 40, 50, 60 }

<정답>

더보기

int[][] A = new int[3][];
A[0] = new int[] { 10 };
A[1] = new int[] { 20, 30 };
A[2] = new int[] { 40, 50, 60 };

Console.WriteLine(A[2][1]);  // 결과: 50

 

 


출처: 지피티 선생님

 

<정답>

더보기

Console.Write("행 수: ");
int rows = int.Parse(Console.ReadLine());
int[][] jagged = new int[rows][];

for (int i = 0; i < rows; i++)
{
    Console.Write($"{i}행 열 수: ");
    int cols = int.Parse(Console.ReadLine());
    jagged[i] = new int[cols];

    for (int j = 0; j < cols; j++)
    {
        jagged[i][j] = j;  // 인덱스 번호로 초기화
    }
}

// 전체 출력
for (int i = 0; i < rows; i++)
{
    for (int j = 0; j < jagged[i].Length; j++)
    {
        Console.Write(jagged[i][j] + " ");
    }
    Console.WriteLine();
}

 

 

 

<참고한 사이트>

https://www.csharpstudy.com/CSharp/CSharp-Intro.aspx

 

C# 프로그래밍 언어 - C# 프로그래밍 배우기 (Learn C# Programming)

C# 프로그래밍 언어 C#은 마이크로소프트에서 개발된 객체 지향 프로그래밍 언어로서 Java 나 C++와 비슷한 면들을 많이 가지고 있다. C#을 이야기 하면 자연스럽게 .NET Framework을 함께 이야기 해야

www.csharpstudy.com

 

 

728x90