1. 클래스?

클래스란 데이터들과 함수들을 하나로 묶어놓은 틀(타입)입니다.
객체 지향 프로그래밍(OOP, Object Oriented Programing)의 관점에서 클래스란 객체에 필요한 정보나 상태, 기능 등을 하나로 묶은 것입니다.
객체 지향 프로그래밍 : 객체 중심의 객체의 관점에서 프로그래밍 하는 것을 말합니다. 여러 객체들의 유기적인 상호작용을 통해 프로세스가 진행됩니다.

클래스를 사용하는 이유
객체 지향 프로그래밍은 객체들의 유기적인 상호작용으로 프로세스가 진행됩니다. 그리고 클래스는 객체를 설계하고 만들 때 중요한 역할을 하고 있습니다. 객체를 효율적으로 설계할 수 있는 틀 혹은 청사진의 역할을 수행합니다. 클래스로 객체를 효율적으로 어떻게 설계해야하는지는 밑의 객체 지향 프로그래밍 4대 특성을 보시면 어느정도 이해할것이라 생각합니다.

객체 지향 프로그래밍 4대 특성
객체 지향 프로그래밍 4대 특성에는 추상화, 상속성, 캡슐화, 다형성이 있습니다.

사진처럼 생물에는 다양한 종류들이 있습니다. 개나 고양이로 예시를 들면 생물 -> 동물 -> 포유류 -> 개,고양이 이런 식입니다. 객체 지향 프로그래밍 4대 특성을 사용하면 위의 사진과 같은 계층도를 구현할 수 있습니다. 그리고 이 계층도를 사용해 개나 고양이 같은 구체적인 객체도 만들 수 있게 됩니다.

추상화(Abstraction)
추상화는 객체를 만들 때 공통적인 특징(데이터와 기능)을 하위 개념이 물려받는 것을 의미합니다. 예시로 배추, 시금치, 깻잎, 상추 같은 객체를 만들려고 할 때 공통적인 특징을 생각한 다음 식물이라는 하나의 추상적인 객체로 묶는 것을 추상화라고 합니다.

상속성(Inheritance)
상속성에서 상속은 상위 개념의 특징(데이터와 기능)을 하위 개념이 물려받는 것을 의미합니다. 클래스를 예시로 들면 동물 클래스를 상속받아 개와 고양이 클래스를 만들었을 때 동물 클래스가 부모 클래스, 개와 고양이 클래스가 자식 클래스가 되는 것입니다. 자식클래스는 부모클래스의 데이터와 기능들을 사용할 수 있습니다.

캡슐화(Encapsulation)
캡슐화는 외부에서 객체 내부의 데이터에 직접 접근할 수 없게 만들고(은닉화), 데이터와 함수를 하나로 묶는 것을 말합니다. 공통적인 데이터와 기능들을 묶고 외부에서 필요로 하는 것들은 함수로 제공하여 내부의 동작 방식과 데이터를 숨기는 것을 캡슐화라고 할 수 있습니다.

ex) 전등을 켤 때 전등이 어떤 식으로 작동하는지 숨기고 전등을 켜거나 끄기 위해 제공받은 스위치를 누르면 전등이 켜지고 꺼지는 것처럼 객체 내부가 어떤 방식으로 동작하는지 숨기면서 필요로 하는 함수를 사용하면 객체가 작동하는 것

다형성(Polymorphism)
다형성은 상속을 받은 자식에서 부모의 기능을 재정의하여 확장시켜나가는 것입니다. 동영상 플레이어에서 동영상들은 각자의 확장자(.mp4 .wmv)를 가지고 있습니다. 각각의 파일들마다 고유의 데이터 저장패턴과 그 저장된 데이터를 읽어오는 방식이 다를 것입니다. 그럴 때 MediaFile 클래스를 만들고 상속받은 MP4File, WMVFile 클래스를 만들어 부모 클래스의 Load, Play 기능을 자식 클래스에서 각자의 방식으로 재정의하여 사용한다면 다른 확장자를 필요로 할 때도 상속받아 재정의하면 되기 때문에 확장시켜나가기 좋습니다.

2. 주석이란?
프로그래밍에서 주석(comment)은 쉽게 말해서 메모라고 생각할 수 있습니다. 주석은 프로그램 소스에 삽입하더라도 아무런 영향도 끼치지 않습니다.

본인이 아닌 다른 프로그래머가 본인이 작성한 코드를 봤을 때 쉽게 이해할 수 있도록, 본인이 직접 작성한 코드라고 할지라도 오랜 시간이 지나고 봤을 때 바로 기억할 수 있도록 하기 위해서는 코드 옆에 메모를 작성해주면 편리할 것입니다. 그런 역할을 해주는 것이 주석입니다.

한 줄만 주석으로 지정할 경우에는 // 뒤에 메모하고, 원하는 범위만큼 주석으로 지정하려면 시작점에서 /* 마무리 지점에서 */ 로 주석의 범위를 정해줄 수 있습니다.

3. 주석에 관한 규칙

1. 주석은 코드를 복제해서는 안됩니다.

코드에서 충분히 확인 할 수 있는 내용들이 다시 작성 될 필요는 없습니다. 코드에서 충분한 정보를 제공하고 있다면 굳이 주석을 추가해서 중복 정보를 제공 할 필요는 없습니다.

2. 명확한 주석을 작성할 수 없다는 것은 코드에 문제가 있다는 것을 의미할 수도 있습니다.

코드를 이해시키기 위해서 이런 저런 주석들이 많이 필요하다면 그 코드는 아직 완전하게 작성된 코드가 아닐 가능성이 높습니다. 이런 경우에는 설명하기에 충분할만큼 이해하고 더 나은 방법으로 코드를 다시 작성해야 합니다.

3. 주석은 혼란을 야기하는 것이 아니라 혼란을 없애야 하는 것입니다.

좋은 주석은 코드를 보는 사람을 더할나위 없이 고맙게 만들지만, 만약 주석이 코드를 보는 사람들에게 혼란을 일으킬 것 같다면 차라리 주석을 삭제해야 합니다.

4. 만약 코드를 복사해 온 것이라면 복사한 코드의 원본 소스에 대한 링크를 제공해야 합니다.

대부분의 프로그래머들은 온라인에서 찾은 코드를 사용하기도 합니다. 소스에 대한 참조를 주석으로 달아 놓으면 미래의 사용자에게 어떤 문제가 해결되고 있었는지, 누가 코드를 제공했는지, 여전히 잘 작동하는지, 어떻게 개선 할 수 있을지 등에 대한 내용들을 알 수 있습니다.

5. 버그를 수정했다면 주석을 추가해야 합니다.

미래의 본인이나 타인이 현재 및 참조된 코드를 이해하는데 도움이 될 뿐만 아니라 코드가 여전히 필요한지 여부와 테스트 방법을 결정하는데 도움이 됩니다.

6. 아직 완전하지 않은 구현을 표시하기 위해서는 주석을 사용해야 합니다.

주석에 미구현 부분을 표시하면 기술 부채를 측정하고 해결하는데 도움이 됩니다.

4. 구문이란(Statement)?

컴퓨터에게 명령어를 내리는 것을 구문(Statement)이라고 하고, 구문은 세미콜론으로 구분합니다.

구문에는 여러 종류가 있습니다.
식 구문(Expression Statement)은 연산자와 피연산자를 가지고 계산하는 것입니다. 식은 기본 제공되거나 사용자가 정의한 함수, 연산자, 값 등의 것들 중 일부 또는 전부가 결합된 것입니다.

멤버 접근 연산자(Member Access Operator)는 “.” 입니다. ~의 라는 뜻을 가지고 있습니다.

주문 연산자(Invocation Operator)호출 연산자라고 부르기도 하며, 함수 값을 생성하는 식 뒤에 오는 괄호를 호출(실행)합니다.

5. 이름 공간이란(Namespace)?

이름 공간(Namespace)는 성격이나 하는 일이 비슷한 여러 구성 요소를 묶는 역할을 합니다. 만약 여러 사람이 같은 “검”이라는 것을 만들면 여러개의 “검”이 등장하게 될 것입니다. 이 “검”이라는 것이 누가 만든것인지 Namespace를 사용해서 구분 지을 수 있습니다.

Namespace는 대규모 코드 프로젝트를 구성합니다.
. 연산자를 사용하여 구분됩니다.

6. 표준 클래스 라이브러리란

C#에서는 모든 라이브러리가 클래스로 되어 있기 때문에 이를 표준 클래스 라이브러리(Standard Class Library)라고 합니다. MS에서 제공해주고 있는 클래스 라이브러리의 개수는 1만 여가지인데, 필요한 순간마다 찾아서 사용하면 됩니다.

표준 라이브러리는 파일 읽기 및 쓰기, 문서 조작, 애플리케이션 대중화, 네트워크 통신과 같은 많은 공통 기능을 쉽게 하기 위한 라이브러리 집합으로, 프로그래머의 작업을 더 쉽게 만들어주는 기능을 수행합니다.

7. 표준 클래스 라이브러리가 제공하고 있는 기능

Microsoft.CSharp.RuntimeBinder Namespace : 동적 언어 런타임과 C# 간의 상호 운용을 지원하는 클래스 및 인터페이스를 제공합니다.

Microsoft.VisualBasic Namespace : Visual Basic에서 Visual Basic 런타임을 지원하는 형식이 포함되어 있습니다.

Microsoft.Win32 Namespace : 두 가지 유형의 클래스인 운영 체제에서 발생한 이벤트를 처리하는 클래스와 시스템 레지스트리를 조작하는 클래스를 제공합니다.

System Namespace : 일반적으로 사용되는 값과 참조 데이터 형식, 이벤트와 이벤트 처리기, 인터페이스, 특성, 예외 처리 등을 정의하는 핵심 클래스 및 기본 클래스가 포함되어 있습니다.

System.Buffers Namespace : Span 및 Memory로 표현되는 형식처럼 메모리 버퍼를 만들고 관리하는 데 사용되는 형식이 포함되어 있습니다.

System.CodeDom.Compiler Namespace : 지원되는 프로그래밍 언어로 수행되는 소스 코드의 생성 및 컴파일을 관리하기 위한 형식을 포함합니다.

8. 기술 부채란

소프트웨어 개발에서 기술 부채(technical debt)는 시간이 오래 걸리는 접근 방식을 사용하는 대신 쉬운 솔루션을 선택함으로써 발생하는 추가 재작업의 비용을 뜻하는 용어입니다.

금전적 부채와 비슷하게 기술 부채가 상환되지 않으면 이자가 누적되어 변경 사항을 구현하기가 더 어려워질 수 있습니다.

금전적 부채와 다른점은 금전적 부채는 연락을 하거나 직접 찾아와 독촉을 하지만, 기술 부채는 운영중인 서비스를 불안정하게 만들거나 장애를 발생시키는 것으로 독촉을 합니다.

기술 부채를 상환할 능력이 되지 않는다면 서비스는 지속적으로 불안정한 상태와 장애가 발생하고, 그런 상태를 개선하지 못해 포기하거나 현재 상태를 포기하고 처음부터 다시 만들어야 하는 상황이 생길 수 있습니다.
따라서, 적절한 기술 부채의 사용은 프로그래밍을 하는데 있어서 쾌적하게 할 수 있지만 본인의 능력선에서 잘 조절하여 부채를 해야하는 것으로 보입니다.

9. 컴파일 오류란

컴파일의 뜻은 ‘번역하다, 엮다, 편집하다” 로 프로그래밍에서의 컴파일이란 사용자가 입력한 명령어를 컴퓨터가 이해할 수 있게 번역해주는 것이 컴파일 입니다. 컴퓨터가 명령어를 번역하는 도중에 잘못된 명령어를 발견하여 알려주는 것이 컴파일 오류(Compile Error) 입니다.

컴파일 오류는 프로그래밍 언어가 정한 규칙을 따르지 않는 문장이 있을 경우에 발생합니다. 대부분의 컴파일 오류는 코드 입력 시의 실수로 인해서 즉, 문법적인 오류 때문에 발생합니다.
ex)
키워드의 맞춤법이 틀렸을 때 발생합니다.
필요한 문장 부호를 빠뜨렸을 때 발생합니다.
If 를 먼저 사용하지 않고 End If 를 사용했을 때 발생합니다.

참고자료
객체지향 프로그래밍?
C# 객체지향의 시작 클래스(Class)
C# 강좌 10편, 클래스(Class)
함수의 정의
주석이란?
좋은 주석을 위한 규칙
C# Programing Microsoft Learn
식 구문 가이드 - MS 지원
Invocation - JavaScript
스탠다드 라이브러리 - 위키피디아
Learn MS
Technical debt - 위키피디아
기술부채?
프로그래밍 오류의 종류
링크텍스트
링크텍스트

profile
프로그래머 지망생

0개의 댓글