본문 바로가기

[책]명품 JAVA Programming

명품 자바 프로그래밍 1장 요약

하드웨어와 소프트웨어

하드웨어: 본인 손으로 만질 수 있는 물질.

소프트웨어: 하드웨어 안에서 작동하는 것. (프로그램)

 

스마트폰(하드웨어)으로 작동하는 소프트웨어를 앱(APP)이라고 부른다.

 

이런 소프트웨어를 작성하는 언어가 프로그래밍 언어 이다.

컴퓨터는 이진수로 이루어진 기계어(machine language)밖에 읽지 못하는데, 우리가 기계어로 프로그램을 작성 할 수 는 없기 때문에 어셈블리어(assembly language)가 만들어 졌다. 어셈블리어는 기계어와 일대일 대응 되는 저급 언어이다. 우리가 이를 마주할 일은 별로 없다고 생각한다..

나아가 우리가 다루기 쉽도록 고급 언어로 발전 했는데 익히 알고있는 절차지향 언어의 대표격인 C언어를 시작으로 지금 우리가 배우는 JAVA와 같은 객체지향 언어로 진화 했다. 그러니까, 자바는 객체지향 언어이다. 이외로 C++, C# 등이 대표적인 객체 지향 언어이다. 파이썬 또한 객체지향을 잘 지원 해준다.

 

프로그래밍 언어의 진화 과정이다.

컴퓨터는 이진수 밖에 읽지 못한다. 그렇다면 자바와 같은 고급 언어로 작성된 프로그램은 어떻게 되는 걸까?

여기서 우리는 자주 들어봤지만 잘 알지 못하는 단어인 '컴파일' 과정이 들어간다.

컴파일이란 우리가 작성한 코드를 기계어 코드로 변환해주는 과정이다. 이때 컴파일러라는 소프트웨어가 필요한데, 각 언어마다 전용 컴파일러가 있다. 자바는 .java -> .class 로 컴파일 되며 클래스 파일은 JVM(Java Virtual Machine)으로 실행 할 수 있다.

 

자바의 태동

자바는 1991 선마이크로시스템스 에서 제임스 고슬링이라는 사람이 만들었다. 기본적으로 메모리 공간이 작은 가전제품에 맞는 언어를 개발한 것이다. 1995년에 SunWorld95 에서 자바라는 이름으로 등판했다. 지금은 오라클이 썬사를 인수해서 오라클이 자바를 제공한다. 지금 웹의 프론트&백엔드 개발이 한국 개발자들의 대부분을 차지하는데 웹 안에서 여러 기능이 구현되도록 하는게 자바랑 딱 들어맞아 웹개발에 자바가 많이 쓰인다. 여담으로 한국정부가 자바코드노동자를 양성해 웹에 쑤셔넣고 있는건 문제라고 생각한다..

 

자바는 JVM이라는 자바 가상기계에서 실행 되는 언어라고 위에서 설명 했다. 그렇기 때문에 특 장점이 있는데, MAC이든 Linux든 Window든 어느 환경에서든 똑같은 코드로 실행 된다는 것이다. 이게 처음에는 잘 이해 안될 수 있는데, 쉽게 말해서 자바는 소스코드를 복사해서 어떤 컴퓨터든 이클립스에다가 붙여넣기 해서 사용할 수 있다는 말이다. 이런 속성을 WORA(Write Once Run Anywhere)라고 부른다.

이를 가능하게 하는것이 JVM과 바이트 코드이다. 자바 컴파일러가 .java를 컴파일 해서 .class라는 파일을 생성하는데 이를 컴파일 과정이라고 했다. 여기서 .class는 바이트 코드로 되어 있는데 이 클래스 파일을 JVM이 인터프리터 방식으로 실행하는 것이다.

*인터프리터 방식: 소스코드를 한줄씩 기계어로 번역해서 실행하는 것. 컴파일 방식은 모두 기계어로 바꾼뒤 실행한다.

 

자바는 여러 자바 파일을 실행 할 때에 한번에 뭉쳐서 실행 하는게 아니라 실행 도중 다른 클래스 파일이 필요한 경우 그때 메모리에 로딩해 사용한다. 위에서 자바는 적은 메모리를 가진 가전제품을 위해 개발된 언어라고 했는데, 이런 방식으로 실행 되기 때문에 메모리를 적게 먹는 것이다.

 

--> 자바는 플랫폼 독립성과 실행의 효율성 등이 본질이다.

 

JDK와 JRE

JDK(Java Development Kit): '개발자'들이 다운로드 받아야 하는 소프트웨어.

JRE(Javae Runtime Environment): '사용자'들이 다운로드 받아야 하는 소프트웨어. 물론 JDK를 받아도 되는데 그럴필요가 있을까?

나는 중학생때 자바라는 언어를 처음 접했는데 마인크래프트 다운로드를 위해 JRE를 다운로드 했다. 그때 공부 시작할걸..

 

자바 API

API(Application Programming Interface)란? 다른 개발자들이 나를위해 미리 만들어 놓은 유용한 자바 클래스들의 집합이다. API는 매우 광범위 하므로 우리는 가져다 쓰기만 하면 된다. 프로젝트를 하다가 뭔가 작성해야 할때 일단 구글링 해보자.나아가 본인이 사용한 것에 조금 관심을 가지고 이해만 한다면 충분히 대단한 개발자가 되지 않을까 싶다. 나는 그렇게 하려고 노력한다.

 

자바 IDE

IDE(Integrated Development Environment)는 통합 개발 환경이다. 소스 코드 편집, 컴파일, 디버깅을 할 수 있다. C를 배웠다면 비주얼 스튜디오를 써봤을 것이고 파이썬이면 파이참을 써봤을 것이다. 자바는 대부분 이클립스를 사용한다. 물론 IntelliJ 라는 다른 자바 IDE도 있는데 나는 이미 eclips에 익숙해져서 조금 써보다 말았다. 둘중에 더 멋져보이는 거로 선택하는게 좋을것 같다. 

 

자바의 특징

여러가지가 있지만 조금 살펴 보자. 위에서 언급한 내용은 뺐다.

클래스로 캡슐화: 가루약을 캡슐에 넣은 알약 처럼 클래스 안에 어려 소스 코드들이 존재하게 했다. 자바는 클래스 바깥에는 그 무엇도 존재할 수 없다. 아래의 첫번째줄은 출력하는 코드 인데 클래스 바깥이라 실행이 안되고 빨간줄이 뜬걸 볼 수 있다.

실행 코드 배포: .jar파일 형태로 압축해서 배포할 수 있다. 나는 자바로 여러 간단한 프로그램을 만들어서 친구들에게 보내봤는데 참 편리하다. 아래는 저장&수정 가능한 추첨 프로그램을 만들어서 배포한 것인데 choose.jar을 launch4j로 exe로 만든 것이다. .jar이 실행 되는 JRE를 가지고 있다면 choose.jar만 배포해도 된다.