Section1-개발 기초

솜씨좋은 개발자·2022년 6월 24일

Section1

목록 보기
1/18

📖학습목표

  • 컴퓨터의 구성요소 파악

  • 프로그램 실행 시 컴퓨터 내부 파악

  • 프로그래밍과 관련된 개념 파악(언어, 컴파일, 빌드, IDE)


✍컴퓨터의 구성요소

소프트웨어+하드웨어
소프트웨어: 정해진 규칙대로 동작
하드웨어: 입력 받은 데이터를 처리해서 처리 결과를 저장하고 출력하는 장치

📌소프트웨어

소프트웨어는 하드웨어가 어떻게 동작해야 하는지 규정해놓은 명령어의 집합으로, 크게 시스템 소프트웨어와 응용 소프트웨어로 분류된다.

  • 시스템 소프트웨어

    시스템 소프트웨어는 응용 소프트웨어를 실행하기 위한 플랫폼으로, 사용자와 하드웨어를 직접적으로 연결해 사용자의 작업 지시를 컴퓨터에 전달해 주는 역할을 수행한다.

  • 응용 소프트웨어(애플리케이션 및 앱)

    소프트웨어에서 시스템 소프트웨어를 제외한 모든 소프트웨어

📌하드웨어

컴퓨터의 물리적 장치로, 중앙처리장치(CPU), 기억장치, I/O장치(입출력장치)로 분류된다. 그리고, 각 장치는 시스템 버스로 연결된다.

중앙처리장치(CPU, 프로세서)

프로그램(명령어의 집합)의 실행과 데이터 연산을 담당하는 컴퓨터의 핵심장치로, CPU는 제어장치, 연산장치, 기억장치(레지스터)로 구성되어 각 장치의 동작이 연결되어 CPU의 기능을 수행한다.

  • 제어장치
    CPU의 기억장치에 저장되어 있는 프로그램의 명령을 해독하고 그 결과에 따라 데이터 흐름을 관리하며 장치를 제어
    운영체제와 소통하며 컴퓨터의 자원을 관리

  • 연산장치
    제어장치의 제어를 받아 기억장치에 저장되어 있는 명령어을 수행하거나 데이터로 실제 연산을 수행하는 장치

  • 기억장치(Register)
    CPU내의 속도가 아주 빠른 기억장치
    연산장치의 연산에 필요한 데이터들을 임시적으로 보관

기억장치

기억장치는 단기기억장치와 장기기억장치로 분류된다.

단기기억장치 - 주기억장치
장기기억장치 - 보조기억장치
  • 주기억장치
    👉프로그램이 실행되는 동안 필요한 모든 데이터 저장
    👉큰 용량의 데이터 저장할 수 없지만, 읽고 쓰는 속도가 빠름
    👉프로그램이 실행되기 위해서는 주기억장치에 적재되어야 함
    👉CPU가 주기억장치에 직접 접근하기도 하지만 주기억장치가 CPU에 비해 느리기 때문에, 그 속도차를 보완하기 위해 CPU와 주기억장치 사이에 캐시메모리를 위치시킨다.
    👉RAM(Random Access Memory, 휘발성 메모리), ROM(Read Only Memory,비휘발성 메모리)

  • 보조기억장치
    👉데이터의 반영구적 저장
    👉큰 용량의 데이터 저장가능하지만, 읽고 쓰는 속도가 느림
    👉주기억장치보다 속도가 느리기 때문에 CPU와 직접 소통하지 않음
    👉SSD(Solid State Drive), HDD(Hard Disk Drive)

😊기억장치의 계층구조

기억장치는 용량, 속도, 가격에 따라 아래와 같이 분류할 수 있다.

입력장치 (Input Device)

입력장치는 사용자로부터 컴퓨터 내부로 데이터를 입력 받는 장치다. 키보드, 마우스, 마이크, 트랙패드 등이 있다.

출력장치 (Output Device)

입력장치와 반대로, 출력장치는 컴퓨터 내부에서 사용자에게로 사람이 인지할 수 있는 형태로 데이터를 출력해주는 장치다. 모니터, 스피커, 프린터 등이 있다.

시스템 버스 (System Bus)

CPU를 포함한 각 하드웨어 장치 간의 통로
즉, 각 하드웨어 장치를 물리적으로 연결한 전선을 의미하기 때문에 시스템 버스 또한 하드웨어에 포함된다.

👉 시스템버스의 구성

데이터 버스 - 하드웨어 간에 데이터를 전달하는 통로
주소 버스 - 데이터의 목적지에 대한 정보를 전달하는 통로
제어 버스- 제어장치의 제어 신호를 다른 장치로 전달하는 통로

✍컴퓨터의 동작

워드프로그램을 실행시키는 상황을 가정했을 때,
운영체제가 보조기억장치에 저장되어 있던 워드프로그램을 주기억장치인 RAM즉, 주기억장치에 로드(적재)시킨다. 이를 로딩이라고 하는데, 로딩은 CPU가 사용자가 명령한 내용을 실행하기 위해서 보조기억장치에서 주기억장치로 프로그램 파일을 옮겨오는 과정이다.

로딩이 완료되면 워드프로그램이 모니터 상에 출력되는데, 이렇게 실행상태에 있는 프로그램을 프로세스라고 한다. 작업관리자의 프로세스 항목이 바로 프로세스가 메모리에 로드되어 실행 중인 프로그램들을 나타낸 것이다.

이제 키보드 및 마우스와 같은 입력장치를 통해 워드프로그램에 데이터를 입력할 수 있다. '메뉴'라는 모듈을 클릭하면, CPU는 워드프로그램의 소스 코드에 작성된대로 해석하고, 소스 코드에 작성된 명령어들을 실행한다.

명령어실행이 완료되면 컴퓨터는 명령 결과를 주기억장치에 저장하고, 모니터를 통해 출력한다.

✍프로그래밍 관련 개념

📌프로그래밍 언어

컴퓨터는 사람의 언어를 이해하지 못하기 때문에 개발자는 컴퓨터가 이해할 수 있는 언어인 프로그래밍 언어를 사용하여 프로그래밍한다.

컴퓨터의 언어는 기계어다. 아래는 Hello Wolrd!라는 단순한 문자열을 출력하는 기계어 코드인데 보다시피, 기계어는 사람이 이해하기 어렵다.

b8 21 0a 00 00 a3 0c 10 00 06 b8 6f 72 6c 64 a3 08 10 00 06 b8 6f 2c 20 57
a3 04 10 00 06 b8 48 65 6c 6c a3 00 10 00 06 b9 00 10 00 06 ba 10 00 00 00
bb 01 00 00 00 b8 04 00 00 00 cd 80 b8 01 00 00 00 cd 80

그래서 컴퓨터의 언어와 사람의 언어를 매개해 줄 무언가가 필요한데, 그게 바로 프로그래밍 언어다. 모든 프로그래밍 언어는 사람이 이해할 수 있는 언어로 컴퓨터에 세세한 동작을 명령할 수 있도록 만들어졌다. 그래서 우리는 컴퓨터의 언어인 기계어를 이해하지 않아도 비교적 사람의 언어와 가까운 프로그래밍 언어를 사용함으로써, 컴퓨터와 소통할 수 있게 되었다.

아래는 프로그래밍 언어를 통해 컴퓨터에게 “Hello World!”라는 문자열을 출력해달라고 컴퓨터에게 명령하는 코드다.

1 System.out.println("Hello World!");


👉기계어와 같이 컴퓨터에게 가까운 언어일수록 저수준 언어라고 하며, 반대로 Java 및 C언어와 같이 사람과 가까운 언어일수록 고수준 언어라고 한다.

📌컴파일

이렇게 컴퓨터와 사람 모두 이해할 수 있는 프로그래밍 언어를 만들었지만, 프로그래밍 언어는 그저 사람과 컴퓨터의 언어를 매개할 뿐, 컴퓨터는 프로그래밍 언어로 작성된 코드를 이해하지 못한다. 그래서 코드를 작성한 후에 컴퓨터가 코드를 이해하도록 코드를 기계어 코드로 변환해주는 통역사가 필요하다. 이 통역사가 번역하는 과정을 컴파일(Compile)이라고 한다. 컴퓨터는 이렇게 컴파일이 완료된 코드를 이해할 수 있게 된다.

📌빌드

빌드는 작성한 코드를 실행할 수 있는 산출물로 변환시키는 과정을 의미하는데, 이 과정에 컴파일 과정이 포함되어 있다. 컴파일을 마친 코드는 기계어 코드로 번역되어 컴퓨터가 이해는 한 상태다. 하지만 아직 사용자가 소스 코드를 실행할 수는 없다. 프로그램이 실행되려면 .exe또는 .msi 확장자를 가진 실행 파일로 만들어주는 빌드 과정이 필요하다. 빌드가 완료되어야 소스 코드가 비로소 실행시킬 수 있는 하나의 프로그램으로 완성된다.

📌통합개발환경 (Integrated Development Environment, IDE)

IDE는 코드를 작성할 때 사용하는 프로그램으로, 프로그래밍에 필요한 모든 작업을 하나의 프로그램 안에서 처리할 수 있도록 만들어진 프로그램이다. IDE를 사용하면 단순히 코드를 작성하고 편집하는 것뿐만 아니라, 디버깅, 빌드 등의 작업을 하나의 IDE 안에서 할 수 있다. 대표적으로 Visual Studio Code, IntelliJ, Eclipse 등이 있다.

profile
개발의 방으로

0개의 댓글