C#/C# 교과서

[C# 교과서] B. 팁과 트릭

서니션 2023. 2. 11. 19:11
728x90
반응형

인텔리센스와 코드 조각

코드 편집기에서 제공하는 기능 중 인텔리센스는 자동으로 코드를 입력하게 도와주고 가이드해줌

 

비주얼 스튜디오에서 Ctrl + Space를 누르면 명령어 관련 가이드를 받아볼 수 있음

cla를 입혁한 후 Tab을 두 번 누르거나 class를 입력한 후 Tab을 두 번 누르면 자동으로 클래스 코드 작성

 

인텔리코드란?

인텔리센스 기능에서 가장 많이 사용하는 API는 별표로 표기되는데, 이를 인텔리코드라고 함


자리 표시자 주요 서식

  • D : 십진수 표시
  • X : 16진수 표시
  • C : 통화량 표시
  • E : 부동소수점(지수) 표시
  • F : 부동소수점(기본) 표시
  • G : 부동소수점(E, F와 비슷) 표시
  • N : 콤마 구분 표시
using System;

class PlaceHolderEtc
{
    static void Main()
    {
        Console.WriteLine("자리" + "표시자");
        Console.WriteLine("{0} {1} {2}", "안녕", "방가", "또봐");
        Console.WriteLine("{0} {1} {0}", "안녕", "또봐");
        Console.WriteLine("[{0,-10:C}]", 1234);// 왼쪽 원 표시
        Console.WriteLine("{0,10}", 1234); // 10칸 잡고 오른쪽 정렬
        Console.WriteLine("{0,-10}", 1234); // 10칸 잡고 왼쪽 정렬
        Console.WriteLine("{0,10:D}", 16); // 10진수: 16
        Console.WriteLine("{0,10:X}", 16); // 16진수: 10
        Console.WriteLine("{0,10:N}", 1234); // 콤마구분: 1,234.00
        Console.WriteLine("{0,10:C}", 1234); // 통화량: \1,234

        Console.WriteLine("{0,10:E}", 1234.5678); // 1.234568E+003
        Console.WriteLine("{0,10:F}", 1234.5678); // 1234.57
        Console.WriteLine("{0,10:G}", 1234.5678); // 1234.5678
    }
}

checked와 unchecked

산술 연산 구문을 checked {} 구문으로 묶어 주면 오버플로 오류가 생기지 않게 알려주는 오류를 발생시킬 수 있음

using System;

public class HelloWorld
{
    public static void Main(string[] args)
    {
        byte b = 255;
        checked
        {
            b++;
        }
    }
}

반대로 unchecked는 오버플로 예외를 발생시키지 않음


전처리기 지시문과 조건부 컴파일

#define, #if, #else, #endif 등을 사용하여 조건부 컴파일 가능

#define YES // #define NO

using System;

class DefineDemo
{
    static void Main()
    {
#if YES
        // #define YES가 정의되어 있으면 현재 구문 실행
        Console.WriteLine("YES");
#else
        Console.WriteLine("NO");
#endif
    }
}

C# 코드 외부에서 컴파일러 설정 값으로 들어오는 조건에 따라 다르게 컴파일할 때 사용 가능


암호화 연습 : 초간단 문자열 인코딩 및 디코딩

String을 Byte로 변경하는 것을 인코드(encode)

Byte를 String으로 변경하는 것을 디코드(decode)

 

Base64 방식을 사용하면 문자열을 암호화 가능

//[!] 초간단 문자열 인코딩 및 디코딩
using System;

namespace StringConverterDemo
{
    /// <summary>
    /// 문자열 변환기
    /// </summary>
    public class StringConverter
    {
        /// <summary>
        /// 초간단 문자열 인코딩
        /// </summary>
        public static string ConvertToSimpleEncoding(string original)
        {
            byte[] byt = System.Text.Encoding.UTF8.GetBytes(original);
            return System.Convert.ToBase64String(byt); // 암호화
        }
        /// <summary>
        /// 초간단 문자열 디코딩
        /// </summary>
        public static string ConvertToSimpleDecoding(string modified)
        {
            byte[] byt = System.Convert.FromBase64String(modified);
            return System.Text.Encoding.UTF8.GetString(byt); // 복호화
        }
    }
    class StringConverterDemo
    {
        static void Main()
        {
            string s = "안녕하세요.";
            Console.WriteLine("[1] 원본: {0}", s);

            s = StringConverter.ConvertToSimpleEncoding(s); // 인코딩
            Console.WriteLine("[2] 인코딩: {0}", s);

            s = StringConverter.ConvertToSimpleDecoding(s); // 디코딩
            Console.WriteLine("[3] 디코딩: {0}", s); 
        }
    }
}

C#에서 이메일 보내기

C# 고유의 기능이라기보다는 이메일 서버의 SMTP 서비스를 닷넷에서 사용하는 외부 서비스 개념

그렇기에 이메일을 전송하는 방법은 정형화되지 않아 여러 가지가 있으며, 다양한 외부 패키지 사용 가능

 

System.Net.Mail 네임 스페이스

클래스 이름 설명
SmtpClient SMTP 메일 서비스를 이용하여 이메일을 전송하는 부분을 담당
MailMessage 이메일의 주요 항목을 구성하는 개체를 생성한 후 SmtpClient 클래스에 전달
Attachment 이메일을 전송할 때 파일 첨부와 관련된 부분을 담당
MailAddress 전송할 이메일 주소를 저장할 개체를 생성

 

C#에서 MS 계정을 사용하여 이메일 보내기

using System.Net;
using System.Net.Mail;

class SendMailTest
{
    static void Main()
    {
        SmtpClient SmtpServer = new SmtpClient("smtp.live.com");
        var mail = new MailMessage();
        // [1] 보내는 이메일 넣는 곳
        mail.From = new MailAddress("youremail@yourdomain");
        // [2] 받는 이메일 넣는 곳
        mail.To.Add("youremail@yourdomain"); 
        mail.Subject = "메일 보내기 테스트";
        mail.IsBodyHtml = true;
        string htmlBody;
        htmlBody = "안녕하세요. <em>아웃룩</em> 메일 보내기 테스트입니다.";
        mail.Body = htmlBody;
        SmtpServer.Port = 587;
        SmtpServer.UseDefaultCredentials = false;
        // [3] outlook.com 이메일 계정 정보
        SmtpServer.Credentials = 
            new NetworkCredential("youremail@yourdomain", "password"); 
        SmtpServer.EnableSsl = true;
        SmtpServer.Send(mail);
    }
}
728x90
반응형