C# 소개
C#: MS에서 개발한 닷넷(.NET) 프레임워크 기반 범용 목적의 다중 패러다임 프로그래밍 언어
* 닷넷 프레임워크란? C#이 동작하는 환경, 기계어로 변환되는 과정을 담당함.
* 범용 목적: 다양한 목적으로 C#프로그래밍 언어를 사용함.
* 다중패러다임: 한 가지 스타일만을 사용하는 것이 아니라, 다양한 방식의 프로그래밍을 사용하는 것을 의미한다.
닷넷 프레임워크란? 웹 앱, 모바일 앱, desktop 프로그램, 게임 프로그램, 사물인터넷 프로그램 등을 만들기 위한 오픈소스, 크로스 플랫폼 개발 환경
ex) c#, f# 등 다양한 프로그래밍 언어를 각각의 컴파일러를 통해서 기계가 이해할 수 있는 CAI로 변환을 하고, CAI가 동작할 수 있는 CLI(실행할 수 있는 환경)이 포함된 SW를 일컫는다.
즉, 닷넷 프레임워크는 언어가 다른 환경에서 개발이 되더라도 동일하게 실행할 수 있는 것.
그 외부에는 머신코드 즉, HW가 다르더라도 여러 개의 프로그래밍 언어를 사용해 개발한 SW가 동작할 수 있는 환경을 의미한다.
하이 레벨 언어-> C#, C 등 프로그래밍 언어
로우 레벨 언어 -> 머신코드
즉, 사람이 좀 더 이해하기 편하느냐, 기계가 이해하기 편한지에 따라서 로우/ 하이레벨로 구분한다.
↑
프로그래밍 언어, 컴파일러, 실행할 수 있는 환경(런타임 구성요소)들은 공통의 인프라로 구성되어 있다. 하지만 이런 것을 가지고 어디에서 사용할 수 있느냐에 따라서 환경이 달라지게 된다. .NETframework는 윈도우 환경에서 동작하는 것을
의미한다. 즉 윈도우즈OS가 설치된 곳에서 프로그램을 동작시키거나 아니면 웹 서비스 또는 웹 앱을 개발할때 .NETframework를 사용한다.
.NETcore는 윈도우 환경뿐만 아니라 리눅스/ mac에서 동작할 수 있도록 데스크톱 앱을 만들거나 웹 서비스를 개발할떄 사용하는 환경이다.
Xamarin은 ios나 안드로이드처럼 모바일 환경에서 개발하거나 또는 mac데스크톱 환경에서 앱을 개발할떄 사용한다.
위 세가지는 서로 다른 환경이기 때문에 c#이라는 언어는 같지만, 어떤 환경에서 실행이 될거냐에 따라서 플랫폼이 달라진다. 즉 똑같은 c#언어를 사용하더라도 위 세가지 환경에서 모두 실행할 수 있다는 것
그리고 범용 프로그래밍 언어는 다양한 목적으로 사용할 수 있는 프로그래밍 언어를 말한다.
그와 대비된게 특수한 목적으로 사용하는 프로그래밍 언어 (fortran, lisp)
fortran: formula translator, 수식 변환기 또는 수치 계산에 사용하는 프로그래밍 언
Lisp: 인공지능 처리나, 최근에는 오토캐드 3차원 그래픽 디자인 또는 문서 편집기 등에서 사용된다.
그러나 그와 대비되는 c, c++, java, 파이썬, go, kotlin, swift 등은 범용으로 설계된 언어로 수치 계산, 웹 개발, 모바일 환경, 데이터 분석 등 프로그램을 만드는데 사용할 수 있어 보편화 되어 있고 , 여러가지 목적으로 활용할 수 있다.
다중 패러다임 언어는 하나 이상의 프로그래밍 스타일을 지원하는 언어
명령형과 선언형을 구분하는 방식은 예를 들어 식당에 간다고 가정하면 네 명의 손님이 왔을때 식당에 들어가는 방식은 네 명이 비어있는 자리를 먼저 찾고, 비어 있는 자리가 있다면 네 명의 손님들은 들어간다. 이게 바로 명령형 방식
선언형 방식은 입구에 들어가서 물어본다. "우리 4명 자리 있어요?" 해서 자리가 있으면 알아서 안내를 해주고 세팅을 해주는 방식이다. 그것이 바로 선언형
c#에서는 명령형과 선언형을 동시에 지원한다. 그래서 목적에 맞게끔 프로그래밍 스타일을 적용해서 사용한다.
그렇지만 명확하게 용도를 모르는 상태에서 사용하게 되면 객체지향 프로그래밍 언어를 절차적 프로그래밍 방식으로 사용할 수도 있게 된다. 그래서 이거를 알고 작성해야 한다.
절차적 VS 객체지향 프로그래밍 언어
절차적 프로그래밍 방식 1. 시간의 흐름에 따라서 코드를 작성하는 프로그래밍 스타일 2. C언어, fortran, basic 등 EX1) 그림을 그리고 색칠을 하는 방식이라고 했을떄 그 방식을 절차적 프로그램이 언어로 살펴보자면... 먼저 종이를 준비한다. 종이 준비시에는 종이크기, 색상을 결정하고 펜을 선택할 때는 펜의 굵기, 종류를 선택하고, 스케치를한다. 그리고 외곽을 그리고 마지막으로 색을 선택하고 색을 특정한 위치에 칠하게 된다. 여기 사각박스 안에 있는것들은 함수로 처리를 하고, 종이의 크기나, 펜의 굵기 같은 외부 것들은 변수로 처리하게 된다. 그리고 메인함수는 이런 변수와 함수들을 순차적으로 배치해서 처리하게 한다. 그렇기 떄문에 중간에 순서가 뒤바뀌거나 꼬이면 엉뚱하게 동작하게 된다. 종이를 준비하기 전에 스케치/ 색칠을 하면 이상하다. 그리고 스케치 되지 않은 상태에서 색칠을 하면 이상하게 되고 어디서 어디까지 색칠을 해야할지 모르는 것 처럼... EX2) 샌드위치 코딩 문제점: 논리적으로 순서에 맞게끔 동작하는 그 원리를 이해하려면 컴퓨터가 동작하는 원리를 이해하려면 절차적 프로그래밍 방식이 더 이해하기 쉽다. 그러나 절차적 프로그래밍언어는 코드가 복잡해졌을 때 문제가 발생한다. 코드가 복잡해지면 순서를 하나하나 찾아가면서 어디서 문제가 발생했는지 하나하나 찾아가야 한다. 그래서 나타난게 객체지향프로그래밍 언어이다. |
객체지향 프로그래밍 언어 1. 모든 사물을 객체로 표현, 객체의 속성과 메소드의 호출로 프로그램을 작성 2. C++, JAVA, C# 객체는 SW적인 구조고, 모든 사물을 객체로 표현하는 것 그리고 객체에는 속성, 메소드가 있다는 것이 중요하다. * 속성: 멤버변수, ATTRIBUTE, 프로퍼티 속성과 메소드는 절차적 프로그래밍 언어와 구분하기 위해서 사용하는 단어 절차적 프로그래밍 언어에서 변수는 객체지향 프로그래밍에서 속성과 같다.(변수 == 속성) 절차적 프로그래밍 언어에서 함수는 객체지향 프로그래밍에서 메소드와 같다.(메소드 == 함수) 객체지향은 순서보다 각 개체들 간에 서로 데이터를 주고 받는 과정이 더 중요하다. 그래서 메인함수의 역할을 한 main객체가 있을 것이고, 메인 객체에서는 어느 특정한 순서라든지 과정이 표시가 된다. 그리고 각각의 객체들은 자기의 역할만 수행을 하면 된다. 객체마다 각각이 할 수 있는 역할을 정리해놓고, 그 객체에 속성, 메소드를 호출하는 방식으로 동작하는 것을 의미한다. 그러다보니 문제가 발생해도 특정한 객체만 자세히 들여다보면 그 문제를 해결할 수 있다. 객체지향 프로그래밍 특징 중 하나는 상속인데, 상속은 부모 클래스가 가진 내용을 자식 클래스를 그대로 물려 받아서 사용할 수 있는 기능이다. 절차적 프로그래밍은 상속이 없어서 새로운 것을 만들떄는 원본을 copy하여 그 안에 있는 내용을 수정하는 방식. 이럴 수정할 내용이 몇 개 없으면 상관 없지만, 복잡도가 높아지면 문제가 커진다. 같은 내용을 중복적으로 수정할 경우가 생긴다. 문제가 생기거나, 버그가 생기거나 했을떄 모든 코드에 수정을 해야한다. 하지만 객체지향은 부모의 클래스를 상속받아서 자식 클래스에서 사용하게 되면 부모 클래스만 수정해도 상속받는 자식 클래스또한 수정된다. 즉, 하나의 클래스만 수정해도 상속받는 클래스도 수정되어서 유지보수, 관리가 수월하다. 최근 프로그래밍 언어들은 대부분 객체지향 프로그래밍 방식을 지원한다. |
C#으로 만들 수 있는 것
1. 메모장, 계산기, 그림판처럼 윈도우즈 OS에서 동작하는 그래픽 환경의 프로그램을 의미.
그리고 오프스에 내장된 파워포인트, 엑셀, 워드 같은 것들도 만들 수 있다.
즉, 윈도우 OS에서 실행할 수 있는 컨텐츠들을 C#으로 만들 수 있다.
2. 유니티로 만든 컨텐츠
유니티라고 하는 게임엔진은 C#프로그래밍 언어를 기본 스크립트 언어로 사용하고 있어서 유니티로 만들 수 있는 2,3차원, 시뮬레이션, 가상현실, 모바일 등의 콘텐츠들을 모두 만들 수 있다. 즉, 게임객체간 충돌, 컨트롤, 애니메이션 효과들을 적용할 수 있다.
3. 웹 애플리케이션
웹 브라우저 소프트웨어에서 동작하는 프로그램(인터넷 서비)을 의미한다. 즉, 인터넷을 통해서 사용할 수 있는 서비스들을 모두 만들 수 있다. 동적인 웹 페이지를 C#에서 만들 수 있다.
정적인 웹 페이지란 화면이 정지된 상태로만 볼 수 있는 것
* 동적 웹 페이지: 댓글 남기기, 그림 업로드, 영상을 화면에서 보거나 이런 것들을 웹 브라우저 상에서 수행함.
4. iot연동장치
c#에 통신기능을 활용하면 외부의 장치와도 연동가능하다.
ex) 아두이노 (대표적인 오픈소스 hw)
아두이노 보드에는 온도나 습도, 압력, 환경 데이터를 수집하고 그 데이터를 전송할 수 있는 역할을 하는데, 컴퓨터에다가 직접 연결을 하거나 무선으로 동작하는 아두이노 보드를 사용하게 되면 아두이노 보드에서 들어온 데이터를 수집, 저장 또는 다른 클라우드 환경으로 전송하는데 c#을 사용할 수 있다. 그 외에도 c#을 통해서 모바일 앱을 개발하거나, 음성/ 영상 컨텐츠도 개발이 가능하다.
'C언어 공부 > C#언어 공부' 카테고리의 다른 글
Replit의 C# 본격적으로 시작하기 (0) | 2023.07.28 |
---|