Untitled

<aside> 💡 목차


</aside>

https://github.com/POCU/COMP1500CodeSamples

용어 & 자료형 크기 & 표현 범위 요약

프로그래밍 패러다임?

<aside> 💡 특정 프로그래밍 언어에서 지원하는 기능에 따라 분류하는 방식

</aside>

1. 절차적 언어

<aside> 💡 가장 단순한 형태의 언어


절차적으로 책읽듯이 한줄한줄 실행한다는것이 초점

기능과 자료 저장의 분리

→ CPU는 연산하고 메모리는 저장하는 역할만 하니까, 절차적 언어가 CPU에게는 더 올바른 내용

</aside>

<aside> 💡 바뀐 상태를 크게 고민하지 않는 언어다


두 값의 총합을 구하는 프로그램이 있다

더하기 전 총합 변수는 0이지만

더한 후 총합 변수는 n이다.

총합 변수가 0에서 n으로 바뀐 것 자체가 상태가 변했다는 것

</aside>

<aside> 💡 예시


장부와 비서의 개념으로 이해

Untitled

장부 내용에 덮어쓰기!

계산은 계산기에서 하고
결과는 어딘가에 적어두기

계산은 계산기에서 하고 결과는 어딘가에 적어두기

같은 엑셀 파일의 줄에 바뀐 내용을 추가하는게 아니라, 덮어쓰는 상황이 생김 즉, 상태가 변할 수 있음

</aside>

2. OOP 개체 지향 언어

<aside> 💡 복잡한 프로그램의 구조를 잡기 쉽다

</aside>

<aside> 💡 사람에게 직관적인 언어


어떤 사물을 봤을 때 사물의 개념을 하나로 쳐서 그걸 기본적인 구성단위로 본다는 게 OOP


가능한 재활용하는 방식

</aside>

<aside> 💡 기능과 자료를 하나의 개체로 둠

Student 라는 개체에 상태와 기능을 둘 다 구현한 상태

Student 라는 개체에 상태와 기능을 둘 다 구현한 상태

</aside>

<aside> 💡 예시

![램프는 킨 상태 1 과 끈 상태 0 에 따라 기름 양이 줄어든다.

이런 관계들을 표현하는것이 OOP언어 라는 것이다](https://prod-files-secure.s3.us-west-2.amazonaws.com/09ccd4d5-876c-4bba-bbdf-cc77a0a11257/33017732-9071-4c01-823b-77a86ea7ef7c/Untitled.png)

램프는 킨 상태 1 과 끈 상태 0 에 따라 기름 양이 줄어든다.

이런 관계들을 표현하는것이 OOP언어 라는 것이다

</aside>

→→ 왜 ‘객체’ 가 아니라 ‘개체’ 라고 부름?

<aside> 💡 주어와 목적어이 있을때 목적어가 객체가 되는것

</aside>

3. 함수형 언어

<aside> 💡 함수형 언어?


<aside> 💡 불변적이다


절차적 언어처럼 함수가 있지만, 상태 변화가 없음

위 절차적 언어에서는 게속하여 장부의 내용이 업데이트 되었잖아?

함수형 언어는 한번 쓴 값을 바꾸지 못한다 (블록체인처럼)

</aside>

<aside> 💡 장점이 뭐야?


멀티 스레딩 상황에서 장점을 발휘함

즉 레이스 컨디션 때문에…


(함수형) A 프로그램이 10원에서 50원을 추가했고 (절차형) B 프로그램은 10원에서 10원을 제거했다

근데 B프로그램에서 10원에서 10원을 뺀 상태를 업데이트 해버리면, 상태가 덮어씌워져 버려서 최종적으로 0원이나 50원이 될수도 있는 상태가 벌어진다

쉽게 말해서,10명이 동시에 한 PSD 파일을 수정하는데, 어떤 폐급이 모든 레이어를 레스터화 해서 저장해버린 사태가...

</aside>

<aside> 💡 예시


장부 내용 덮어쓰기 없음!

장부에 값을 적으면 새로운 값이 추가가 될 뿐. 어제 줄의 내용은 동일함

장부에 값을 적으면 새로운 값이 추가가 될 뿐. 어제 줄의 내용은 동일함

새로운 내용을 추가해도 열 내용은 변하지 않는다 즉, 상태가 변하지 않음

모든것이 상수, 재귀함수로만 이루어짐

</aside>

그럼 C#은 무슨 언어일까?