본문 바로가기
PROGRAMMING/C

[POSTECH MOOC] 컴퓨터공학 입문Ⅰ - 1

by 안녕나는현서 2021. 4. 5.
728x90

본 내용은 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)

  • 컴파일러 설치없이 웹 브라우저에서 다양한 언어의 컴파일 지원
728x90

댓글