[C#] 기초 문법 톺아보기 (1) - 입력과 출력, 배열, 필드와 프로퍼티
[ 유니티를 배우기 전, 기초 문법 톺아보기(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
[C#] 기초 문법 톺아보기 (2) - 클래스, 상속, 인터페이스, 추상 클래스, 가상 메서드, 인덱서
[ 유니티를 배우기 전, 기초 문법 톺아보기(2) ]내일배움캠프 사전캠프의 과제를 해결하며 C#과 유니티의 예습을 하고 있다. 유니티를 본격적으로 배워나가기 전에 C# 문법에 익숙해지기에 좋은
ramenkirby.tistory.com