프로그래밍 기초
안녕하세요! 정선생이예요. 이번 게시글은 프로그래밍에 대한 기초 이론을 설명해드릴거예요.
이론 설명인데 기초 용어가 없죠? 파고들면 파고들수록 영어 단어장처럼 길어질 것 같아서 이번 게시글에서는 뺏어요. 양해를 바랍니다.( _ _)
그럼 시작할게요.
프로그래밍은 컴퓨터 프로그래밍이라고도 해요. 컴퓨터 프로그래밍은 너무 기니까 프로그래밍이라고 줄여서 말하게된거죠. 그래서 이게 무엇이냐면, 하나 이상의 관련된 추상 알고리즘을 특정한 프로그래밍 언어를 이용해 구체적인 컴퓨터 프로그램으로 구현하는 기술을 말한다. (출처) < 확인은 클릭
아휴 길다. 어려운 단어들도 몇 개씩 보이구요. 간단해요. "프로그래밍 언어를 이용해서 컴퓨터 프로그램을 만드는 일"인거예요. 더 줄여 볼까요? "컴퓨터 프로그램을 만드는 일"이라고 간략하게 설명 할 수 있어요. 주어가 빠지긴 했지만요ㅎ
컴퓨터는 우리의 말(자연어)을 알아듣지 못해요. 아쉽죠? 그럼 뭘 이해 할 수 있나? 0과 1로 이루어진 수. 이진수라고 하죠? 이진수인 0과 1로 이루어진 기계어를 이해 할 수 있어요. 기계어는 "001101011101001 ..." 이런식으로 구성이 되어있어요.
우리가 프로그래밍 언어로 작성한 것은 기계어가 아니기 때문에 기계어로 바꿔주는 통역자 같은 존재가 필요해요. 우리는 그 것을 컴파일러(Compiler)라고 불러요. 영어 원서를 번역자를 통해 한국 번역본이 만들어지는 것처럼 컴파일러는 프로그래밍 언어를 기계어로 번역해주는 번역자 역할을 해요.
프로그래밍 언어의 종류는 크게 3가지로 나눌 수 있어요. 기계어(Machine Language), 어셈블리어(Assembly Language), 고급 언어(High-level Language).
기계어는 위에서 설명했던 것처럼 0과 1로 구성이 되어있고 하드웨어에 종속되어 있어요. 정의를 내리면 특정 컴퓨터의 명령어를 이진수로 표시한 것이되요.
어셈블리어는 기계어에서의 윗단계라고 보시면 되요. CPU명령어를 이진수로 표시하는 기계어와 달리 영어의 약자로 표기를 한 거예요.
무슨 말이냐면, 예를 들어서 00111101 이라는 기계어가 메모리에 있는 값을 이동을 시키는 기계어라고 한다면 기계어로 표현을 하면 항상 [00111101 메모리값d, 메모리값s] 로 표현을 해야해요. 어셈블리어에서는 " 값을 이동 시킨다? 이동이니까 MOVE. 줄여서 MOV라고 하자." 한거예요.
그럼 [ MOV 메모리값d, 메모리값s ] 처럼 표시를 할 수 있다는거죠. 그러니 기계어 보다는 더 높은 수준에서 프로그램을 작성할 수 있겠죠?
추가로 어셈블리어로 작성된 코드를 기계어로 바꿔주는 역할을 하는 것은 어셈블러(Assembler)라고해요.
고급 언어. 우리가 흔히 알고 있는 프로그래밍 언어들이 다 여기에 속한다고 보시면 되겠죠? C, C++, JAVA, FORTRAN, PYTHON, ... 등등 있어요. 여기엔 컴파일러가 존재한다는 걸 알아두셔야해요.
어떠한 일을 할 때는 계획이라는게 존재하잖아요? 예를들어 물을 마신다고 한다면 다음과 같은 비슷한 계획대로 실행을 하겠죠?
①냉장고를 간다 ②냉장고 문을 연다 ③물을 꺼낸다 ④냉장고 문을 닫는다 ⑤컵에 물을 따른다 ⑥물을 마신다
이런 일련의 과정. 이걸 알고리즘(Algorithm)이라고 해요. 프로그래밍을 함에 있어서 정말 중요해요. 너무 추상적으로 정의를 내렸네요.
다시말해서 어떠한 문제를 해결하기 위한 일련의 과정. 어째 추상적 정의보다 더 간단한 것 같네요ㅎㅎ
프로그램의 개발 과정이 존재해요. 마구잡이로 이거했다 저거했다 할수는 없으니까요.
요구사항분석 -> 알고리즘의 개발 -> 코딩 -> 컴파일과 링크 -> 실행과 디버깅 -> 유지보수
어떤 수업이건 이론이 길어지면 재미가 없어지니 딱 여기까지만 하고 마무리를 지을게요.
지루한 이론 읽어주시느라 고생하셨습니다. 그럼 이만 ^^7
제가 글을 올리는 부분은 ' 알고리즘의 개발 -> 코딩 '을 다룰 것 같아요. 추가로 디버깅 정도까지? 앞으로의 내용들 기대해주세요 :)
게시글을 보시다가 궁금한 내용, 이게 맞나? 하는 내용, 이건 틀렸어!하는 내용들은 과감하게 댓글 달아주시면 감사하겠습니다.
이론적인 내용에 대한 궁금증은 검색을 통해 궁금증을 해결하는 것이 좋아요!!
실습적인 내용에 대한 궁금증은 최대한 생각을 해보고 검색을 하는 것이 좋아요!!