1. 강좌 목표


- C# 자료형에 대해 알아보기

- 출력을 통한 값의 범위 알기


2. 실습


지난 강좌에서 배운 출력 방법으로 자료형에 대해 알아보도록 하겠습니다.

C# 에서는 크게 2가지의 자료형으로 나누어집니다. 


Value(값)

값 형식은 변수가 값을 담는 데이터 형식이고 타입은 struct 형으로 되어있습니다.

struct는 프로그래밍 언어에서 구조화 된 데이터를 처리 할때 사용하는 구조체이다.

(하나의 제품으로 치자면 이미 완성되어 있는 완제품)


Reference(참조)

참조 형식은 변수가 값 대신 값이 있는 곳의 위치(참조)를 담는 데이터 형식이고 타입은 class 형으로 되어있습니다.

(하나의 제품으로 치자면 변경이 가능한 제품)


이제 코드를 써보면서 데이터 형식과 크기(Byte) 담을 수 있는 값의 범위를 알아보도록 하겠습니다.

코드작성에 앞서 Console.WriteLine에 대해 좀더 알아보고 넘어가도록 하겠습니다.

Console.WriteLine 다음 소괄호 안에는 여러가지 데이터형이 들어갈수 있도록 이미 System 네임스페이스안에

Console이라는 클래스에 WriteLine 이라는 함수로 여러가지 데이터형을 쓸수있겠금 정의되어 있습니다.

아래 사진과 같이 코드를 작성할때 소괄호 ( 를 타이핑하면 들어갈수 있는 매개변수들의 도움말이 나타납니다.

키보드의 방향키 ↑와 ↓키로 해당내용을 볼수도 있습니다.





using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
		int a = 10;
                Console.WriteLine(a);
		Console.WriteLine("int 형 Max : {0} ~ Min : {1} size : {2}byte",  int.MaxValue, int.MinValue,sizeof(int));
        }
    }
}

결과

10
 int 형 Max : 2147483647 ~ Min : -2147483648 size : 4byte


결과의 첫번째 라인은 정수 10

두번째 라인은 int라는 데이터형식의 최대값의 범위와 최소 값의 범위 데이터형식의 크기값 까지 출력 되었습니다.

어떻게 이러한 결과가 나왔는지 하나하나 살펴보도록 하겠습니다.



데이터 형식과 변수명을 선언하고 값 할당하기

1. [자료형] [변수명];

   [변수명] = [값 할당];

int a;
a = 10;


2. [자료형] [변수명] = [값 할당];

int a = 10;


값 형식의 int라는 자료형에 변수 a10이라는 숫자를 대입해 놓고 이것을 Console.WriteLine 메서드를 이용해

Console.WriteLine(a); 처럼 a라는 변수를 넣어 주면서 변수의 자료형에 맞는 출력을 해주는 것 입니다.

※데이터 형식의 종류와 크기 값의 범위등은 아래 <데이터 형식 표>를 참고해 주세요.


두번째 Console.WriteLine 메서드의 사용방법으로는 아래의 형태로 "문자열 내용" 안에 {0} 이나 {1} 처럼 중괄호안에 인덱스가 

들어 있는 형태를 서식 항목이라 하는데 인덱스는 0부터 시작하며 줄 종결자 , 다음으로 오는 순서대로 서식 항목과 치환되어 출력 됩니다.


결과

문자열aaa 문자열bbb


위의 방법처럼 Console.WriteLine의 메서드와 int 데이터 형식에 키워드인 const로 정의된 상수 int.MaxValue, int.MinValue


형식의 크기를 가져오는 연산키워드 sizeof() 를 활용하여 다른 데이터형식의 선언과 값의 할당 데이터의 크기를 확인해 보세요.


 데이터 형식

구분

분류

크기(Byte)

값의 범위 

 byte

 부호없는 정수

 값(struct)

 1(8bit)

 0~255

 sbyte 

 정수

 값(struct)

 1(8bit)

 -128~127

 short 

 정수

 값(struct)

 2(16bit)

 -32,768~32,767

 ushort 

 부호없는 정수

 값(struct)

 2(16bit)

 0~65535

 int 

 정수

 값(struct)

 4(32bit)

 -2,147,483,648~2,147,483,647

 uint

 부호없는 정수

 값(struct)

 4(32bit)

 0~4,294,967,295

 long 

 정수

 값(struct)

 8(64bit)

 -922,337,203,685,477,508~922,337,203,685,477,507

 ulong

 부호없는 정수

 값(struct)

 8(64bit)

 0~18,446,744,073,709,551,615

 char

 문자

 값(struct)

 2(16bit)

 

 float

 실수

 값(struct)

 4(32bit)

 -3.402823e38~3.402823e38

 double

 실수

 값(struct)

 8(64bit)

 -1.79769313486232e308~1.79769313486232e308 

 decimal

 실수

 값(struct)

 16(128bit)

 -79228162514264337593543950335~79228162514264337593543950335

 bool

 논리

 값(struct)

 1(8bit)

 true, false

 string

 문자열

 참조(class)

 

 

 object

 객체

 참조(class)

 

 

<데이터 형식 표>


소스코드

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 10;
            Console.WriteLine("int 형 Max : {0} ~ Min : {1} size : {2}byte", int.MaxValue, int.MinValue, sizeof(int));
            Console.WriteLine(a);

            uint b = 10;
            Console.WriteLine("uint 형 Max : {0} ~ Min : {1} size : {2}byte", uint.MaxValue, uint.MinValue, sizeof(uint));

            short c = 10;
            Console.WriteLine("short 형 Max : {0} ~ Min : {1} size : {2}byte", short.MaxValue, short.MinValue, sizeof(short));

            ushort d = 10;
            Console.WriteLine("ushort 형 Max : {0} ~ Min : {1} size : {2}byte", ushort.MaxValue, ushort.MinValue, sizeof(ushort));

            long e = 10;
            Console.WriteLine("long 형 Max : {0} ~ Min : {1} size : {2}byte", long.MaxValue, long.MinValue, sizeof(long));

            ulong f = 10;
            Console.WriteLine("ulong 형 Max : {0} ~ Min : {1} size : {2}byte", ulong.MaxValue, ulong.MinValue, sizeof(ulong));

            byte g = 10;
            Console.WriteLine("byte 형 Max : {0} ~ Min : {1} size : {2}byte", byte.MaxValue, byte.MinValue, sizeof(byte));

            sbyte h = 10;
            Console.WriteLine("sbyte 형 Max : {0} ~ Min : {1} size : {2}byte", sbyte.MaxValue, sbyte.MinValue, sizeof(sbyte));

            char i = 'A';
            Console.WriteLine("char 형 size : {0}byte", sizeof(char));

            float j = 1.41421356237f;
            Console.WriteLine("float 형 Max : {0} ~ Min : {1} size : {2}byte", float.MaxValue, float.MinValue, sizeof(float));
            Console.WriteLine("{0}", j);

            double k = 1.41421356237d;
            Console.WriteLine("double 형 Max : {0} ~ Min : {1} size : {2}byte", double.MaxValue, double.MinValue, sizeof(double));
            Console.WriteLine("{0}", k);

            decimal l = 10m;
            Console.WriteLine("decimal 형 Max : {0} ~ Min : {1} size : {2}byte", decimal.MaxValue, decimal.MinValue, sizeof(decimal));

            bool m = false;
            Console.WriteLine("bool 형 size : {0}byte", sizeof(bool));

            object obj = null;
            string str = "";
        }
    }
}
결과

int 형 Max : 2147483647 ~ Min : -2147483648 size : 4byte

10

uint 형 Max : 4294967295 ~ Min : 0 size : 4byte

short 형 Max : 32767 ~ Min : -32768 size : 2byte

                               .

                               .

                               .











주의사항

1. 실수의 변수 선언 및 값 할당시 C#컴파일러는 기본적으로 double형으로 인식을 합니다. 그래서 실수형을 사용시 접미사

   float ( f ), double ( d ), decimal ( m )를 붙여 정확히 사용하여야 합니다.


2. 편의를 위해서 형식이 맞지 않는 값으로 변환을 하였을때 생기는 문제점들 입니다.

   컴파일러에서는 문제를 발생하지 않았지만 결과 값과 같이 데이터 손실로 인해 의도치 않은 버그를 유발하기도 합니다.

            double a = 1.23456789123456d;
            float b = (float)a;
            int c = (int)b;
           
            Console.WriteLine("double : {0}", a);
            Console.WriteLine("float : {0}", b);
            Console.WriteLine("int : {0}", c);
결과

double : 1.23456789123456

float : 1.234568

int : 1






다음 강좌에서는 기본 연산자 및 분기문 대해 알아보도록 하겠습니다.

1. 강좌 목표


- 기본구조 파악

- 콘솔창 출력


2. 새 프로젝트 만들기


[비주얼 스튜디오를 실행 -> 파일->새로 만들기 ->프로젝트또는 [단축키 Ctrl+Shift+N] 새 프로젝트 창을 엽니다.



새 프로젝트 창에서 Visual C# -> 콘솔 앱(.NET Framework)를 선택하여 확인


이렇게 새로운 프로젝트를 생성을 하면 아래와 같은 창이 보이게 됩니다.

항목들을 간단하게 확인해 보면 Program.cs 는 앞으로 우리가 작성하게될 코드 문서이고

우측 솔루션 탐색기는 작성한 문서들의 폴더 같은 역활을 하게 됩니다.

Visual Studio는 프로그램을 하기위한 도구임으로 강좌 중간중간 기능들을 설명 하도록 하겠습니다.

코드란 : 컴퓨터가 알아볼수 있는 기호 또는 부호


이제 본격적으로 C#의 기본 코드를 보면서 진행하겠습니다.


3. 기본구조 이해

기본 코딩하기 위해서는 문서작성을 하듯이 하면 됩니다.

처음 새 프로젝트를 만들면 아래와 같은 코드로 구성이 되는데 실제 사용하기위한 코드만 남기고 수정을 하겠습니다.

(Program.cs 안에 있는 내용 모두를 삭제하셔도 됩니다.)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

우선 아래와 같이 작성을 하도록 합니다.


using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
           Console.WriteLine("안녕하세요");
        }
    }
}

작성이 끝나셨으면 [Ctrl+Shift+b] 또는 [빌드 -> 솔루션빌드] 를 누릅니다.

정상적으로 빌드가 되었다면 이제 결과를 확인해봅시다.

결과를 확인 하기 위해서는 [Ctrl+F5]를 눌러보면 콘솔창이 뜨면서 확인할수 있습니다.


컴파일 : 위에 작성한 코드들의 문법을 분석해 기계어로 번역

빌드    : 컴파일을 통해 번역된 것과 그외 잡다한걸 모아서 실행 가능한 파일로 만드는것


결과:

안녕하세요
계속하려면 아무 키나 누르십시오...


축하합니다.

위의 내용과 동일한 결과를 보셨다면 프로그래밍의 첫발을 내딛었으며 앞으로 진행할 강좌도 쉽게 진행 하실수 있습니다.

혹시 실패 하셨더라도 아래 내용을 참고하여 다시한번 도전해보세요.


4. 구조 이해


컴파일러

우리가 공부하는 C# 뿐만아니라 C, C++, JAVA 등 많은 프로그래밍 언어들은 각각의 컴파일러가 존재 합니다.

각 컴파일러에 의해 exe, dll 파일 등과 같이 만들어진 출력 파일을 어셈블리(Assembly)_라고 부르는데 이것을 

컴퓨터는 다시 자신이 알수있는 원시 코드로 컴파일하여 우리가 만든 프로그램이 실행되게 만듭니다.


[C# 코드] -> [C# 컴파일]->[빌드]->[exe, dll 실행]->[원시 코드 컴파일]->[프로그램 시작]



디버깅

일반적으로 게임을 하다보면 의도치 않은 종료나 비정상적인 결과가 나왔을때 유저들은 버그라고 부릅니다.

이런 논리적 오류나 잠재적인 오류를 가리켜 통칭 버그(Bug)라 부르는데 이를 근본적인 원인을 찾아내 

해결할수 있는 작업을 디버깅이라 할수 있습니다.


디버깅을 하기 위해서는 F5를 누르면 바로 디버깅이 시작되는데 결과창을 확인 하기도전에 콘솔창이 닫히게

되는데 이는 코딩을 잘못해서가 아니라 컴퓨터가 더이상 행할수 있는 코드가 없어서 자동 종료된 것입니다.

우리가 사용하였던 Ctrl+F5는 디버깅을 하지 않고 실행을 누른것과 마찬가지로 동작하게 됩니다.


이제 우리가 작성한 코드를 보도록 하겠습니다.


using System;은 얼핏 보면 하나 같지만 세 가지 요소로 이루어져 있습니다.

[키워드] + [네임스페이스] + [문장의 끝을 알리는 기호]

쉽게 말해 "System이라는 네임스페이스를 가져다 쓰겠다."라고 컴파일러에게 알리는 알리는 역활을 합니다.

using System;

네임스페이스

네임스페이스란 성격이 비슷한 클래스(Class), 구조체(Struct), 인터페이스(Interface) 등을 그룹화 한것을 말합니다.

여기서 클래스는 정적인 것과 동적인 기능으로 나뉘는데 정적인것은 필드(Field) 동적적인것은 메소드(Method)로

표현됩니다. 이는 프로그램을 구성하는 기본 단위이고 하나의 클래스는 여러 개의 객체(Object)를 만들어 낼수 있습니다.


앞서 작성한 코드에서 보면 System 네임스페이스로 부터 Console 이라는 메소드를 가져다 사용 하였습니다.

실제 코드에서 using System; 이라는 문장을 삭제하고 빌드를 하면 실패와 오류 메세지를 출력합니다.

Console.WriteLine("안녕하세요"); 

메인

static void Main 메소드는 프로그램의 최초 진입점을 나타내며 반드시 있어야 하는 메소드입니다.

프로그램이 시작되면 메인 메소드를 통해 차례차례 동작을하고 마지막에 도달하면 더이상 실행할 코드가 없으므로 

프로그램 또한 종료 됩니다. static은 한정자로 정적인 메소드를 의미하고 void는 반환 형식으로 반환 값이 없다는

것을 의미합니다.


5. 정리

우리가 작성한 코드를 정리하여 책을 읽듯이 읽어보자면


컴파일러야 나는 프로그램을 시작하기전에 System이라는 네임스페이스를 가져다 쓸꺼야 준비해둬

그리고 내가 만들 네임스페이스는 ConsoleApp1이야 여기에는 Program이라는 클래스를 만들거야

Program클래스에는 내가 만든 프로그램을 시작할 진입점이 있어 거기서부터 차례대로 일을 시작하자

System 네임스페이스로 부터 가져온 Console.WriteLine 에 "안녕하세요" 라는 문자열을 전해줘

더이상 할일이 없으면 프로그램을 종료해줘


이 처럼 프로그래밍을 하다보면 컴파일러가 번역하여 컴퓨터가 알수있도록 논리적인 소설을 쓰는듯한 생각이 들기도 합니다.

미리 정의되고 약속되어진 규칙을 지키면서 자신만의 이야기를 써내려 간다는 것입니다. 


using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
           Console.WriteLine("안녕하세요");
        }
    }
}


1. 알림


C# 강좌를 하기 앞서 초보자에게 흥미를 유도하기 위해 실습 위주로 진행 하고 용어, 예시 등은 다른 인터넷 강좌와 서적들과

차이가 있을수 있습니다. 초등학교 시절 1+1=2 이라는 간단한 사칙연산을 지금 정의하라고 하면 막막해 지기만 합니다.

하지만 이렇게 배운 사칙연산을 실생활에서 아무렇지 않게 사용은 할 수 있습니다.

수박 겉 핥기식 강좌가 될 수도 있음에도 최대한 많은 분들이 프로그램을 배우는데 도움이 되었으면 하는 생각에

강좌를 시작하려 합니다.



2. 강좌 목표


마이크로소프트사의 비주얼스튜디오를 설치


3. 비주얼스튜디오 다운로드


아래 링크에서 Visual Studio Community 를 다운로드 합니다.


다운로드 : https://www.visualstudio.com/ko/downloads/



<마이크로 소프트 홈페이지>


다운로드를 완료하고 실행시키면 다음과 같은 설정 화면이 열립니다.

우리는 C# 언어의 기초적인 공부를 위해 설치하는 거라 ".NET 데스크톱 개발" 항목만 선택하여 설치 합니다.


- 추후 다양한 목적(모바일 어플리케이션, 유니티, 데이터베이스)으로 프로그램을 만들기 위해서는 다른 구성 요소도 필요하게 된다면 

  Visual Studio Installer 를 통해 설정 화면을 다시 불러올수 있습니다.


<옵션 설정 화면>


설치 버튼을 눌러 설치가 진행되고 설치가 완료되면 실행버튼을 누릅니다.

- 화면이 어둡게 나오는것은 "도구->옵션->색 테마 (어둡게)로 설정하여 사용하기 때문에 화면색이 다르게 보일수 있습니다.


<Visual Studio 실행 화면>


이제 다음 강좌부터 프로젝트를 만들고 간단한 C# 문법들을 살펴 보겠습니다.

서울에서 피로함을 달래기 위한 커피한잔의 여유


한국의 대중화된 카페의 경우 프렌차이즈 업체들과 로스팅된 원두를 구입 조합하여 커피맛을 내는 카페들이 많다.

이처럼 대중화되고 대형화된 업체들을 상대로 한국의 개인 자영업자(바리스타)들은 살아 남기는 힘들다.

이번에 포스팅한 카페의 경우 젊은층들의 입소문과 인터넷 포스팅등 다양하게 공유되어 지금까지 영업중이다.



소개

최가커피는 한국어로 해석하자면 단순히 최씨가 운영하는 가게일수도 있지만 오래된 일화와 최씨 고집에 대한 여러말들이 있다.


최영 장군이 죽기전에 한 말이 "만약, 내가 약간이라도 욕심을 부리면서 인생을 살았다면 내가 죽은 뒤에 무덤에 풀이 자라지 않을 것이다"

이후 최영 장군이 죽고나서 정말 그 무덤에 풀이 자라지 않았다는 일화로


'최씨 앉은 자리엔 풀도 안 난다'

'살아있는 김가 셋이 죽은 최가 하나 못 당한다.'


말이 있을 정도로 최씨고집은 어떤 의미로는 대단한 고집 혹은 신념이라 볼수 있다.

이 처럼 최씨 성을 가진 주인이 자신의 이름을 걸고 운영 한다는 의미로 풀이된다.


대표메뉴 

에스프레소 --------------------------------------------------------- 4,000원

카페라때    --------------------------------------------------------- 4,500원

그린티프라페 ------------------------------------------------------- 5,500원




01

02

03

04

핸드드립 

더치커피 

사이폰커피 

에스프레소 


★ 메뉴는 종류가 너무 많아 다른 포스트를 참조 ★






정보

영업시간 

-주말 12:00 ~ 23:00 | 주중 11:30 ~ 00:00


휴무일

-정기휴무-매주(월)



<입구>

<핸드 드립>

<하우스 커피>

<와플>


주소

서울특별시 광진구 능동로13길 23

(지번) 서울특별시 광진구 화양동 11-33


길찾기

지하철 2호선 2번출구 -> 도보 약 9분

+ Recent posts