Ver2.0 C# 기초 문법 마스터하기 🚀

안녕하세요 여러분! 오늘은 개발자의 길로 한 발짝 다가가는 C# 기초 문법에 대해 함께 알아볼게요. 프로그래밍이 처음이라 겁나시나요? 걱정 뚝! 🙌 이 글을 따라오다 보면 어느새 C# 문법을 마스터하고 있을 거예요~
요즘 개발자 수요 폭증하는 거 다들 아시죠? 개발 실력은 이제 현대인의 필수 스킬이 되어가고 있어요. 재능넷 같은 플랫폼에서도 C# 개발 관련 재능 거래가 활발하게 이루어지고 있다니까요! 그만큼 배워두면 좋은 스킬이라는 뜻이겠죠? ㅎㅎ
🤔 C#이 뭐길래? 왜 배워야 할까?
C#(씨샵)은 마이크로소프트에서 개발한 객체지향 프로그래밍 언어로, 게임 개발부터 웹, 모바일 앱까지 다양한 분야에서 쓰이는 올라운더 언어예요! 특히 유니티 게임 엔진의 주 언어라 게임 개발자 꿈나무들에겐 필수 스킬이죠. 😉
C#의 장점:
- 배우기 쉬운 문법 구조 (자바랑 비슷해서 전환도 쉬움)
- 강력한 개발 도구와 생태계 (Visual Studio 짱!)
- 다양한 플랫폼 지원 (.NET Core로 윈도우, 맥, 리눅스 모두 OK)
- 게임 개발에 최적화 (유니티 + C# = 천생연분)
- 기업에서 많이 사용 (취업에 유리해요~)
🛠️ 개발 환경 세팅하기
C# 코딩을 시작하기 전에 개발 환경부터 세팅해볼까요? 걱정 마세요, 생각보다 쉬워요!
Visual Studio 설치하기
- 마이크로소프트 공식 사이트에서 Visual Studio Community 버전 다운로드 (무료예요! 🆓)
- 설치 시 ".NET 데스크톱 개발" 워크로드 선택
- 설치 완료 후 Visual Studio 실행
- "새 프로젝트 만들기" 클릭
- "콘솔 앱(.NET Core)" 선택
- 프로젝트 이름 설정 후 생성
짜잔~ 이제 C# 코딩을 시작할 준비가 끝났어요! 👏
📝 C# 기본 문법 시작하기
이제 진짜 코딩을 시작해볼까요? C# 문법의 기초부터 차근차근 알아봅시다!
1. 첫 번째 C# 프로그램 - Hello World! 👋
모든 프로그래밍 언어의 시작은 "Hello World"죠! C#에서는 이렇게 작성해요:
using System;
namespace HelloWorldApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("안녕 세상아! C#은 정말 쉽네?");
Console.ReadLine();
}
}
}
이 코드를 실행하면 콘솔 창에 "안녕 세상아! C#은 정말 쉽네?"라는 메시지가 출력돼요. Console.WriteLine()은 화면에 텍스트를 출력하는 명령이고, Console.ReadLine()은 사용자 입력을 기다리는 명령이에요.
ㅋㅋㅋ 벌써 첫 프로그램을 만들었네요! 개발자의 길로 한 발짝 다가갔어요~ 👣
2. 변수와 데이터 타입 📊
프로그래밍에서 변수는 데이터를 저장하는 컨테이너예요. C#에서는 변수를 사용하기 전에 데이터 타입을 명시해야 해요. (정적 타입 언어라서 그래요!)
주요 데이터 타입:
- int: 정수 (-2,147,483,648 ~ 2,147,483,647)
- double: 소수점이 있는 숫자 (더 정밀한 계산 가능)
- float: 소수점이 있는 숫자 (double보다 메모리 적게 사용)
- char: 단일 문자 ('A', '가' 등)
- string: 문자열 ("안녕하세요" 등)
- bool: 참/거짓 (true/false)
변수 선언과 초기화는 이렇게 해요:
// 변수 선언
int age;
string name;
// 변수 초기화
age = 25;
name = "코딩왕";
// 선언과 초기화를 한 번에
int score = 100;
bool isPass = true;
double average = 89.5;
// 상수 선언 (값이 변경되지 않음)
const double PI = 3.14159;
변수 이름은 의미 있게 지어주는 게 좋아요! 나중에 코드를 다시 볼 때 헷갈리지 않게요~ 😉
3. 연산자 - 계산의 마법사 🧙♂️
연산자는 변수와 값을 가지고 계산을 수행하는 기호예요. C#에서 자주 사용하는 연산자들을 알아볼까요?
산술 연산자:
int a = 10;
int b = 3;
int sum = a + b; // 더하기: 13
int diff = a - b; // 빼기: 7
int product = a * b; // 곱하기: 30
int quotient = a / b; // 나누기: 3 (정수 나누기라 소수점 버림)
int remainder = a % b; // 나머지: 1
// 증감 연산자
a++; // a = a + 1과 같음
b--; // b = b - 1과 같음
비교 연산자:
bool isEqual = (a == b); // 같은지: false
bool isNotEqual = (a != b); // 다른지: true
bool isGreater = (a > b); // a가 b보다 큰지: true
bool isLess = (a < b); // a가 b보다 작은지: false
bool isGreaterOrEqual = (a >= b); // a가 b보다 크거나 같은지: true
bool isLessOrEqual = (a <= b); // a가 b보다 작거나 같은지: false
논리 연산자:
bool condition1 = true;
bool condition2 = false;
bool andResult = condition1 && condition2; // AND: 둘 다 true여야 true (결과: false)
bool orResult = condition1 || condition2; // OR: 하나라도 true면 true (결과: true)
bool notResult = !condition1; // NOT: 반대 값 반환 (결과: false)
연산자들을 잘 활용하면 복잡한 계산도 뚝딱! 할 수 있어요. 코딩의 기본 중의 기본이니 확실히 익혀두세요~ 🔍
🚦 제어 구조 - 코드의 흐름 조종하기
프로그램은 기본적으로 위에서 아래로 실행되지만, 제어 구조를 사용하면 코드의 흐름을 마음대로 조종할 수 있어요! 이게 진짜 프로그래밍의 꽃이랄까요? ㅎㅎ
4. 조건문 (if-else) - 결정의 순간 🤔
조건문은 특정 조건이 참인지 거짓인지에 따라 다른 코드를 실행해요. 일상생활에서 "만약 비가 오면 우산을 가져가고, 아니면 선글라스를 쓰자"와 같은 결정과 비슷해요!
int score = 85;
if (score >= 90)
{
Console.WriteLine("우와! A 학점이네요! 🎉");
}
else if (score >= 80)
{
Console.WriteLine("잘했어요! B 학점입니다. 👍");
}
else if (score >= 70)
{
Console.WriteLine("C 학점이에요. 조금만 더 노력해봐요!");
}
else
{
Console.WriteLine("다음에는 더 잘할 수 있을 거예요! 화이팅! 💪");
}
이 코드는 점수에 따라 다른 메시지를 출력해요. score가 85니까 "잘했어요! B 학점입니다. 👍"가 출력될 거예요.
삼항 연산자 - if문의 숏컷 버전
간단한 조건문은 삼항 연산자로 한 줄에 쓸 수 있어요!
// 조건 ? 참일 때 값 : 거짓일 때 값
string result = (score >= 60) ? "합격" : "불합격";
Console.WriteLine($"시험 결과: {result}");
이렇게 코드를 짧게 쓸 수 있어서 개발자들이 애용하는 문법이에요! 근데 너무 복잡한 조건은 일반 if문이 더 가독성이 좋답니다~ 😉
5. switch문 - 여러 갈래 길에서 선택하기 🔀
여러 가지 경우 중 하나를 선택할 때는 switch문이 더 깔끔해요!
int day = 3;
string dayName;
switch (day)
{
case 1:
dayName = "월요일";
break;
case 2:
dayName = "화요일";
break;
case 3:
dayName = "수요일";
break;
case 4:
dayName = "목요일";
break;
case 5:
dayName = "금요일";
break;
case 6:
dayName = "토요일";
break;
case 7:
dayName = "일요일";
break;
default:
dayName = "유효하지 않은 날짜";
break;
}
Console.WriteLine($"오늘은 {dayName}입니다.");
day가 3이니까 "오늘은 수요일입니다."가 출력돼요. break를 잊지 마세요! 없으면 다음 case까지 실행돼버려요. (이걸 fall-through라고 해요)
6. 반복문 - 코드를 여러 번 실행하기 🔄
같은 코드를 여러 번 반복해야 할 때는 반복문을 사용해요. C#에는 여러 종류의 반복문이 있어요!
for 반복문:
// 1부터 5까지 출력하기
for (int i = 1; i <= 5; i++)
{
Console.WriteLine($"카운트: {i}");
}
// 배열의 모든 요소 출력하기
string[] fruits = { "사과", "바나나", "딸기", "키위", "망고" };
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine($"과일 {i+1}: {fruits[i]}");
}
for문은 초기화; 조건; 증감 세 부분으로 구성돼요. 가장 많이 사용하는 반복문이죠!
while 반복문:
// 조건이 참인 동안 계속 실행
int count = 1;
while (count <= 5)
{
Console.WriteLine($"while 카운트: {count}");
count++;
}
do-while 반복문:
// 최소 한 번은 실행 후, 조건이 참이면 계속 실행
int num = 1;
do
{
Console.WriteLine($"do-while 카운트: {num}");
num++;
} while (num <= 5);
foreach 반복문:
// 컬렉션의 모든 요소를 순회
foreach (string fruit in fruits)
{
Console.WriteLine($"과일: {fruit}");
}
foreach는 배열이나 컬렉션을 순회할 때 가장 편리한 방법이에요. 인덱스를 신경 쓸 필요가 없어서 코드가 깔끔해져요! 👌
📚 배열과 컬렉션 - 데이터 모음 관리하기
여러 데이터를 한꺼번에 관리하고 싶을 때는 배열과 컬렉션을 사용해요. 쇼핑 목록이나 학생 명단 같은 데이터를 다룰 때 유용하죠!
7. 배열 - 같은 타입의 데이터 모음 📋
배열은 같은 타입의 여러 데이터를 하나의 변수에 저장해요. 인덱스(0부터 시작)로 각 요소에 접근할 수 있어요.
// 배열 선언과 초기화
int[] numbers = new int[5]; // 5개의 정수를 저장할 수 있는 배열
// 배열에 값 할당
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50;
// 선언과 동시에 초기화
string[] names = { "철수", "영희", "민수", "지영", "수진" };
// 배열 요소 접근
Console.WriteLine($"첫 번째 숫자: {numbers[0]}");
Console.WriteLine($"세 번째 이름: {names[2]}");
// 배열 길이 확인
Console.WriteLine($"numbers 배열 길이: {numbers.Length}");
Console.WriteLine($"names 배열 길이: {names.Length}");
주의! 배열의 인덱스는 0부터 시작해요. 5개 요소가 있는 배열의 마지막 인덱스는 4예요. 범위를 벗어나면 IndexOutOfRangeException 오류가 발생해요! 😱
다차원 배열:
// 2차원 배열 (행렬)
int[,] matrix = new int[3, 3]; // 3x3 행렬
matrix[0, 0] = 1; matrix[0, 1] = 2; matrix[0, 2] = 3;
matrix[1, 0] = 4; matrix[1, 1] = 5; matrix[1, 2] = 6;
matrix[2, 0] = 7; matrix[2, 1] = 8; matrix[2, 2] = 9;
// 또는 이렇게 초기화할 수도 있어요
int[,] anotherMatrix = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
8. 컬렉션 - 더 유연한 데이터 관리 🧰
배열보다 더 유연하게 데이터를 관리하고 싶다면 컬렉션을 사용해요. 크기가 동적으로 변하고 다양한 메서드를 제공해요.
컬렉션을 사용하려면 먼저 using System.Collections.Generic;을 추가해야 해요!
List<T> - 가장 많이 사용하는 컬렉션:
// List 생성
List<string> shoppingList = new List<string>();
// 요소 추가
shoppingList.Add("우유");
shoppingList.Add("빵");
shoppingList.Add("계란");
shoppingList.Add("과일");
// 요소 접근
Console.WriteLine($"첫 번째 아이템: {shoppingList[0]}");
// 요소 삽입
shoppingList.Insert(1, "치즈"); // 1번 인덱스에 "치즈" 삽입
// 요소 제거
shoppingList.Remove("빵"); // "빵" 항목 제거
shoppingList.RemoveAt(0); // 0번 인덱스 항목 제거
// 리스트 순회
foreach (string item in shoppingList)
{
Console.WriteLine($"쇼핑 아이템: {item}");
}
// 리스트 크기 확인
Console.WriteLine($"쇼핑 목록 개수: {shoppingList.Count}");
List는 배열과 비슷하지만 크기가 동적으로 변할 수 있어요. 요소를 추가하거나 제거할 때 매우 유용해요! 😊
Dictionary<TKey, TValue> - 키-값 쌍 저장:
// Dictionary 생성 (키-값 쌍)
Dictionary<string, int> ages = new Dictionary<string, int>();
// 요소 추가
ages.Add("철수", 25);
ages.Add("영희", 23);
ages.Add("민수", 27);
// 또는 이렇게 추가할 수도 있어요
ages["지영"] = 22;
// 요소 접근
Console.WriteLine($"철수의 나이: {ages["철수"]}");
// 키 존재 여부 확인
if (ages.ContainsKey("수진"))
{
Console.WriteLine($"수진의 나이: {ages["수진"]}");
}
else
{
Console.WriteLine("수진은 명단에 없습니다.");
}
// Dictionary 순회
foreach (KeyValuePair<string, int> person in ages)
{
Console.WriteLine($"{person.Key}의 나이: {person.Value}");
}
Dictionary는 키를 통해 값을 빠르게 찾을 수 있어서 검색이 많은 경우에 유용해요. 학생 정보나 상품 정보 같은 데이터를 관리할 때 좋죠! 🔍
🧩 메서드 - 코드 재사용의 비밀
같은 코드를 여러 번 작성하는 건 비효율적이죠? 메서드를 사용하면 코드를 재사용할 수 있어요! 이게 바로 DRY(Don't Repeat Yourself) 원칙이에요. ㅋㅋ
9. 메서드 정의와 호출 📞
메서드는 특정 작업을 수행하는 코드 블록이에요. 이름을 지정하고, 필요할 때마다 호출할 수 있어요.
// 메서드 정의
static void SayHello()
{
Console.WriteLine("안녕하세요! C#은 정말 재밌어요!");
}
// 매개변수가 있는 메서드
static void Greet(string name)
{
Console.WriteLine($"안녕하세요, {name}님! 반갑습니다!");
}
// 반환 값이 있는 메서드
static int Add(int a, int b)
{
return a + b;
}
// 메서드 호출
static void Main(string[] args)
{
SayHello(); // "안녕하세요! C#은 정말 재밌어요!" 출력
Greet("코딩초보"); // "안녕하세요, 코딩초보님! 반갑습니다!" 출력
int sum = Add(5, 3); // sum = 8
Console.WriteLine($"5 + 3 = {sum}");
}
메서드는 접근 제한자 반환타입 메서드이름(매개변수) 형태로 정의해요. 매개변수는 없을 수도 있고, 여러 개일 수도 있어요!
10. 메서드 고급 기능 🚀
선택적 매개변수:
// 기본값이 있는 선택적 매개변수
static void DisplayInfo(string name, int age = 20, string country = "한국")
{
Console.WriteLine($"이름: {name}, 나이: {age}, 국적: {country}");
}
// 호출 방법
DisplayInfo("철수"); // "이름: 철수, 나이: 20, 국적: 한국" 출력
DisplayInfo("영희", 25); // "이름: 영희, 나이: 25, 국적: 한국" 출력
DisplayInfo("John", 30, "미국"); // "이름: John, 나이: 30, 국적: 미국" 출력
명명된 인수:
// 명명된 인수로 호출
DisplayInfo(name: "민수", country: "캐나다", age: 28);
// "이름: 민수, 나이: 28, 국적: 캐나다" 출력
out 매개변수:
// 여러 값을 반환할 때 out 매개변수 사용
static bool TryParse(string input, out int result)
{
try
{
result = int.Parse(input);
return true;
}
catch
{
result = 0;
return false;
}
}
// 호출 방법
string userInput = "123";
if (TryParse(userInput, out int number))
{
Console.WriteLine($"변환 성공! 숫자: {number}");
}
else
{
Console.WriteLine("숫자로 변환할 수 없습니다.");
}
이런 고급 기능들을 활용하면 더 유연하고 강력한 메서드를 만들 수 있어요! 코드가 훨씬 깔끔해지고 재사용성도 높아져요~ 😎
🏗️ 객체지향 프로그래밍 기초 - 클래스와 객체
C#은 객체지향 프로그래밍(OOP) 언어예요. 이제 OOP의 기본인 클래스와 객체에 대해 알아볼까요?
11. 클래스와 객체 🧱
클래스는 객체의 설계도, 객체는 클래스의 인스턴스예요. 자동차 설계도(클래스)로 여러 대의 자동차(객체)를 만드는 것과 비슷해요!
// 클래스 정의
class Person
{
// 필드 (데이터)
public string Name;
public int Age;
private string _address; // private 필드는 클래스 내부에서만 접근 가능
// 생성자 (객체 초기화)
public Person(string name, int age)
{
Name = name;
Age = age;
_address = "알 수 없음";
}
// 메서드 (행동)
public void Introduce()
{
Console.WriteLine($"안녕하세요! 저는 {Name}이고, {Age}살입니다.");
}
// 주소 설정 메서드
public void SetAddress(string address)
{
_address = address;
}
// 주소 반환 메서드
public string GetAddress()
{
return _address;
}
}
// 객체 생성 및 사용
static void Main(string[] args)
{
Person person1 = new Person("철수", 25);
Person person2 = new Person("영희", 23);
person1.Introduce(); // "안녕하세요! 저는 철수이고, 25살입니다." 출력
person2.Introduce(); // "안녕하세요! 저는 영희이고, 23살입니다." 출력
person1.SetAddress("서울시 강남구");
Console.WriteLine($"철수의 주소: {person1.GetAddress()}");
}
클래스는 필드(데이터)와 메서드(행동)로 구성돼요. 객체는 클래스의 인스턴스로, new 키워드로 생성해요.
12. 프로퍼티 - 필드 접근의 스마트한 방법 🔐
C#에서는 필드에 직접 접근하는 대신 프로퍼티를 사용해요. 프로퍼티는 get과 set 접근자를 통해 필드 값을 읽고 쓸 수 있게 해줘요.
class Student
{
// private 필드
private string _name;
private int _age;
private double _gpa;
// 프로퍼티
public string Name
{
get { return _name; }
set { _name = value; }
}
public int Age
{
get { return _age; }
set
{
if (value > 0) // 유효성 검사
_age = value;
}
}
// 읽기 전용 프로퍼티
public bool IsAdult
{
get { return _age >= 18; }
}
// 자동 구현 프로퍼티 (C# 3.0 이상)
public double GPA { get; set; }
// 생성자
public Student(string name, int age, double gpa)
{
Name = name;
Age = age;
GPA = gpa;
}
}
// 객체 생성 및 프로퍼티 사용
static void Main(string[] args)
{
Student student = new Student("민수", 20, 3.8);
// 프로퍼티 값 읽기
Console.WriteLine($"이름: {student.Name}");
Console.WriteLine($"나이: {student.Age}");
Console.WriteLine($"성인 여부: {student.IsAdult}");
Console.WriteLine($"학점: {student.GPA}");
// 프로퍼티 값 변경
student.Name = "민수(Mike)";
student.Age = 21;
student.GPA = 4.0;
Console.WriteLine($"변경 후 이름: {student.Name}");
Console.WriteLine($"변경 후 나이: {student.Age}");
Console.WriteLine($"변경 후 학점: {student.GPA}");
}
프로퍼티를 사용하면 캡슐화의 장점을 유지하면서도 필드에 쉽게 접근할 수 있어요. 유효성 검사나 부가 로직을 추가할 수도 있죠!
🛡️ 예외 처리 - 오류 상황 대비하기
프로그램 실행 중 오류가 발생할 수 있어요. 이런 상황에 대비해 예외 처리를 해야 프로그램이 갑자기 종료되는 것을 방지할 수 있어요!
13. try-catch-finally 구문 🧯
try-catch-finally 구문을 사용해 예외를 처리할 수 있어요.
static void Main(string[] args)
{
try
{
Console.Write("숫자를 입력하세요: ");
string input = Console.ReadLine();
int number = int.Parse(input); // 여기서 예외가 발생할 수 있음
Console.WriteLine($"입력한 숫자: {number}");
Console.WriteLine($"10을 나눈 결과: {10 / number}"); // 0으로 나누면 예외 발생
}
catch (FormatException)
{
Console.WriteLine("유효한 숫자를 입력해야 합니다.");
}
catch (DivideByZeroException)
{
Console.WriteLine("0으로 나눌 수 없습니다.");
}
catch (Exception ex) // 모든 예외를 처리하는 일반 catch 블록
{
Console.WriteLine($"오류 발생: {ex.Message}");
}
finally
{
Console.WriteLine("이 코드는 예외 발생 여부와 상관없이 항상 실행됩니다.");
}
}
try 블록에는 예외가 발생할 수 있는 코드를, catch 블록에는 예외 처리 코드를, finally 블록에는 항상 실행되어야 하는 코드를 작성해요.
여러 종류의 예외를 처리하려면 여러 개의 catch 블록을 사용할 수 있어요. 더 구체적인 예외를 먼저 처리하고, 일반적인 예외를 나중에 처리하는 것이 좋아요!
14. 예외 발생시키기 🚨
때로는 직접 예외를 발생시켜야 할 때도 있어요. throw 키워드를 사용해 예외를 발생시킬 수 있어요.
static void CheckAge(int age)
{
if (age < 0)
{
throw new ArgumentException("나이는 음수가 될 수 없습니다.");
}
if (age < 18)
{
throw new ArgumentException("성인만 접근할 수 있습니다.");
}
Console.WriteLine("접근이 허용되었습니다.");
}
static void Main(string[] args)
{
try
{
CheckAge(-5); // 예외 발생
}
catch (Exception ex)
{
Console.WriteLine($"오류: {ex.Message}");
}
try
{
CheckAge(16); // 예외 발생
}
catch (Exception ex)
{
Console.WriteLine($"오류: {ex.Message}");
}
try
{
CheckAge(20); // 정상 실행
}
catch (Exception ex)
{
Console.WriteLine($"오류: {ex.Message}");
}
}
이렇게 예외 처리를 잘 해두면 프로그램이 갑자기 종료되는 것을 방지하고, 사용자에게 친절한 오류 메시지를 제공할 수 있어요! 👍
💡 실용적인 C# 팁과 트릭
이제 C# 기초 문법을 거의 다 배웠어요! 마지막으로 실무에서 유용한 몇 가지 팁을 알아볼까요?
15. 문자열 보간법 (String Interpolation) 📝
C# 6.0부터 도입된 문자열 보간법은 문자열 안에 변수를 쉽게 삽입할 수 있게 해줘요.
string name = "코딩왕";
int age = 25;
// 전통적인 방식
string message1 = string.Format("안녕하세요, {0}님! 당신은 {1}살입니다.", name, age);
// 문자열 보간법 ($ 기호 사용)
string message2 = $"안녕하세요, {name}님! 당신은 {age}살입니다.";
Console.WriteLine(message1);
Console.WriteLine(message2);
문자열 보간법을 사용하면 코드가 더 읽기 쉽고 직관적이에요! 특히 복잡한 문자열을 만들 때 유용해요. 😊
16. Null 조건 연산자 (?.) 🔍
C# 6.0에서 도입된 null 조건 연산자는 null 참조 예외를 방지하는 데 도움이 돼요.
// 학생 객체가 null일 수 있는 상황
Student student = GetStudent(); // 이 메서드는 null을 반환할 수 있음
// 전통적인 방식 (null 체크)
string name = null;
if (student != null)
{
name = student.Name;
}
// null 조건 연산자 사용
string name2 = student?.Name; // student가 null이면 name2도 null
// 체이닝도 가능
int? firstScoreLength = student?.Scores?[0]?.ToString()?.Length;
null 조건 연산자를 사용하면 코드가 간결해지고, NullReferenceException 오류를 방지할 수 있어요! 👌
17. LINQ - 데이터 쿼리의 강력한 도구 🔎
LINQ(Language Integrated Query)는 C#에서 데이터를 쿼리하는 강력한 방법이에요. SQL과 비슷한 문법으로 컬렉션을 쉽게 필터링, 정렬, 그룹화할 수 있어요.
// LINQ를 사용하려면 이 네임스페이스가 필요해요
using System.Linq;
// 학생 목록
List<Student> students = new List<Student>
{
new Student("철수", 22, 3.5),
new Student("영희", 20, 4.0),
new Student("민수", 25, 3.2),
new Student("지영", 21, 3.8),
new Student("수진", 23, 3.9)
};
// 쿼리 문법
var highGpaStudents = from s in students
where s.GPA >= 3.5
orderby s.Name
select s;
// 메서드 문법 (람다식 사용)
var youngStudents = students.Where(s => s.Age < 22)
.OrderByDescending(s => s.GPA)
.Select(s => new { s.Name, s.GPA });
// 결과 출력
Console.WriteLine("높은 학점의 학생들:");
foreach (var student in highGpaStudents)
{
Console.WriteLine($"{student.Name} - GPA: {student.GPA}");
}
Console.WriteLine("\n22세 미만 학생들:");
foreach (var student in youngStudents)
{
Console.WriteLine($"{student.Name} - GPA: {student.GPA}");
}
LINQ를 사용하면 복잡한 데이터 처리 코드를 간결하게 작성할 수 있어요. 데이터베이스 쿼리와 비슷해서 배우기도 쉽죠! 🚀
🎉 축하해요! C# 기초 문법 마스터!
여기까지 오신 여러분, 정말 대단해요! 이제 C# 기초 문법의 핵심을 모두 배웠어요. 이 지식을 바탕으로 게임 개발, 웹 개발, 데스크톱 앱 개발 등 다양한 분야에 도전해보세요!
물론 C#에는 더 많은 고급 기능들이 있지만, 이 기초를 탄탄히 다지면 나머지는 필요할 때 쉽게 배울 수 있을 거예요. 프로그래밍은 실습이 정말 중요해요! 직접 코드를 작성하고 실행해보면서 경험을 쌓아가세요.
혹시 더 전문적인 C# 개발 지식이 필요하시다면, 재능넷에서 C# 개발 관련 재능을 찾아보세요! 전문가들의 도움을 받아 더 빠르게 성장할 수 있을 거예요. 😊
마지막으로, 프로그래밍 공부는 마라톤이지 단거리 달리기가 아니에요. 꾸준히 조금씩 배워나가는 것이 중요해요. 화이팅! 💪
관련 키워드
댓글 작성
이 글에 대한 여러분의 생각을 들려주세요
로그인이 필요합니다
댓글을 작성하려면 먼저 로그인해주세요.
댓글 0
지식인의 숲 - 지적 재산권 보호 고지
지적 재산권 보호 고지
- 저작권 및 소유권: 본 컨텐츠는 재능넷의 독점 AI 기술로 생성되었으며, 대한민국 저작권법 및 국제 저작권 협약에 의해 보호됩니다.
- AI 생성 컨텐츠의 법적 지위: 본 AI 생성 컨텐츠는 재능넷의 지적 창작물로 인정되며, 관련 법규에 따라 저작권 보호를 받습니다.
- 사용 제한: 재능넷의 명시적 서면 동의 없이 본 컨텐츠를 복제, 수정, 배포, 또는 상업적으로 활용하는 행위는 엄격히 금지됩니다.
- 데이터 수집 금지: 본 컨텐츠에 대한 무단 스크래핑, 크롤링, 및 자동화된 데이터 수집은 법적 제재의 대상이 됩니다.
- AI 학습 제한: 재능넷의 AI 생성 컨텐츠를 타 AI 모델 학습에 무단 사용하는 행위는 금지되며, 이는 지적 재산권 침해로 간주됩니다.
아직 댓글이 없습니다.