되자!백엔드개발자

Java(자바)를 시작하기 전에 알아두면 좋은 지식 본문

개발공부/JAVA

Java(자바)를 시작하기 전에 알아두면 좋은 지식

HyunJng 2022. 7. 9. 18:56

이 글은 황기태,김효수 지음 [명품 JAVA Programming] 책을 참고하여 작성했다!!

학교에서 자바를 배울 때 이 책으로 배웠기 때문에 선택하였고 18년도에 발행한 책을 참고했는지라 앞으로 쓸 글에서 자잘한 오류가 있을지도 모른다. 그렇다고 책 또 사긴 아까워서ㅠㅠ 걍 이걸로 공부하고 직접 프로그래밍 하면서 수정해갈 예정이다. 그러니 틀린 것이 있다면 댓글로 알려주시길~~


 

기계어(Machin language)와 어셈블리어(Assembly language)


컴퓨터의 CPU는 이진수인 0과 1밖에 이해하지 못한다는 것은 알 것이다. 이렇게 0과 1로 구성된 언어를 기계어라고 한다. 그렇다고 우리가 0과 1로 직접 코드를 짜는 것은 너무 비 효율적이니 기계어의 각 명령을 ADD, SUB같이 사람이 이해하기 쉽도록 일대일로 대응시킨 것을 어셈블리어라고 한다.

ex) 고급언어(Java) : 3 + 5    /   어셈블리어 : ADD 3, 5   /   기계어 : 1011111

 

+) 왜 컴퓨터는 기계어를 쓸까?(중요 X)

반도체가 트랜지스터로 되어있기 때문이다. 트랜지스터는 역치전압(대충 7V?)을 기준으로 0과 1 두가지 상태만 가능하다. 

즉, 16GB 컴퓨터는  16 * 10 ^ 9 * 8 개의 트랜지스터를 가진 컴퓨터라는 뜻

 

 

프로그래밍 컴파일과 실행


우리가 C/C++, JAVA와 고급 언어로 소스(source)파일을 작성하는 것을 프로그래밍이라 한다. 앞서 말했듯이 컴퓨터의 CPU는 기계어만 이해할 수 있으므로 이 소스파일을 기계어로 변환하는 컴파일(compile)과정이 필요하다. 각 언어마다 전용 컴파일러(compiler)가 있으며 소스파일의 확장자와 컴파일 후 확장자 또한 각 언어마다 다르다. C언어의 경우 소스파일의 확장자는 .c, 컴파일 후는 목적파일(.obj), 링크 과정을 통해 이것을 연결하여 실행파일(.exe)를 만든다.(밑에 추가 설명 有)  JAVA의 경우 소스 파일의 확장자는 .java이며 컴파일 후 .class파일로 컴파일 된다.

 

 

 

C/C++과 JAVA의 차이점(1)


뜬금없이 왜 C/C++과 비교하냐 하면 JAVA가 나온 이유가 이 차이점에 있기 때문이다. C/C++등 자바 이전의 프로그래밍 언어들은 컴파일러로 기계어 코드로 변환할 때 프로그램이 실행될 대상 컴퓨터의 CPU와 운영체제에 종속적인 코드로 변환된다. 즉, 다른 플랫폼에서 실행되려면 다시 컴파일 하든지 플랫폼에 맞도록 코드를 수정해야하는 것이다. 이것을 플랫폼 종속성이라고 한다. JAVA는 이 플랫폼 종속성을 극복하기 위해 개발되었고 반대말로 플랫폼 독립성(WORA: Write Once, Run Anywhere)을 가졌다고 한다. 이를 가능하게 하는 것이 자바가상기계(JVM)와 바이트코드다.

 

 

JVM(Java Virtual Machin:자바가상기계)와 바이트코드


.java인 소스코드를 작성하고 컴파일을 하면 .class파일이 생성되고 이것이 바이트코드이다. 바이트 코드는 기계어 중 하나로 컴퓨터의 CPU에 의해 직접 실행되지 않고 자바가상기계가 인터프리터 방식으로 실행한다.

 

그렇다면 .class파일은 exe파일과 동일할까? 정답은 아니다. 모든 프로그램들은 exe파일이고 .JVM은 class파일을 실행할 때에 exe파일로 바꿔준다. 이 점 덕분에 어떤 플랫폼이든 자바 가상 기계만 존재하면 바로 실행이 가능하여 플랫폼 독립성을 가질 수 있다. 다만 이 때문에 JAVA는 C/C++보다 실행 속도가 느리다는 단점이 있다.

 

 

C/C++과 JAVA의 차이점(2)


C/C++은 소스파일(.c)를 작성하여 컴파일을 하면 목적파일(.obj)가 생성되고 링커가 이를 연결하여 실행파일(.exe)를 생성한다. 조금 더 자세히 살펴보면 링커는 여러 목적파일을 연결할 때 소스코드에서 호출한 C/C++라이브러리 함수들을 찾아 이 함수의 목적 코드를 라이브러리 파일에서 꺼내 실행파일에 삽입한다. 예를 들자면 내가 printf() 함수를 사용한 소스파일이 있다면 컴파일하여 목적파일이 만들어지고 이걸 실행파일로 만들 때 printf()가 들어있는 C라이브러리에서 관련 목적파일을 가져와 실행파일에 삽입하는 것이다. 그렇기에 실행파일에는 실행에 필요한 모든 코드가 다 들어있어 이것만 있으면 실행에 아무 문제가 없다. 또한 용량이 매우 커서 실행되는 컴퓨터의 메모리파일이 충분해야한다.

반면에 JAVA는 링크과정이 없다. 자바 가상기계가 클래스파일을 실행하면 다른 클래스 파일이나 자바 API의 클래스 파일이 필요할 그 순간에 그 클래스 파일을 로딩하고 실행한다. 그렇기에 용량이 적고 적은 양의 메모리를 가진 컴퓨터도 무리없이 큰 자바 응용 프로그램을 실행할 수 있다. 

 

 

JDK(Java Develop Kit)와 JRE(Java Run Enviroment)


JDK(Java Development Kit) = JRE + 개발도구(compiler)

- 자바 프로그램을 개발하고 실행하기 위해 설치한다.

JRE(Java Runtime Enviroment) = JVM + 표준 클래스 라이브러리(JAVA API)

- 자바 프로그램을 실행할 떄만 필요하다.

 

 자바API는 개발자들이 사용하기 편하도록 미리 만들어 놓은 유용한 자바 클래스들의 집합이다. 예를 들면 println, Scanner과 같은 함수를 사용할 있는 것이 이 API가 있기 때문이라고 이해하면 된다. 

 

JDK를 깔면 다음과 같은 파일이 설치된다.

  • bin 파일 : exe파일들이 모여있다. 여기에 java와 javac(compiler)도 확인할 수 있다.
  • include파일 /lib 파일 : 헤더파일(.h)이 모여있다. exe과 h파일로  JAVA가 C로 만들어진 언어라는 점을 다시 확인해볼 수 있다.

자바만 설치하면 메모자이나 cmd에서 개발이 가능하다. 하지만 여기서는 오타가 날 확률도 쉽고 들여쓰기도 작성자가 주의해서 해야하기 때문에 매우 불편하다.

 

 

 

IDE(Integrated Develop Enviroment)


IDE란 뜻 그대로 소스코드 편집, 컴파일, 디버깅을 한꺼번에 할 수 있는 통합개발환경(소프트웨어)이다. Visual Studio나 이클립스(Eclipse)를 많이 사용한다. 나는 둘다 깔려있긴 한데 자바를 다룰 때는 이클립스를 많이 사용한다.

이클립스로 프로젝트 생성 시 만들어지는 파일들

이클립스로 자바 프로젝트를 생성하면 다음과 같이 파일들이 생성된다.

  • bin파일: binary의 줄임말로 컴파일 뒤 .class파일이 여기에 저장된다.
  • src파일: source의 줄임말로 내가 자바언어로 작성한 코드가 여기에 저장된다.
  • .classpath파일: 안에 들어가보면  org.eclipse.jdt.core.prefs가 들어있는데 이게 컴파일러에 대한 정보라고 한다. eclipse를 사용하면 자동으로 생성되는 파일이다.
  • .project파일
    : 이건 프로젝트 개념을 알아야한다. 우리가 이클립스에서 프로그램을 작성하기 앞서 프로젝트(project)를 생성한다. 실제로 개발을 진행할 때 코드 뿐만 아니라 사진이나 영상 등 다양한 리소스를 사용하게 된다. 이런 리소스 파일들과 클래스 파일들을 일괄적으로 관리하기 위한 개념이라고 생각하면 된다.
    이클립스 공홈에 들어가면 .project에 대한 설명으로 아래와 같이 설명되어있는데
    When a project is created in the workspace, a project description file is automatically generated that describes the project.  The purpose of this file is to make the project self-describing, so that a project that is zipped up or released to a server can be correctly recreated in another workspace.
    즉, 이 프로젝트가 생성되면 자동적으로 이 프로젝트를 설명하는 파일이 생성되고 프로젝트가 서버에서 풀리거나 압축이 풀렸을 때 다른 작업환경에서도 올바르게 작동할 수 있도록 만들어주는 파일이란다.

.project파일은 사실 아.. 그냥 그렇구나... 하는 정도로 이해하고있다.

 

아직 복잡한 것을 작성 안해봐서 내 경우는 이정도만 나왔는데 훗날 이외의 추가적으로 파일이 생성되면 아래 블로그에 몇가지 설명되어있으니 참고하시길

https://alklid.tistory.com/1012

 

project 자동생성 파일들은 소스관리에 포함해야 하나..

STS(Spring Tool Suites)에서 svn/git 등을 통해 커밋할때, 프로젝트의 자동생성된 파일들을 소스관리에 포함해야 하나에 대한 의견 팀내에서 동일한 IDE(현재 STS)를 사용하는 경우에 대한 의견입니다. 다

alklid.tistory.com

 

 

 

 

자바와 자바스크립트와 JSP(Java Server Page)


간혹가다 이 세개 모두 자바가 들어가서 같은 언어라고 착각하는 사람이 있는데 아니다! 자바 스크립트는 컴파일이 없이 HTML 페이지에 소스 형태로 내장되어있다. 자세하게는 모르는데 페이지를 동적으로 만들어주는데 사용한단다.

JSP는 웹 섯버에서 실행되는 스크립트 언어로 실행 전에 컴파일 되어 서블릿이라고 불리느느 자바 코드로 변환되어 실행한다.