1. 컴퓨터란?
-> 명령을 수행하는 것이라고 하는데, 내 생각에는 계산기이다.
High Level Language vs Low Level Language
- High로 갈수록 User Friendly Language (고급 언어)
ex) Python
- Low로 갈수록 Machine Friendly Laguage (저급언어, 기계어)
ex) Assembly, C
High Level 언어는 Low Level로 표현 가능하고,
Low Level 언어는 0과 1로 표현 가능하다.
즉 컴퓨터란, 코드를 컴파일러를 통해 저급 언어 0과 1로 변환한 뒤, 계산해서 결과를 보여주는 계산기라고 생각한다.
컴퓨터의 구성 요소
- 프로세서 (중앙처리장치, CPU)
- 메인보드
- 기억장치
-
주 기억장치 (RAM)
- 속도는 빠르지만, 휘발성 메모리로 전기가 나가면 파일 또한 날아간다.
-
보조 기억장치 (SSD, HDD, ROM)
- 속도는 느리지만, 비휘발성 메모리로 전기가 나가도 파일은 살아있다.
- 파워 서플라이
- 전류를 각 장치의 전압과 전류의 세기에 맞게 분배하여 공급해주는 장치.
- I/O
- Input, Output (키보드, 마우스, 스피커, 모니터)
2. 프로그램이란?
-> 매우 구체적으로 작성된 명령 나열, 명령어 집합이다.
프로그램 VS 알고리즘
- 프로그램
- 컴퓨터가 수행할 수 있도록 매우 구체적으로 작성된 명령 나열
- 이를 작성하는 행위를 코딩, 프로그래밍이라 한다.
- 알고리즘
- 어떤 문제를 해결하기 위해 정해놓은 일련의 절차
-> 프로그램이 알고리즘보다 더 구체적이다.
3. 프로그램 설계
건축가 (Architect) -> 집을 어떻게 지을지 설계하는 사람
빌더 (Builder) -> 집을 짓는 사람.
vs
설계 (Design) -> 구조, 알고리즘 구축
구현 (Implementation) -> 프로그램, 코드 구현
- 프로그래밍에 있어서 두 작업 다 해야하지만, 분리해서 사고하는 것이 좋다.
객체 지향 설계 (Object-Oriented Design)
-> 프로그램 설계 방법 중 한가지 방식
특징
- 모든 것이 다 객체이다.
- 객체는 객체 자신의 메서드를 갖는다.
- 화면, 사용자, 프로그램 등 모든것이 객체이다.
객체끼리 주고 받는 메시지를 통해 계산이 수행된다.
(한 노드의 Output이 다른 노드의 Input으로 작용)
클래스 구조도 (Class Diagram)
클래스 (class)
- 객체를 생성하기 위한 툴
- 클래스는 메서드를 지닌다.
클래스 구조도
- 클래스와 클래스간의 흐름을 그려놓은 설계도