사실 C# 코딩은 처음 해본다.

 

이 포스팅은 초보의 관점에서 C#의 클래스를 분석하는 과정을 보여준다. 따라서 오류가 있을 수 있다.

단 C#은 초보지만 JAVA와 C는 알고있는 초보이다. 

 

온라인으로 자료를 찾다가 스택오버플로우의 문서를 모아서 만든 RIP Tutorial 의 C# 전자책을 읽어봤다. 스택오버플로우의 강의 사례들을 모아놓은 곳이다. 여기는 초보자가 갈 곳은 아니다 싶었다. 특히 경험이 없는 언어에 대해서는...

 

타이틀이 RIP Tutorial 인데 튜토리얼을 끝내겠다는 것인지 유저들을 끝내겠다는 건지 모르겠다 +.+ 휴~

(Rest in Peace~ newbie~)

 

그래도 블로그에 소개는 해놓는다. PDF책의 난이도는 상당히 높지만 거의 대부분의 언어가 있고, 무엇보다 전 세계의 지식과 경험들이 모인 것 같은 책은 신선한 시도로 보인다. 전자책은 무료로 다운로드 받을 수 있고 CC- BY - SA니 참고한다.

 

https://riptutorial.com/

 

RIP Tutorial (Stack Overflow Documentation)

Documentation on languages such as C#, Entity Framework, SQL, and a lot of more!

riptutorial.com

 

새로운 프로그래밍 언어를 습득할 때는...

새로운 프로그래밍 언어를 습득할 때는 우선 시작하는게 중요하다. 그런데 코딩을 하다보면 타성에 젖어서 의외로 시작점을 찾기가 어렵다. 그럴때는 접근하기 쉬운 것 부터 시작하는게 좋다.

 

이 포스트의 내용은 Tutorialspoint 의 C샵 튜토리얼의 소스코드를 분석해보겠다. C샵을 배우지 않았는데 어떻게 분석하는가? 그것은 C샵과 자바가 객체지향 프로그래밍의 일반적인 문법에 닮아있기 때문이다. 또한 마이크로 소프트의 Documentation은 그 역사만큼이나 최고 수준이다.

 

아마 이 부분이 다른 오픈소스들에 비해 월등하지 않는가 싶다. MS는 자기 물건을 쓰게 해야하니 설명서와 메뉴얼을 기가막히게 작성해와서 다른 플랫폼으로 도망가는 것을 막았다. 상당수 데스크탑 애플리케이션이 비주얼 스튜디오로 개발된 역사를 이끌어 왔다.

 

모바일이 대세가 된 지금은 좀 다르지만 어쨋든 문서화가 잘되어 있으면 언어를 습득하기도 개발하기도 유리한 것이다.

 

*C샵 기본 문법 (Tutorialspoint)

https://www.tutorialspoint.com/csharp/csharp_basic_syntax.htm

 

C# - Basic Syntax - Tutorialspoint

C# - Basic Syntax C# is an object-oriented programming language. In Object-Oriented Programming methodology, a program consists of various objects that interact with each other by means of actions. The actions that an object may take are called methods. Ob

www.tutorialspoint.com

<예제 소스코드>

 

기본적인 클래스이다. 사각형을 객체화 했다.

using System;

namespace Helloworld
{
    public class Rectangle
    {
            /* this is comments
            multiline comments are avaiable 
            */

            // single line comments
            
        double length;
        double width;

        public void AcceptDetails()
        {
            length = 4.5;
            width = 3.5;
        }
        public double GetArea()
        {
            return length * width;
        }
        public void Display()
        {
            Console.WriteLine("L : {0}", length);
            Console.WriteLine("W : {0}", width);
            Console.WriteLine("A : {0}", GetArea());
        }
    }

    class ExecuteRectangle {
        static void Main(string[] args)
        {
            Rectangle r1 = new Rectangle();
            r1.AcceptDetails();
            r1.Display();

            Console.ReadKey();
        }
    }   
}

 

1. 네임스페이스

using System;

using System 은 System이란 네임스페이스(이름공간)을 사용한다는 말이다. 이름 공간이란 말도 생소하다. 이름이 들어있는 공간이란 말인가? MS 문서에 의하면 .NET은 네임스페이스 안에 여러 클래스를 구성한다. 프로그램에서 쓰여지는 Console 클래스는 System 네임스페이스에 포함되어 있다.

 

자바로 비교하자면 package 나 python 의 패키지 혹은 모듈 구조에 비교할 만 하다.

 

굳이 네임스페이스라고 한 이유로 보면 프로그래머들이 가장 많이 고민하는 것 중 하나가 식별자의 이름을 짓는 일이다.

 

식별자는 클래스 , 변수, 함수 등의 사용자가 정의한느 이름을 말한다. 네임스페이스가 다르면 같은 이름의 식별자도 사용이 가능하다. MS의 자습서를 읽어보면 using 지시자도 상당히 많은 양의 설명이 필요하다. 지금은 이름 공간에 있는 클래스를 사용한다는 정도로 알아두자. 차츰 알게 될 것이다.

 

 

네임스페이스 - C# 프로그래밍 가이드

C# 프로그래밍에서 네임스페이스에 대해 알아봅니다. 네임스페이스 속성의 개요를 확인하고 추가 리소스를 봅니다.

docs.microsoft.com

namespace Helloworld
{
    public class Rectangle
    {
            /* this is comments
            multiline comments are avaiable 
            */

            // single line comments

 이제 앞부분을 살펴보자. 이름공간 namespace가 나왔다. Helloworld 로 보니 사용자가 정의하는 이름공간으로 이해하면 될 것 같다. 아직 학습도중이지만 만약 클래스가 이름공간 안에 존재한다면 지금 사용자의 이름공간도 구조화된것이 아닌가 추측이 가능하다.

 

Helloworld 이름공간의 Rectangle 클래스가 있다. System 이름공간의 Console 클래스가 있듯이. 그렇다면 이름공간안에 클래스들을 정의해 놓은 다음 다른 파일(외부)에서 접근해 사용하려면 이름공간과 public 클래스가 필요하다는 말이 된다. 클래스의 이름은 자바와는 다르게 파일이름과 달라도 된다.

 

다음에 나오는 문장들은 주석문이다. C언어의 전통 방식이다. /* */ 멀티라인이고  // 싱글라인이다. C#에서 C언어 스타일을 그대로 계승했다.

 

        double length;
        double width;

        public void AcceptDetails()
        {
            length = 4.5;
            width = 3.5;
        }
        public double GetArea()
        {
            return length * width;
        }
        public void Display()
        {
            Console.WriteLine("L : {0}", length);
            Console.WriteLine("W : {0}", width);
            Console.WriteLine("A : {0}", GetArea());
        }
    }

뒷부분이다. 조금 긴 듯 하지만 멤버 함수(메소드)가 세 개 라서 그렇게 보인다.

 

double형 length와 width는 누가 봐도 너비와 길이로 보인다. 사각형이기 때문에 너비와 길이로 설정한다. 이들은 클래스 안에 있는 멤버 변수이다. 멤버변수에 접근제어자 (accesss modifier) 가 지정이 안되어 있다. C#문법에 따르면 접근제어자가 지정되지 않은 멤버변수는 default 값으로 private 이 적용된다고 한다.

 

자바의 경우 default 는 같은 패키지내에서 접근이 되므로 차이가 나는 것 같다.

자바의 접근제어자

 

자바 튜토리얼 (5-5) 접근 제어자 (Access Modifier)

이클립스에서 클래스를 만들면 public 이 따라온다. main( ) 함수에도 항상 public 이 붙어 있다. 한번쯤 의문을 가져봤거나, 기분이 불편했다면 접근제어자에 대하여 들어볼 시간이다. 자바의 객체와

digiconfactory.tistory.com

여기서는 외부에서 사용할 일이 없으니까 명시하지 않았다. 그리고 멤버 변수는 기본적으로 내부에서 사용하는 것이 OOP의 원칙이기도 하다.

 

다음 메소드에서는 멤버변수 값을 세팅한다. 생성자에서 해야할 일로 보인다. 클래스에 대한 과정을 보여주는 예제인 것을 감안하자. 다음 GetArea는 사각형의 면적을 구하는 것이다. 너비 * 길이를 리턴한다. 이 때의 멤버 변수도 private인 것이다. 마지막 메소드 Display는 Console 클래스의 WriteLine 메소드로 콘솔에 출력한다. {0}은 포맷 지정자로 보인다.

 

Console 클래스는 갑자기 나온게 아니고 System namespace안에 있는 클래스다. WriteLine은 자바로 따지면 static 메소드 같다.

 

표준출력으로 스트리밍하는 메소드인데 C#과 자바 둘은 닮았다.

C#  : System.Console.WriteLine

Java: System.out.println

<실행 메소드>

class ExecuteRectangle {
        static void Main(string[] args)
        {
            Rectangle r1 = new Rectangle();
            r1.AcceptDetails();
            r1.Display();

            Console.ReadKey();
        }
    }   

C#도 마찬가지다. C#의 모든 프로그램은 메인 함수에서 출발한다.

 

static void Main 이것도 같은 내용이다. C#교재 중반에 가면 설명이 나온다.

 

Rectangle 객체를 인스턴스화한다. 메소드를 호출하여 초기화를 시키고 마지막 Display로 콘솔에 출력한다.

 

마지막 Console.ReadKey는 혹시 너무 빨리 윈도우가 종료할때 유효하다. 디버그 할 때도 필요하다.

 

 

이것으로 C# 초보자의 분석을 마친다. 자바와 많이 닮았다는 점, C언어를 계승한다는 점에 대하여 이해할 수 있었다. 인터넷으로 좀더 좋은 튜토리얼 사이트와 PDF교재를 찾아 볼 생각이다. C#교재도 좀 알아봐야겠다. 여러권 사면 돈이 아까울 것 같고 한권을 사더라도 레퍼런스가 될 교재를 사야할 것 같다.

 

 MSDN이 매우 잘 나와있기 때문에 책이 잘 안팔리는 것인가. 서점에 C#책은 상대적으로 적어 보인다.

 

어쨋든 C#을 몰라도 자바와 C언어를 알면 기본적인 분석이 가능하다는 점은 의미가 있다.

공유하기

facebook twitter kakaoTalk kakaostory naver band