티스토리 뷰
기계 : 사람이 원하는 작업을 수행하기 위해 동력을 제어하고 관리하는 장치
프로그램 : 사람이 원하는 동작을 기계가 수행할 수 있도록 구체적으로 실행 가능한 명령들을 순서대로 작성한 것
컴퓨터 프로그램 : 컴퓨터를 동작시킬 수 있는 프로그램
-사람이 원하는 작업을 할 수 있도록 명령들을 모아 둔 것
프로그래밍 : 프로그램을 작성하는 작업
코딩 : 컴퓨터가 수행 할 수 있는 암호화 된 코드를 작성하는 것.
프로그램의 좁은 의미와 넓은 의미
좁은 의미
사람이 작업을 수행할 수 있도록 명령어들의 순서를 설계, 작성, 테스트 하는 것.
프로그램 설계, 작성, 테스트
넓은 의미
원하는 작업을 수행하지 못한 경우 오류를 찾는 디버깅, 프로그램 개선, 보완 등의 작업을 포함하는 것.
프로그램 디버깅, 개선 및 보안
언어 : 다른 사람들과 의사소통하기 위한 말과 글
프로그래밍 언어 : 프로그래밍에 사용되는 언어로, 컴퓨터랑 대화하기 위한 언어.
소프트웨어의 정의
어떤 작업을 수행하기 위한 한 개 이상의 프로그램과 데이터들의 집합
일반적으로 프로그램이라고 부르는 것들은 대부분 소프트웨어를 말함.
사람이 원하는 작업을 수행
하드웨어를 동작시킴
다른 소프트웨어에서 사용되는 데이터들을 만들어내는 작업을 수행
소프트웨어의 종류
시스템 소프트웨어
컴퓨터 시스템의 하드웨어를 동작시키기 위한 기본적인 소프트웨어
하드웨어를 운영하는데 필요한 각종 장치 드라이버, 시스템 유틸리티 등
*유틸리티 : 사용자가 컴퓨터 사용을 효율적으로 할 수 있도록 도와주는 sw
응용 소프트웨어
컴퓨터로 다양한 작업을 수행하기 위해 개발 된 소프트웨어
문서 작성, 그림 편집, 웹 검색, 데이터 처리 등의 작업 수행
프로그래밍 소프트웨어 : 컴퓨터 프로그래밍을 위한 소프트웨어로 컴파일러, 디버거, 인터프리터, 링커, 텍스트 에디터 등
통합개발환경(ide) : 프로그래밍 관련 프로그램들을 모두 함께 통합적으로 제공하는 소프트웨어
프로그래밍 언어의 역사
직물제조기를 이용하여 직물의 무늬를 원하는 모양으로 만들기 위해 펀치 카드를 이용
자동 피아노를 연주시키기 위해 건반의 연주 순서가 기록되어 있는 종이 롤 사용
컴퓨터가 만들어진 이후 수많은 프로그래밍 언어가 만들어져 왔으며, 컴퓨터의 계산이나 동작을 기술하기 위한 명령어나 함수 등을 사용하여 편리하게 프로그래밍을 할 수 있게 됨.
현재까지 많이 알려져 있는 프로그래밍 언어는 기계어, 어셈블리어, BASIC,C 등등
프로그래밍의 분류
이해 정도에 따른 분류
저급 언어
기계나 컴퓨터를 통해 바로 실행 시킬 수 있거나 간단히 변환해 실행 시킬 수 있는 프로그래밍 언어
기계어, 어셈블리어
기계어
cpu와 같은 하드웨어들을 직접 동작시킬 수 있는 저급의 프로그래밍 언어
2진 코드와 같은 형태의 명령어 사용
하드웨어에 대해 자세히 알지 못하면 사용하기가 매우 어려움
어셈블리어
기계어와 1대1로 대응 되는 언어로 기계어의 사용을 보다 쉽게 하기 위해 만들어짐
어셈블리어로 작성된 프로그램은 어셈블러 라는 번역 프로그램을 이용하여 기계어 프로그램으로 변환하여 실행.
고급언어
사람이 이해하고 사용하기 쉬운 형태로 발전된 다양한 프로그래밍 언어
고급언어로 작성된 프로그램을 기계나 컴퓨터를 통해 실행시키려면 그에 맞는 명령어들로 변형
사용 목적에 따른 분류
시스템 개발용 언어
시스템 소프트웨어를 개발하는데 주로 사용되는 언어들로 컴퓨터 하드웨어를 직접 동작시키고 제어 할 수 있는 프로그램들을 개발 할 때 사용 하는 언어
운영체제와 하드웨어에 대한 지식을 필요로 하며 c등이 있음
응용프로그램 개발용 언어
운영체제가 설치된 시스템에서 동작하는 응용프로그램을 만들기 위해 주로 사용되는 언어
사용자가 원하는 프로그램을 편리하게 만들 수 있다.
웹 개발용 언어
웹페이지의 작성, 운영, 관리 등을 위해 사용하는 언어
htmL, CSS, JSP, ASP 등등
게임 개발용 언어
게임 개발을 위해 편리하게 사용 될 수 있는 언어와 게임 설계, 개발, 테스트, 유지 관리 등에 사용
범용 프로그램 언어
다양한 목적을 위해 여러 가지 형태로 사용 될 수 있는 프로그래밍 언어
씨나 자바 등 최신 프로그래밍 언어
교육용 프로그래밍 언어
프로그래밍의 언어의 기초를 교육하기 위한 단어
스크래치, 파이썬, 씨, 자바 등
프로그래밍 방법에 따라 분류
절차적 프로그래밍
컴퓨터가 수행 할 수 있는 명령어, 함수, 프로시저, 서브루틴 등을 이용하여 프로그래밍 하는 방법
대부분의 프로그래밍 언어에서 지원
객체 지향 프로그래밍
클래스를 이용하여 객체를 만들고 객체들을 이용하여 프로그래밍 하는 방법
데이터 추상화, 캡슐화 메시징, 모듈화, 다형성, 상속
씨쁠, 씨#, 자바 등
이벤트 기반 프로그래밍
클릭, 드래그와 같은 이벤트를 이용하여 프로그래밍 하는 방법
비쥬얼 배이직, 비쥬얼 씨쁠
데이터 흐름형 프로그래밍
데이터들의 흐름을 나타내는 선들을 연결하여 프로그래밍 하는 방법
랩뷰
프로그램 설계
프로그램을 개발하기 위한 문제 해결과 계획 과정
목적과 조건들을 체계적으로 기술하고 설계
입출력과 처리 방법 등
프로그램 개발
프로그램의 설계의 따라 실제 프로그램을 개발
프로그램의 입출력과 처리를 프로그래밍 언어를 이용해 실제 구현
만들고자 하는 프로그램의 활용 목적과 프로그램이 운영 될 시스템에 따라 적합한 프로그래밍 언어 선택 중요
프로그램 시험
정확히 동작하는지에 대한 테스트와 수정
정상 동작 여부를 다양한 상황이나 입출력 데이터들을 이용하여 검증
프로그램 유지 보수 및 관리
프로그램 개발 후 새로운 기능을 추가하거나 보완하기 위해 프로그램의 기능을 개선하거나 추가하는 과정
체계적인 유지 보수 및 개선을 위해 버전 관리 및 각종 관련 자료를 문서화함
프로그래밍
-주어진 문제 상황을 파악하고, 문제를 해결 할 수 있는 알고리즘을 생각하여 프로그래밍 언어로 구성하는 문제 해결 과정,
프로그래밍 언어를 활용한 문제 해결과정
정확한 결과가 나오는 프로그램이 작성될 때까지 컴파일 텍스트, 디버깅의 작업이 반복되는 과정
1.알고리즘 설계
2.소스 코드 작성
3.실행 파일 변환
4.프로그램 테스트
5.프로그램 디버깅
6.문제 상황 파악
알고리즘
어떤 목적을 수행하기 위한 단계적인 절차
계산 및 처리를 통해 데이터가 다루어지는 구체적인 과정을 의미
시작 단계에서 입력 내용, 준비 상태부터 수행과정에서의 구체적인 계산과 처리과정, 최종 출력 내용까지 구체적으로 표현한 것
알고리즘 표현 방법
구체적인 계산이나 처리 과정인 알고리즘을 표현하기 위해 일반적인 말과 글인 자연어, 순서도, 의사코드, 프로그래밍 언어 등이 주로 사용
알고리즘의 조건
알고리즘은 입력, 출력, 명확성, 유한성의 조건을 만족해야 한다.
알고리즘은 기계를 통한 자동화를 가능하게 한다.
입력 : 외부에서 입력되는 자료가 0개 이상 존재
출력 : 적어도 1개 이상의 결과가 출력
명확성 : 수행 과정이 명확하고 구체적
유한성 : 유한한 시간 내 수행.
알고리즘의 역할
알고리즘은 프로그래밍 언어를 사용해 바로 프로그램으로 구현
효율적으로 설계된 알고리즘은 짧은 시간에 보다 많은 작업을 더 빠르고 정확하게 수행할 수 있다.
순서도
알고리즘을 구체적으로 표현 할 수 있는 가장 간단한 방법 중 하나
도형들과 처리 순서를 나타내는 흐름선을 사용
알고리즘 작성의 원칙
전체적인 처리 과정을 살펴보기 쉽게
다른 사람들이 알아보기 쉽도록 작성
처리과정 단순화
알고리즘 작성 방법
구조적 설계 방법
알고리즘을 명확하게 표현하고 효과적으로 작성하기 위한 방법
순차, 선택, 반복 의 3가지 방법만을 사용하여 알고리즘을 표현하는 설계 방법
컴파일
작성한 소스코드를 미리 지정된 변환 방법과 규칙에 따라 컴퓨터가 실행 할 수 있는 실행 파일로 변환하기 위해서 변환하는 작업
컴파일러
하나의 프로그램을 만들기 위해 여러 개의 소스 코드를 사용할 수 있음
각각의 소스 코드들은 중간 단계의 기계어 코드 집합인 오브젝트 파일로 변환된 후
링커 프로그램에 합쳐져 프로그램이 만들어짐
버그 : 오류
디버그 : 오류를 찾아내 제거
디버거 프로그램
프로그램을 단계적으로 실행하면서 오류를 찾아내어 수정
디버깅중 논리적 오류는 컴파일러에 의해 실행 가능한 프로그램으로 변환되므로 잘못된 결과가 출력 될 수 있다.
# 전처리기
컴파일을 수행하기 전에 먼저 처리
표준 라이브러리 함수 등의 동작을 따로 정의해 놓은 파일
전처리구문 : 헤더파일이 포함된 문장은 메인함수 앞에 작성
메인 함수
프로그램 실행 시 운영체제에 의해서 맨처음 호출
맨 나중에 종료
씨언어는 메인함수를 반드시 하나 이상 가지고 있다
세미콜론 – 연산을 수행하는 문장의 끝으로 인식
return
두 가지 의미
함수를 호출한 영역으로 값 반환
함수 종료
0을 반환 하는 이유 : 프로그램이 실행되면, 운영체제가 제일 먼저 호출하는 함수가 메인함수 인데, 프로그램 종료 시 호출자인 운체에게 o을 반환 한다.
0을통해 정상 종료되었는지 판단함.
'programming > c, c++' 카테고리의 다른 글
[C언어]전처리기의 특징, 헤더 파일 (0) | 2017.12.16 |
---|---|
[C언어 프로젝트]효민타자연습기 (0) | 2017.12.15 |
[C언어] 포인터 장단점, 포인터와 배열의 차이 (0) | 2017.12.14 |
[C언어]정적변수(static), 외부변수(extern), 레지스터변수(register) (0) | 2017.12.14 |
[C언어] 재귀 함수(함수의 재귀적 호출)란? , 피보나치, 팩토리얼 수열 (0) | 2017.12.14 |
- TLS
- exit
- pwable
- srop
- fsop
- glibc
- fastbindup
- pwnable.tw
- stack reusing
- tcache
- 본선가고싶다
- heap
- shellcoding
- hacking
- pwnable
- overflow
- ebp change
- fastbin
- HackCTF
- 해킹
- rt_sigreturn
- SQLi
- FSB
- oob
- codegate
- Total
- Today
- Yesterday