Post

c# 공부 2024.05.02

C#이란?

C# (C sharp)은 마이크로소프트에서 개발한 다목적 프로그래밍 언어이다. 데스크톱, 웹, 모바일, 클라우드 및 게임 애플리케이션 등 다양한 종류의 애플리케이션을 개발하는 데 널리 사용됨.

C#에 대한 주요한 특징들:

  1. 객체 지향: C#은 객체 지향 프로그래밍 언어로, 실제 세계 개체를 속성(프로퍼티)과 동작(메서드)을 가진 객체로 모델링할 수 있다. 이러한 접근 방식은 코드의 조직화, 재사용성 및 유지 보수성을 촉진함.
  2. 구문 유사성: C#의 구문은 C, C++, Java와 유사하여 해당 언어에 익숙한 개발자들이 C#을 배우는 데 도움이 됨.
  3. 플랫폼 독립성: C#은 .NET 프레임워크를 통해 플랫폼 독립적으로 설계되었다. 즉, C#으로 작성된 애플리케이션은 Windows, macOS, Linux 및 iOS 및 Android와 같은 모바일 플랫폼에서도 실행될 수 있다.
  4. 관리형 언어: C#은 .NET 프레임워크에서 제공하는 공용 언어 런타임 (CLR) 환경에서 실행되는 관리형 언어이다. CLR은 메모리 관리, 보안 및 예외 처리와 같은 작업을 처리하여 개발자가 더 안전하고 신뢰할 수 있는 코드를 작성할 수 있도록 지원함.
  5. 풍부한 표준 라이브러리: C#에는 풍부한 표준 라이브러리인 .NET Framework 클래스 라이브러리 (FCL)가 함께 제공되며, 파일 I/O, 네트워킹, 데이터베이스 액세스 및 사용자 인터페이스 개발과 같은 일반적인 프로그래밍 작업에 대한 다양한 클래스 및 함수를 제공한다.

총론적으로 C#은 기업 소프트웨어 개발부터 게임 개발에 이르기까지 다양한 분야에서 사용되는 강력하고 다재다능한 프로그래밍 언어임.

개발환경구축

  • 비주얼 스튜디오 다운로드
  • c# 설치

링크

05-02 수업

  • 책은 c# 입문을 사용 (백견불여일타)
  • 한글 프로그램이 .net 기반으로 만들어짐
  • 목차를 보고 전체 그림 보기
  • 사용자에게 소스 파일을 주면 안되고 사용자에게는 실행파일을 줘야함 그래서 실행파일로 빌드가 필요

파일 > 새로만들기 > 프로젝트 콘솔앱으로 .net 만들고 프로젝트 이름을 MyFirstApp 으로 하고 같은 경로 체크 해서 실행

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;  // System 네임스페이스를 사용합니다. 기본적인 시스템 함수를 포함하고 있습니다.
using System.Collections.Generic;  // 컬렉션을 다루는 기능을 사용합니다.
using System.Linq;  // LINQ 쿼리를 사용하는 기능을 포함합니다.
using System.Text;  // 텍스트 처리와 관련된 기능을 사용합니다.
using System.Threading.Tasks;  // 멀티스레딩과 관련된 작업을 처리할 때 사용합니다.

namespace MyFirstApp  // 'MyFirstApp' 네임스페이스를 정의합니다. 네임스페이스는 클래스와 다른 요소들을 그룹화하는 방법을 제공합니다.
{
    internal class Program  // 'Program' 클래스를 정의합니다. 이 클래스는 프로그램의 진입점을 포함합니다.
    {
        static void Main(string[] args)  // Main 메서드는 프로그램의 진입점입니다. 프로그램 실행 시 최초로 호출됩니다.
        {
            Console.WriteLine("Hello World!");  // 콘솔에 "Hello World!"를 출력합니다. 
        }
    }
}

빌드 이미지

위에 사진에 보면 빌드 파일 경로가 보임

빌드 저 코드대로 그냥 하고 실행파일 실행해보면 순삭당함.

1
2
System.Console.WriteLine("종료하려면 아무키나 누르던가 말던가");  // 콘솔에 "Hello World!"를 출력합니다. 
System.Console.ReadKey();

이 코드를 추가하고 다시 빌드를 하면 이제 cmd창이 계속 켜있음.

MSDN 은 마이크로소프트 개발자 문서 여기에 설명서가 있음 c#가이드문서

변수타입 object, var, dynamic

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;  // System 네임스페이스를 사용합니다. 기본적인 시스템 함수를 포함하고 있습니다.
using System.Collections.Generic;  // 컬렉션을 다루는 기능을 사용합니다.
using System.Linq;  // LINQ 쿼리를 사용하는 기능을 포함합니다.
using System.Text;  // 텍스트 처리와 관련된 기능을 사용합니다.
using System.Threading.Tasks;  // 멀티스레딩과 관련된 작업을 처리할 때 사용합니다.

namespace RoadBook.CsharpBasic.Chapter02.Examples  // 'RoadBook.CsharpBasic.Chapter02.Examples' 네임스페이스를 정의합니다.
{
    internal class Ex004  // 'Ex004' 클래스를 정의합니다. 이 클래스는 변수 유형을 다루는 예제를 포함합니다.
    {
        public void Run()  // 'Run' 메서드는 변수들을 초기화하고 결과를 콘솔에 출력하는 작업을 수행합니다.
        {
            object objValue = 1;  // 'object' 타입으로 'objValue' 변수를 선언하고 초기화합니다. 모든 타입의 데이터를 저장할 수 있습니다.
            var vValue = "var";  // 'var' 키워드를 사용하여 'vValue' 변수를 선언하고 초기화합니다. 컴파일러가 자동으로 타입을 추론합니다.
            dynamic dValue = true;  // 'dynamic' 타입으로 'dValue' 변수를 선언하고 초기화합니다. 실행 시 타입이 결정됩니다.

            Console.WriteLine("obj 변수 값은 {0}", objValue);  // 'objValue' 변수의 값을 콘솔에 출력합니다.
            Console.WriteLine("var 변수 값은 {0}", vValue);  // 'vValue' 변수의 값을 콘솔에 출력합니다.
            Console.WriteLine("dynamic 변수 값은 {0}", dValue);  // 'dValue' 변수의 값을 콘솔에 출력합니다.
        }
    }
}

1. object

  • object 타입은 C#의 모든 데이터 타입의 최상위 베이스 클래스. 즉, C#에서 모든 타입은 object에서 파생된다. 이러한 특성 때문에, object 타입 변수는 어떤 종류의 데이터도 저장할 수 있다.
  • 사용 예: object objValue = 1;
  • 특징:
    • 어떠한 데이터 타입도 저장 가능하다.
    • 타입 안전성이 떨어짐. 즉, 사용하기 전에 적절한 타입으로 캐스팅해야 할 필요가 있다.
    • 박싱(Boxing)과 언박싱(Unboxing) 과정을 거쳐야 하기 때문에 성능에 부담을 줄 수 있음. 정수와 같은 값 타입을 object 변수에 할당하면, 그 값은 힙에 저장되는 박싱된 객체로 변환됨.

2. var

  • var는 암시적 타입 지역 변수를 선언할 때 사용되며, 변수를 선언하는 시점에서 컴파일러가 변수의 타입을 추론하여 결정한다.
  • 사용 예: var vValue = "var";
  • 특징:
    • 변수를 초기화하는 시점에서 타입이 결정됨.
    • 코드가 간결해지고, 가독성이 좋아짐.
    • 반드시 선언과 동시에 초기화해야 함.
    • 메서드 범위에서만 사용할 수 있으며, 클래스의 멤버 변수로는 사용할 수 없음.
    • 컴파일 타임에 타입이 결정되므로, dynamic보다는 타입 안전성이 높다.

3. dynamic

  • dynamic 타입은 실행 시간에 타입 체크가 이루어지는 특별한 데이터 타입.
  • 사용 예: dynamic dValue = true;
  • 특징:
    • 실행 시간에 타입이 결정됨.
    • 컴파일 시 타입 안전성을 제공하지 않아서, 런타임 에러의 가능성이 높아짐.
    • COM 객체나 다이나믹 언어와의 인터페이스에 유용하게 사용된다.
    • dynamic을 사용하면, Intellisense와 같은 IDE의 코드 완성 기능이 제한될 수 있다.

형변환

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;  // System 네임스페이스를 사용합니다. 기본적인 시스템 함수를 포함하고 있습니다.
using System.Collections.Generic;  // 컬렉션을 다루는 기능을 사용합니다.
using System.Linq;  // LINQ 쿼리를 사용하는 기능을 포함합니다.
using System.Text;  // 텍스트 처리와 관련된 기능을 사용합니다.
using System.Threading.Tasks;  // 멀티스레딩과 관련된 작업을 처리할 때 사용합니다.

namespace RoadBook.CsharpBasic.Chapter02.Examples  // 'RoadBook.CsharpBasic.Chapter02.Examples' 네임스페이스를 정의합니다.
{
    internal class Ex010  // 'Ex010' 클래스를 정의합니다. 숫자 변환을 다루는 예제를 포함합니다.
    {
        public void Run()  // 'Run' 메서드는 메인 로직을 실행하는 메서드입니다.
        {
            string strNum = "10";  // 문자열 변수 'strNum'을 선언하고 "10"으로 초기화합니다.

            int convertNum = Convert.ToInt32(strNum);  // Convert.ToInt32 메서드를 사용하여 문자열 'strNum'을 정수로 변환합니다.
            int parseNum = Convert.ToInt32(strNum);  // 다시한번 Convert.ToInt32 메서드를 사용하여 문자열 'strNum'을 정수로 변환합니다.
            Console.WriteLine("{0} + {1} = {2}", convertNum, parseNum, convertNum+parseNum);  // 콘솔에 두 변수의 합을 출력합니다.
        }
    }
}

에러

Program.cs 라는 파일이 메인 파일이고 여기에 클래스 객체를 생성해줘야 클래스안의 코드가 실행이 되는거임

This post is licensed under CC BY 4.0 by the author.