공부 기록/C#

[C#] 기초 문법 톺아보기 (1) - 입력과 출력, 배열, 필드와 프로퍼티

톰마토 2025. 1. 8. 15:19
728x90

[ 유니티를 배우기 전, 기초 문법 톺아보기(1) ]

내일배움캠프 사전캠프의 과제를 해결하며 C#과 유니티의 예습을 하고 있다. 유니티를 본격적으로 배워나가기 전에 C# 문법에 익숙해지기에 좋은 시간이었다.

 

이 글은 달리기반을 학습하는 동안 사용하거나 알게 된 기억하고 싶은 문법들을 정리한 글이다.

 


 

목차

1. 입력과 출력

2. 배열

3. 필드와 속성 차이 (속성 예제)


입력과 출력 (Input and Output)

입력 받기 & 출력하기

  • Console.Write : 파라미터로 넣어준 string을 출력한다.
  • Console.WriteLine : string을 출력하고 줄바꿈 된다.
  • Console.Read : 한 문자를 읽고 입력된 문자의 유니코드 값을 반환한다. (반환값 int)
  • Console.ReadLine : 한 줄의 문자열을 입력받는다.
Console.Write("Start!");		// 출력
Console.WriteLine("Enter your name:");	// 출력 후 엔터
string name = Console.ReadLine();	// 입력받기 (string)
Console.WriteLine($"Hello, {name}!");	// 변수 포함 출력 후 엔터

int number = int.Parse(Console.ReadLine());	// 입력받기 (int로 Parse)
Console.WriteLine($"You entered: {number}");

 

배열 (Arrays)

같은 데이터 타입의 여러 값을 저장할 수 있는 자료구조.

배열 선언과 초기화

int[] numbers = new int[5];	// 크기가 5인 정수 배열 선언
numbers[0] = 10;		// 첫 번째 요소에 값 10 저장
numbers[1] = 20;		// 두 번째 요소에 값 20 저장
// 배열 선언과 동시에 초기화
int[] numbers = { 10, 20, 30, 40, 50 };

 

배열 접근과 순회

int[] numbers = { 10, 20, 30, 40, 50 };

for (int i = 0; i < numbers.Length; i++)
{
    Console.WriteLine(numbers[i]);
}

 

필드와 프로퍼티 차이

이번 기회로 내가 알고 있던 변수라는 개념이 C#에서 필드이고, 프로퍼티라는 것이 따로 있다는 것을 알게 되었다.

  • 필드는 직접 데이터를 저장하는, 흔히 알고 있는 변수이다.
  • 프로퍼티 간접적으로 접근하고 수정할 수 있도록 하는 역할을 한다. 변수를 자발적으로 Get/Set함수로 접근하도록 사용했던 것을 C#에서는 문법적으로 getter와 setter를 제공하는 것 같다. 즉 변수의 캡슐화를 문법적으로 보장해주는 것이 속성!!

필드와 프로퍼티의 주요 차이

 

프로퍼티

Property(프로퍼티, 속성)을 더 알아봐야겠다.

getter / setter 를 제공하기 때문에 함수처럼 사용하는 것으로 착각했으나 접근할 때 일반 필드와 동일하게 사용한다.!!

 

아래 예시에서는 자동 프로퍼티를 활용한 것이다. 자동 프로퍼티로 사용하면 필드로도 활용이 가능하다. 

public class Person
{
    // 프로퍼티 선언
    public string Name { get; set; } // 자동 구현 
    public int Age { get; set; }     // 자동 구현 
}
Person person = new Person();

// 값을 설정 (내부적으로 set 호출)
person.Name = "Alice";

// 값을 읽기 (내부적으로 get 호출)
Console.WriteLine(person.Name); // 출력: Alice

 

get과 set을 직접 구현할 수 있다. 데이터 검증과 같은 다양한 로직을 추가할 수 있다. 이때는 프로퍼티 자체가 필드의 역할을 대신하지는 않는다. 보통 사용하려는 필드의 이름과 같게, 대문자로 만든다. 

namespace Example
{
    class Person
    {
        private string _name;
        private int _age;

        public string Name
        {
            get => _name;
            set
            {
                if (string.IsNullOrEmpty(value))
                    throw new ArgumentException("Name cannot be null or empty.");
                _name = value;
            }
        }

        public int Age
        {
            get => _age;
            set
            {
                if (value < 0 || value > 120)
                    throw new ArgumentOutOfRangeException("Age must be between 0 and 120.");
                _age = value;
            }
        }
    }




    internal class MyExample
    {
        static void Main()
        {
            Person person = new Person();

            person.Name = "Yndoo";
            person.Age = 100;

            Console.WriteLine($"Name : {person.Name}, Age : {person.Age}");
        }
    }
}

 

프로퍼티는 public으로 만들되 set은 private으로 만들 수 있다.

class Person
{
    private string name;

    public string Name
    {
        get { return name; }
        private set { name = value; }
    }
}

 


다른 글 보러가기

 

📕사전 문법 기초 보러 가기

 

[C#] 내일배움캠프 사전캠프 - C# 사전 문법 기초 (is, as, Convert, Parse, TryParse, 접근제한자)

[Stage3. 각자 속도에 맞춰 나아가기] Stage3에서는 C# 기초를 다져볼 수 있다. 걷기반과 달리기 반으로 나눠서 단계별 학습이 권장된다.나는 C#을 배우는 것은 처음이기 때문에 걷기반부터 시작해서

ramenkirby.tistory.com

 

📕기초 문법 톺아보기(2) 보러 가기

 

[C#] 기초 문법 톺아보기 (2) - 클래스, 상속, 인터페이스, 추상 클래스, 가상 메서드, 인덱서

[ 유니티를 배우기 전, 기초 문법 톺아보기(2) ]내일배움캠프 사전캠프의 과제를 해결하며 C#과 유니티의 예습을 하고 있다. 유니티를 본격적으로 배워나가기 전에 C# 문법에 익숙해지기에 좋은

ramenkirby.tistory.com

 

728x90