본 내용은 POSTECH '청년 AI · Big Data 아카데미 온라인 기초과정'을 수강하며 정리한 내용입니다.
Ⅰ 컴퓨터 개요
<문제 해결 (problem solving)>
문제 입력 → | 문제 해결 (problem solving) → | 해결 출력 |
문제 해결 방법과 절차 : 알고리즘 |
- Computational Thinking
- 컴퓨터 과학의 이론, 기술, 도구를 활용하여 현실의 복잡한 문제 해결
- 컴퓨터 공학 사고력
- 주어진 문제를 분석, 이해하고 문제의 해결 방법을 컴퓨터 공학의 원리를 적용하여 알고리즘을 도출하고 컴퓨터가 이해하는 프로그래밍 언어로 제시하는 사고능력
- 일반적 문제 해결과 컴퓨터 공학적 문제 해결
일반적 문제 해결 | 문제 이해 및 분석 | 문제해결방안 탐색 | 해결방법 도출 | 실행 및 평가 | |
컴퓨터공학적 문제 해결 | 컴퓨터공학 원리 적용 | 알고리즘 설계 | 알고리즘 구현 | 결과 검토 |
- 컴퓨터 공학의 원리 적용
- 데이터 수집, 자료 분석, 데이터 표현, 문제 분석, 추상화(일반화 정의 설계), 알고리즘과 절차, 자동화, 시뮬레이션
- 문제 해결 방법의 설계 (알고리즘 설계)
- 분할 정복 (divide and conquer) 알고리즘 : 어떤 문제를 해결하는 알고리즘에서 원래 문제를 성질이 똑같은 여러 개의 부분 문제로 나누어 해결하여 원래의 해를 구하는 방식
- 의사 코드 (pseudo code) : 일반적인 언어로 코드를 흉내 내어 알고리즘을 써놓은 코드
- 순서도 (flow chart) : 여러 종류의 상자와 화살표를 이용해 명령의 순서(알고리즘)를 보여주는 도형
<컴퓨터와 자료 표현>
- 컴퓨터 : 전자적으로 계산을 수행하는 장치
- 프로그램 : 컴퓨터가 수행할 작업을 지시하는 명령어들의 집합
- 하드웨어 : 컴퓨터를 구성하는 물리적인 장치 (device)
- 소프트웨어 : 컴퓨터가 수행할 작업을 지시하는 명령어들의 집합 (문서 포함)
- 시스템 소프트웨어 : 운영체제, 컴파일러
- 응용 소프트웨어 (앱) : 워드 프로세서, 게임
- 자료표현 원리 : 2진수(binary)체계, 전기신호(ON→1, OFF→0)
- 비트(bit) : Binary Digit, 0과 1로 정보를 표현하는 정보의 최소 단위
- 바이트(byte) : 연속된 8개의 비트(256개), 문자를 표현하는 단위, KB-MB-GB-TB-PB-EB-ZB-YB
- 컴퓨터와 사람의 의사소통
- 문자 코드 : N비트의 조합에 일정한 문자를 할당하여 지정한 것, 국제 표준인 문자코드는 아스키코드, 유니코드
- ASCII : 국제적인 표준으로 사용하는 문자 코드 체계, 7비트를 사용하여 128개의 문자, 숫자, 특수문자 코드 규정
- ASCII에서 대문자A = 1000001(65), 소문자a = 1100001(97)
<프로그래밍 언어 종류>
- 프로그래밍 언어
- 사람과 컴퓨터가 의사소통을 하기 위해 만든 언어
- 사람이 컴퓨터에게 지시할 명령어를 기술하기 위해 만들어진 언어
- 프로그래밍 언어 종류
- 저급언어(Low Level Language) : 기계어(binary로 구성), 어셈블리어(기계어를 기호화, 신호화) → 사람이 처리하기 어려움
- 고급언어(High Level Language) : C, C++, Java, Python → 사람이 보기 편함
- 컴파일러 : 고급언어로 작성된 프로그램 → 기계어 번역
- 어셈블러 : 어셈블리언어로 작성된 프로그램 → 기계어 번역
- C (1972) by 데니스 리치
- 유닉스 운영체제 작성 위해 시스템 프로그래밍 언어로 설계
- 컴파일러나 수많은 소프트웨어 도구(Tool)들도 C언어로 개발
- 풍부한 연산자와 데이터형을 가지고 있음 → 범용 프로그래밍 언어로 널리 보급, 응용 소프트웨어 개발에 널리 이용
- C++ (1983)
- 객체지향 프로그래밍(OPP)을 지원하기 위해 C언어가 가진 장점을 그대로 계승하면서 객체의 상속성(inheritance)등의 개념 추가
- Java (1992)
- 자바의 시초는 미국의 SUN사에서 가전제품들을 제어하기 위한 언어에서 비롯
- 객체 지향 프로그래밍 언어
- 분산 네트워크 상에서의 프로그래밍 용이
- Python (1991) by Guido van Rossum
- 플랫폼 독립적
- 인터프리터 언어 : 한 줄씩 기계어로 번역 ↔ 컴파일러 : 소스코드 전체를 기계어로 번역
- 동적 타이핑 언어
- AI 프로그래밍을 위한 많은 라이브러리 제공
- 처음에 C언어로 개발됨
- 스크래치(scratch) (2005)
- MIT 미디어 랩에서 개발한 소프트웨어 교육용 프로그래밍 언어
- 엔트리(entry) (2013)
- 엔트리 교육 연구소에서 개발한 교육용 프로그래밍 언어
<프로그래밍 개발 환경>
- 프로그램 : 컴퓨터에게 어떤 일의 수행을 지시하는 명령어들의 집합(실행파일, hello.exe)
- 프로그램 개발에 필요한 도구 : 에디터, 컴파일러, 링커, 디버거
- 에디터(editor)
- 소스코드를 작성할 수 있는 문서편집기
- 메모장에 소스코드 작성 후 hello.C로 저장하면 C파일이 됨
- 소스 파일 : 프로그래밍 언어의 명령어들로 작성된 파일
- 소스 코드 : 프로그래밍 언어로 작성된 명령어들
- 실행파일 생성 및 실행 과정
소스파일 hello.C |
→ | 목적파일 hello.obj |
→ | 실행파일 hello.exe |
→ | 메모리 | → | 실행 |
컴파일러 | 링커 | 로더 |
- 컴파일러(compiler)
- 에디터로 작성된 소스코드를 기계어로 번역해주는 프로그램
- Turbo C, GNU C(gcc)
- 다양한 운영체제에서 C 컴파일러 사용 가능
- 링커(linker)
- 번역된 여러 목적 코드(번역된 명령어/기계어)를 하나로 묶어주는 역할
- 디버거(debugger)
- 프로그램 오류를 수정하는 도구
- 명령을 줄 단위로 실행하고 결과 확인 가능
- 통합개발환경
- 에디터, 컴파일러, 링커, 디버거 기능을 모두 제공하는 프로그램
- visual studio(VS), Dev C++
- 웹 기반 컴파일러(online compiler)
- 컴파일러 설치없이 웹 브라우저에서 다양한 언어의 컴파일 지원
'PROGRAMMING > C' 카테고리의 다른 글
[POSTECH MOOC] 컴퓨터공학 입문Ⅱ - 2 (0) | 2021.04.06 |
---|---|
[POSTECH MOOC] 컴퓨터공학 입문Ⅱ - 1 (0) | 2021.04.06 |
[POSTECH MOOC] 컴퓨터공학 입문Ⅰ - 4 (0) | 2021.04.05 |
[POSTECH MOOC] 컴퓨터공학 입문Ⅰ - 3 (0) | 2021.04.05 |
[POSTECH MOOC] 컴퓨터공학 입문Ⅰ - 2 (0) | 2021.04.05 |
댓글