마이크로소프트사에서 개발한 프로그래밍언어이다. 특정 프레임워크내에서 사용하도록 만들어졌으며 다루기 쉽고 편리한 기능들을 지원한다.

 

Feature

- .Net 프레임워크내에서 사용되는 언어이다.

- 다중 패러다임을 지원한다.

- C, C++, Java와 문법이 비슷하다.

- 자동으로 메모리를 관리한다.

- 모든 메서드와 변수는 클래스내에서 선언된다.

 

.Net Framework 정리글

 

Object-Oriented Programming

객체지향 프로그래밍

C# 은 모두 클래스 단위로 만들어지고 사용된다.

사용하려는 함수, 변수를 하나의 객체로 만들어 사용하는것이 특징이며 전역 변수나 전역 함수와 같은 방식은 허용되지 않으며 어디서든 사용하기 위한 함수나 변수를 선언하기 위해서는 정적 클래스를 선언하고 그 내부에 함수와 변수를 선언하고 해당 정적 클래스를 통해 접근해서 사용하는 방식을 권장한다.

 

Multi-Paradigm Programming

하나의 프로그래밍 언어에서 하나의 패러다임에 국한되지 않고 여러 가지 프로그래밍 패러다임을 지원하는 것을 의미한다. 이 패러다임이란 사고 방식이나 문제 해결을 위한 접근 방식 그리고 특정 언어의 디자인 패턴과 같은 것을 말한다,

* Paradigm : 어떤 분야에서의 일관된 이론적 모델이나 철학적 접근 방식을 말한다.

 

Structed Programming

구조적 프로그래밍은 선택 및 반복 그리고 블록 구조 및 서브루틴의 구조화된 제어 흐름을 광범위하게 사용하여 컴퓨터 프로그램의 명료성, 품질 및 개발 시간을 향상시키는 것을 목표로한다.

 

Imperative Programming

명령형 프로그래밍은 프로그램의 상태를 Statements를 사용해 변경시키는 것을 말하며 명령적 프로그래밍은 컴퓨터가 수행할 명령으로 구성된다. 프로그램의 예상 결과에 대한 높은 수준의 설명보다 단계별로 프로그램이 작동하는 방식을 설명하는데 중점을 둔다.

 

Object-Oriented Programming

객체 지향 프로그래밍은 데이터와 코드를 포함할 수 있는 객체의 개념을 기반으로 하는 프로그래밍 패러다임이다.

데이터는 필드의 형태이고 코드는 절차의 형태를 한다. 객체는 일반적으로 프로시저나 메서드가 붙어있고 그것들을 통해서 객체의 데이터에 접근하고 수정하는 형태를 가진다.

 

Event-Driven Programming

이벤트 기반 프로그래밍은 마우스 클릭, 키 입력같은 사용자 동작이나 센서 출력, 메시지 전달 등의 이벤트에 의해 프로그램의 흐름이 결정되는 방식이다.

 

Asnychronous Method Invocation

비동기 메서드 호출, 멀티스레드 컴퓨터 프로그래밍에서 호출된 코드가 끝나기를 기다리는 동안 다른 호출이 차단되지 않는 설계 패턴이다. 응답이 도착하면 호출 스레드가 알려지고 응답에 대한 폴링은 되지 않는다.

* Polling

스레드에 플래그를 놓아 값이 준비되면 플래그를 메인 프로그램에 전달해주는 것을 말한다. 메인 프로그램에서는 주기적으로 스레드에 값이 준비되었는지 확인하는 작업이 필요하다.

 

Functional Programming

함수형 프로그래밍은 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임이다. 자료처리를 수학적 함수의 계산처럼 취급한다.

 

Generic Programming

범용 프로그래밍은 하나의 코드를 통해 다양한 타입을 처리하는 것을 말한다.

 

Reflective Programming

Reflection을 활용하는 프로그래밍 패러다임이다.

* Reflection

런타임 시점에서 자신의 구조와 행위를 관리하고 수정할 수 있는 프로세스를 뜻한다. 

행위 관리(Type Introspection) 은 런타임에서 객체의 타입을 결정할 수 있는 능력을 의미한다.

 

Concurrent Computing

동시 컴퓨팅, 프로세스에 대해 별도의 실행 지점 또는 제어 스레드가 있는 시스템 속성이다. 동시 시스템은 다른 연산이 완료될 때까지 기다리지 않고 연산이 진행될 수 있는 시스템이다.

모듈러 프로그래밍의 한 형태로 전체적인 계산은 동시에 실행될 수 있는 서브 컴퓨터에 반영된다.

 

Garbage Collection

C#이 다른 언어들과 가장 큰 차이를 보이는 부분은 메모리 관리에 있다. 메모리는 GC(Galbage Collector)를 통해서 관리된다. GC는 동적으로 할당된 메모리에 대해서 특정 시점에 특정 조건을 통해서 더 이상 사용되지 않는다고 판단되는 할당된 메모리를 해제하는 작업을 한다. 

 

GC는 사용자로 하여금 메모리 관리에 신경쓰지 않아도 되는 편의성을 제공하지만 동시에 메모리에 대해서는 사용자가 관리할 수 없다는 단점도 가지고 있다. 

 

Static

C#에서는 모든 메서드나 변수의 선언은 클래스 내부에서 가능하다. 즉 다른 언어처럼 전역으로 선언하고 어디서든 호출할 수 있게 만드는게 불가능하다.

애초에 C#은 어떤 클래스든 다른 클래스에서 호출하는것이 가능하기 때문에 전역으로 선언이 사용될 필요가 없게 되는데 이때 매번 인스턴스를 생성하는게 불편하다면 정적 클래스를 생성하고 그 내부에 메서드와 변수를 선언하여 사용하면 된다.

 

 

 

728x90
반응형

'Program Language > C#' 카테고리의 다른 글

C# 비동기화 키워드 : async, await  (0) 2023.01.31
C# 클래스 추상화 키워드 : abstract  (0) 2023.01.25
Main method  (0) 2023.01.19
테스트 환경  (0) 2023.01.17
.Net Framework  (0) 2023.01.17

최근부터 넷플릭스에서 방영 중인 드라마 재벌집 막내아들을 재밌게 보고 있었다.

소재 자체는 특별한 건 없었지만 이야기의 흐름이나 배우들의 연기가 계속해서 다음 편을 보고 싶게 만들었다.

 

그리고 대망의 엔딩을 오늘 보게 되었다. 

내가 드라마를 늦게 보기 시작해서 이미 엔딩은 주변 사람들의 대화를 통해서 알고 있는 상태였는데 기대가 크지 않았던 터라 그런지 나름 괜찮게 마무리 지었다고 본다. 현실적인 배경에 허무맹랑한 요소를 섞었던 터라 엔딩을 어떻게 하던 모든 사람들을 만족시키기는 어려울 거라고 느끼고 있었기 때문에 나름 복선이라고 볼 수 있는 부분들은 다 정리했지 않았나 싶다.

 

보다가 조금씩 흥미가 떨어지던 부분은 가장 매력적이었던 등장인물이 더 이상 등장하지 않게 되면서 이전보다는 집중력이 떨어졌다. 그래도 그 후 어떻게 이야기가 마무리될지 궁금해서 끝을 보긴 했지만 엄청 특별한 반전은 없었고 그럼 그렇지라는 느낌과 저게 왜 저렇게 되지라는 의문도 남은 채로 드라마가 끝났다. 

 

그래도 오래간만에 몰입해서 봤던 드라마였고 소재가 흥미롭고 간접적으로 시대적인 공감을 느낄 수 있어서 만족스러운 드라마 시청이었다. 

 

728x90
반응형

'Life' 카테고리의 다른 글

베트남 콘삭 커피  (0) 2023.04.09
티스토리 단축키  (1) 2023.03.30
장 줄리앙 전시회 - 그리고 거기  (1) 2023.03.27
러버덕과 러버덕  (1) 2023.01.07
2023-01-07 시작  (0) 2023.01.07

튜링머신(Turing Machine)

앨런 튜링

튜링 머신은 앨런 튜링이 1936년에 제안한 이론적인 기계이다.

수학자 앨런 튜링은 힐버트 프로젝트의 목표에 도전하기 위해 튜링 머신 개념을 도입했다. 힐버트 프로젝트는 모든 수학적 명제를 증명해주는 만능 기계를 만들려는 시도였으나, 튜링은 이러한 프로젝트의 목표가 불가능하다는 것을 증명하기 위해 튜링 머신을 사용했다.

 

이러한 배경으로 제안된 튜링 머신은 컴퓨터 과학의 기초가 되는 개념이 되면서 컴퓨터가 수행할 수 있는 모든 계산 작업을 수행할 수 있으며, 이를 통해 컴퓨터 과학에서 다양한 계산 문제를 이해할 수 있게된다.

 

튜링 완전성(Turing Completeness)

컴퓨터 과학에서 중요한 개념으로, 계산 이론의 관점에서 특정 시스템이 모든 튜링 머신의 계산 수행 능력을 말하며 튜링 완전성은 컴퓨터 시스템의 계산 능력을 평가하는 기준이 된다.

 

튜링 완전한 시스템은 두 가지 기본 요소가 있다.

1. 기계의 상태를 나타낼 수 있는 유한한 수의 상태

2. 무한한 길이의 메모리를 사용

 

튜링 완전한 시스템은 모든 계산 문제를 해결할 수 있는 이론적인 기계로 볼 수 있으며 이를 통해 현대의 대부분의 프로그래밍 언어와 컴퓨터 아키텍처는 튜링 완전하다고 간주되고 이를 통해서 다양한 시스템 간의 계산 능력을 비교할 수 있다.

 

튜링 완전성을 갖춘 시스템은 어떤 알고리즘도 구현이 가능하며 이론적으로는 다른 튜링 완전한 시스템과 동일한 계산 능력을 가진다. 하지만 언제까지나 튜링 완전성은 이론적인 기준일 뿐 실제 성능을 반영하지 않기 때문에 실제로는 하드웨어 성능, 메모리 제한 등의 제약 때문에 모든 시스템이 동일한 성능을 내지는 않는다.

 

작동 방식

튜링머신은 무한히 긴 테이프가 있고 이 테이프는 일정한 크기로 나누어져 있으며 이를 셀이라고 부른다. 이 셀에는 기호가 기록되어있고 테이프를 따라 움직이는 헤더에 의해서 기록이 바뀔 수 있다. 튜링 머신의 상태는 상태 레지스터에 저장되고 이 상태에 대 따른 동작은 액션 테이블에 의해서 결정된다.

 

액션 테이블에 작성되는 동작은 테이프에 기호를 읽거나 새로 기록하고, 헤더를 왼쪽 또는 오른쪽으로 이동 그리고 정지의 기능을한다. 만약 액션 테이블에서 특정기호를 읽을 때 까지 헤더를 이동시키고 해당 기호를 읽었을 때 새로 기록을 하거나 또는 다른 동작을 수행시키는 등의 방식으로 모든 계산을 처리할 수 있는 기계로 동작하게 된다. 

Turing Machine

 

한계

튜링 머신에는 계산할 수 없는 문제들이 존재한다.

튜링 머신은 이론적인 개념이기 때문에 현실에 존재할 수 없는 무한한 길이의 테이프와 무한한 시간을 가정으로한다. 따라서 유한한 메모리와 제한된 시간을 가지는 실제 컴퓨터에서는 동일한 계산 능력을 가질 수 없다,

 

그리고 또 다른 한계의 대표적인 예로는 튜링의 정지 문제(Halting Problem)가 있다. 이 문제는 어떤 튜링 머신이 특정 입력에 대해 정지할지 즉, 계산이 완료되어 결과를 출력하고 종료할것인지 또는 무한 루프에 빠져 계속 실행할지를 결정하는 문제이다. 튜링은 이 문제에 대한 알고리즘이 존재하지 않음을 증명했는데 이는 어떤 일반적인 알고리즘이나 프로그램이 입력과 조합에 대해 항상 올바른 정지 여부를 결정할 수 없음을 의미한다. 튜링은 이러한 튜링 머신이 정지문제에 대해서 해결할 수 없다는 점을 통해서 힐버트의 프로젝트를 반증 했다.

 

정지 문제의 불가능성은 튜링 머신과 같은 계산 모델의 한계를 보여주며, 컴퓨터 과학의 여러 분야에서 중요한 영향을 미친다. 예를 들어 프로그램의 정확성, 최적화 또는 자동 버그 찾기 등의 분야에서 이론적한계를 인식하고 이에 대한 해결책을 찾는데 도움이 된다.

 

정지 문제의 증명은 컴퓨터 과학과 수학에서 근본적인 한계를 보여주며, 계산 가능성 이론의 발전에 큰 영향을 미쳤다. 또한, 이 결과는 계산의 본질과 한계에 대한 연구를 촉진시키며 컴퓨터 과학의 핵심 개념으로 자리잡게 되었다.

 

 

 

 

728x90
반응형

'Computer > Engineering' 카테고리의 다른 글

데이터 경로와 제어 유닛  (0) 2023.03.17
메모리  (0) 2023.03.17
명령 사이클과 명령어 집합 구조  (0) 2023.03.17
레지스터  (0) 2023.03.17
CPU  (0) 2023.03.17

+ Recent posts