Part 01. Hello World!
프로그래밍 언어.. 자바는 왜 배우나요?
Last updated
프로그래밍 언어.. 자바는 왜 배우나요?
Last updated
대량의 데이터를 기억하고 연산하는 컴퓨터를 보고 있자면 경외심이 들때가 있습니다. 하지만 컴퓨터는 0과 1밖에 이해하지 못하는데 '사실 내가 더 똑똑한게 아닐까?' 하는 생각을 할 때가 있습니다. Java 언어를 본격적으로 학습하기에 앞서 프로그래밍 언어가 어떻게 발전해 왔는지 간단하게 살펴보고 가겠습니다.
우리는 컴퓨터와 대화하기 위해 눈높이를 낮출 필요가 있었습니다. 그렇지만 우리는 매우 똑똑한 고등 생물...입니다...
48시간은 며칠일까? 180분은 몇 시간일까? 365일은 몇 년일까?
우리는 단번에 2일, 3시간, 1년 이라고 답을 내릴 수 있을 것입니다. 반대로 컴퓨터는 어떨까요? 2진법 밖에 할 줄 모르는 컴퓨터는 10, 24, 60, 365 진법을 한번에 계산하는 우리를 경외하지 않을까요?
대신 컴퓨터는 매우 빠른 속도를 가지고 있습니다. 컴퓨터의 두뇌 역할을 하는 CPU가 3.2GHz 라면 1core 기준 컴퓨터는 1초당 대략 32억번의 연산을 수행합니다.
즉, 컴퓨터는 바보지만 빠르고 정확한 친구입니다. 간단하게 컴퓨터가 어떻게 연산을 하는지 살펴 보겠습니다.
애드삭 전자계산기: 1 + 3 => 01010101 00000001 00001001 유니박 컴퓨터: 1 + 3 => 11011100 00011000 10011000
우리 사람은 1 + 3 이라고 하면 바로 이해하고 계산할 수 있지만 컴퓨터는 이를 0과 1로 표현해야 합니다. 컴퓨터가 이해할 수 있게 '01010101 00000001 00001001' 이렇게 표현이 되는 언어를 우리는 기계어라고 부릅니다.
앞에서 컴퓨터와 대화를 하기 위해 우리가 눈높이를 낮췄다고 했지만 기계어는 사람의 입장에서는 너무 복잡하고 어렵습니다.
그래서 우리는 이를 해결하기 위해 기계 명령어와 일상 용어를 일대일로 매칭하는 기계어와 니모닉의 매칭 코드표를 만들었습니다.
그 매칭 코드표를 ‘어셈블리’ 라고 불렀습니다. 그리고 CPU 마다 실행할 수 있는 기계어가 달랐기 때문에 어셈블리어도 다르게 만들어졌습니다. 추가로 어셈블리어를 기계어로 번역해 주는 소프트웨어는 ‘어셈블러’ 라고 불렀습니다.
”더하기를 의미하는 기계어 01010101 에 매칭 되는 어셈블리의 니모닉은 add 라고 정하자! “ ⇒ ex) add 1, 3
어셈블리어의 등장으로 많은 개발자들이 편해졌지만 아직 더 개선되어야 할 점이 있었습니다.
애드삭 어셈블리어 개발자가 유니박 어셈블리어 프로그래머로 이직을 하려면 유니박용 어셈블리어를 다시 배워야 했습니다.
이를 해결하기 위해 어셈블리어 이후 많은 언어들이 등장했지만 다음으로는 우리 모두가 알고 있는 C언어의 등장을 보겠습니다.
어셈블리어로 개발을 할 때는 같은 작업을 수행하는 소스 파일을 각 기계의 종류만큼 만들어야 했지만 C언어의 등장으로 이제는 소스파일을 단 하나만 만들어도 되는 시대가 되었습니다.
C언어는 하나의 소스파일을 각 기계어 에 맞는 컴파일러로 컴파일을 하여 기계어 목적파일을 만들기 때문에 개발자는 소스파일이 동작하는 기계에 상관없이 개발이 가능해 졌습니다.
즉, C언어는 하나의 소스만 작성하면 모든 기종의 컴퓨터에서 실행이 가능합니다.
물론 C언어는 어셈블리어와 비교하면 이상적인 상황이지만 운영체제들은 각각의 특성이 존재하기 때문에 C언어를 컴파일 하기전에 각 기종별로 소스코드를 수정할 필요가 있습니다.
short는 int 보다 크지 않은 정수
long은 int 보다 작지 않은 정수
풀어서 설명하자면 어떤 운영체제는 int 타입을 2바이트로 인지하고, 다른 어떤 운영체제는 int를 4바이트로 인지한다는 뜻입니다.
어셈블리어로 개발할 때와 비교하자면 매우 편해졌지만 아직도 개선할 점이 있었습니다.
Java는 ‘객체지향 언어’ 입니다. 객체지향? 아직은 생소하거나 이해가 되지 않겠지만 이는 차차 알아보도록 하겠습니다!
C에 객체지향 개념을 도입한 C++ 이라는 언어도 존재하지만 Java 와는 결이 다릅니다. 객체지향 언어의 중심에는 클래스(Class)가 있습니다.
C++은 클래스 없이도 개발이 가능하기 때문에 객체지향지원 언어라고 부르기도 합니다.
반대로 Java는 클래스 없이는 개발이 불가능 합니다. Java는 개발의 시작과 끝 모두 클래스에서 시작하고 클래스에서 끝나게 됩니다.
프로그램이 시작하는 main() 메서드로 예를 들어보자면 C++은 클래스와는 별개로 존재할 수 있지만 Java는 무조건 클래스 내부에 존재해야 합니다.
그럼 Java의 장점에 대해서 한번 이야기 해보겠습니다.
Java는 단 하나의 소스 파일로 모든 기종의 컴퓨터에서 실행이 가능합니다.
아마도 "그럼 C언어랑 같은 거 아니야?" 라고 대부분 생각 하셨을 겁니다.
C언어와의 차이를 이해하기 위해서 추후에 JVM 에 대해서 학습하겠습니다.
니모닉 이란? 비유법, 다른 유사한 것에 빗대어 잘 모르는 것을 설명하고자 하는 방법을 뜻합니다.
컴파일 이란?
컴퓨터는 0과 1만 이해할 수 있습니다. 우리가 인간의 언어 즉, 자연어를 컴퓨터에 입력하더라도 이것을 0과 1로 이루어진 이진코드로 해석해야 합니다.
사람이 이해하는 언어를 컴퓨터가 이해할 수 있는 언어로 바꿔주는 과정.
주어진 언어로 작성된 컴퓨터 프로그램을 다른 언어의 동등한 프로그램으로 변환하는 과정.
우리가 작성한 원시코드를, 컴퓨터가 이해할 수 있는 목적코드로 번역하는 과정.
이와 같은 컴파일의 기능을 수행하는 것을 컴파일러라고 부릅니다.