1강 ~ 3강. 프로그래밍 언어와 자바
4강. 이클립스 개발 환경 구축
5강. 자바 프로그램 개발 과정
6강. 프로젝트 생성부터 실행까지
1강 ~ 3강. 프로그래밍 언어와 자바
ㅁ 기계어
- 컴퓨터는 기계어만 알아들을 수 있다. 0과 1로 이루어진.
- 사람의 언어인 프로그래밍 언어로 작성한 파일이 소스 파일.
소스파일은 프로그래밍 언어로 작성된 파일을 말한다.
- 컴파일은 소스 파일을 기계어 파일로 번역하는 것.
- 컴파일 하는 SW가 컴파일러.
- JVM은 자바를 실행할 수 있는 환경을 제공하는 SW.
ㅁ 자바
- 안드로이드 게임 애플리케이션도 자바로 만듦.
- 모든 운영체제에서 실행 가능. 한번 작성한 소스 파일로 컴파일을 하면 소스 파일 수정 없이 여러 운영체제에서 실행 가능.
- 객체 지향 프로그래밍. 객체로 프로그래밍을 한다.
- 컴퓨터 메모리를 자동으로 정리한다. 메모리를 수동으로 관리할 필요 없음.
ㅁ 자바 개발 도구(JDK)
- 자바 언어로 SW를 개발할 때 필요한 환경 및 도구를 제공.
- JDK 종류는 Open JDK는 누구나 무료로 사용 가능. 개발 학습용 상업용 모두 무료로 가능.
Oracle JDK는 상업용으로는 사용료 지불. 버전에 따른 버그와 기술지원.
- 학습용으로는 어차피 무료니까 안정적인 Oracle JDK를 사용하는 것이 좋음. 업데이트가 계속 되서 JDK 버그가 많이 개선돼서.
- JDK는 Java 애플리케이션을 개발하고 실행하는 데 필요한 도구와 라이브러리의 전체 모음을 포함하는 개발 환경.
- JDK는 컴파일러뿐만 아니라 개발, 실행, 디버깅, 문서화 등을 지원하는 다양한 도구를 포함한 종합적인 개발 키트입니다.
ㅁ JDK 버전 체계
- Java SE 11.0.2 (LTS) <- 자바 11이후부터 이런 체계
자바 SE는 자바 표준 에디션. 자바 표준 에디션을 구현한게 JDK이므로 Java SE는 JDK라고 생각해도 된다.
11은 주 버전
0은 개선 버전(주버전을 변경하면)(수정이 몇번 됐는지)
2는 업데이트 버전. JDK를 배포하고 업데이트하면. 업데이트 버전이 높을수록 안정적인 버전.
LTS는 장기 지원 서비스 가능한 버전.
- 자바 11부터 open jdk랑 oracle jdk 통합?
ㅁ 강의는 8, 11 다 받고 Java SE 11.0.3 (LTS)로 함.
- 구글링으로 LTS는 안써져 있는데 이걸로 함. 용량은 같음.
- exe와 zip이 있는데 일반적으론 exe는 인스톨러 버전. 자동으로 인스톨러가 설치를 도와줌.
zip은 현직자들이 자바 개발 환경을 구축할 때 자기가 원하는 디렉토리에 JDK 갖다 놓고 쓸 때 씀.
- x64는 64비트용. x86은 32비트용. 자바 11부턴 32비트용은 없음.
- 자바 8은 JDK를 설치하면 JRE도 설치가 됨.
JDK는 개발할 때 쓰는 개발 환경과 도구.
JRE는 이미 개발이 완료된 자바 프로그램을 실행시키기 위해 필요한 거.
사실 공부할 땐 JRE 설치 안해도 됨. 그래도 걍 설치.
- 자바 8의 JDK는 Java SE Development Kit 8 Update 211 (64 bit)
자바 8의 JRE는 JAVA 8 UPDATE 211 (65 bit).
ㅁ 환경 변수 설정
- 환경변수 : 운영체제가 실행하는 데 필요한 정보를 제공해주는 변수를 말한다.
- JDK 설치가 완료되면 그 다음 해야할 일이 환경변수를 설정해야 함.
- 환경변수는 운영체제가 가지고 있는 정보.
프로그램이 실행될 때 일부 정보는 운영체제에서 찾아서 이용을 하는데 그 중 하나가 환경 변수.
- 환경변수는 문자 정보값을 갖고 있는데 대표적으로 어떤 프로그램이 어디에 있다는 경로 정보.
이런 것들이 환경변수에 저장되어서 나중에 프로그램이 운영체제에게 이 프로그램이 어딨는지 물어보면 환경변수를 통해 그 값을 프로그램에게 전달함.
- 우리가 설치한 JDK의 경로를 환경변수에 저장해서 다른 프로그램이 JDK를 찾을 수 있도록 설정한다.
- JAVA_HOME이라는 환경변수를 생성하자.
- 사용자 변수는 지금 로그인한 사용자만 사용 가능. 시스템 변수는 이 PC를 사용하는 누구든지 사용 가능.
ㅁ Path 환경 변수 수정
- path 환경 변수는 명령 프롬포트에서 명령어를 입력할 때 해당 명령어 파일이 어떤 경로에 있는지 알려주는 역할을 함.
- 시스템 변수 path 편집 새로만들기 찾아보기로 bin폴더 클릭.
그리고 명령 프롬포트는 명령어를 찾을 때 위에서 부터 찾기 때문에 맨 위로 올려주기.
자바 컴파일러 2개가 있으면 아래에 있는 경로는 안 씀.
- 윈도우7은 목록으로 안나오고, 텍스트 편집눌렀을 때처럼 텍스트 라인으로 나옴.
이때도 똑같이 맨 앞에 둬주면 됨. 경로 사이엔 반드시 세미콜론.
- C:\Program Files\Java\jdk-11.0.3\bin 대신 %JAVA_HOME%\bin해도 같음.
이렇게 하면 JDK 경로나 버전이 달라질 때 JAVA_HOME의 환경변수만 바꿔줘도 됨. path 안 바꿔도 됨.
4강. 이클립스 개발 환경 구축
ㅁ 복잡한 프로그램을 개발할 경우에는 개발자의 코딩 실수를 줄이기 위해 키워드의 색상 구분, 자동 코드 완성 및 디버깅(debugging : 모의 실행을 해서 코드의 오류를 찾는 것) 기능을 갖춘 소스 편집 툴을 사용하는 것이 좋습니다.
- 기업체에서 가장 선호하는 개발 전문 툴이 이클립스.
ㅁ 이클립스
- 무료 오픈 소스 통합 개발 환경(IDE).
IDE는 프로젝트 생성, 자동 코드 완성, 디버깅 등과 같이 개발에 필요한 여러가지 기능을 통합적으로 제공해주는 툴.
- 기본적으로 자바 프로그램 개발용이지만, 플러그인을 설치하면 웹 애플리케이션 개발, C, C++ 애플리케이션 개발 등 다양한 개발 환경을 구축할 수 있음.
- 학습자 뿐만 아니라 현업에서도 고급 개발자에 이르기까지 광범위하게 사용됨.
- 강의에 맞춰 2019 03 버전으로 다운받음.
Eclipse IDE for Java EE Developers는 웹개발과 다양한 분산 환경(네트워크 환경)에서 자바 프로그램 개발할 때 사용.
Eclipse IDE for Java java Developers는 분산 환경(네트워크 환경)에서 개발할 수 있는 도구들은 제공 안함.
우리는 EE Developers로 받음.
- 관리자 권한으로 실행. 이유는 윈도우에서 응용 프로그램들은 Program Files 폴더에 저장되기 때문에 이클립스도 여기에 설치가 되게 하기 위해서.
- 근데 구버전이라 zip 파일밖에 못찾아서 그걸로 그냥 C:\Program Files에 설치. 그리고 아래 작업표시줄에 끌어다 놓음.
- 워크스페이스. 디렉토리를 설정하면 앞으로 생성되는 프로젝트가 여기에 저장됨.
그리고 이클립스를 실행하고 여러가지 실행 옵션을 설정할 때가 있음. 재시작해도 적용되야하기 때문에 실행 옵션이 워크스페이스 폴더에 저장 됨.
C:\SelfStudyJava 로 설정.
- 퍼스펙티브. 프로젝트를 개발할 때 유용하게 사용할 수 있는 뷰(작은 창)들을 미리 묶어 이름을 붙여놓은 것.
Project Explorer 뷰, Outline 뷰, Markers 뷰 등이 배치된 걸 퍼스펙티브라고 함.
그리고 이렇게 배치된 형태를 자바 EE 퍼스펙티브라고 함. 웹 개발을 한다든지 네트워크 프로그램을 개발한다든지 할 때 주로 사용하는 뷰들을 배치함.
- 근데 학습자들은 자바 EE 퍼스펙티브 보다는 JAVA 퍼스펙티브로 바꿔주는게 좋음.
- 우리에게 꼭 필요한 뷰는 Package Explorer 뷰와 콘솔 뷰.
콘솔 뷰는 없어서 위 메뉴에서 윈도우-쇼 뷰-콘솔 눌러서 추가. 이 두 뷰 말고는 일단 다 닫음.
- 윈도우-preferences-제너럴-어피어런스에서 다크모드.
5강. 자바 프로그램 개발 과정
ㅁ
- 자바 소스 파일은 자바 언어로 작성된 파일.
- 자바 소스 파일(.java)을 javac 명령어를 실행하여 컴파일하면 바이트 코드 파일(.class)이 나옴.
- 근데 바이트 코드 파일은 완전한 기계어가 아니기 때문에 완전한 기계어로 변환해서 실행하는 단계가 필요함.
그 과정에서 사용되는 명령어가 java 명령어.
- java 명령어는 JVM이 기계어를 번역 후 실행하게 함. JVM은 바이트 코드 파일을 기계어로 변환 후 실행하는 역할.
JVM을 구동시키는 명령어가 java 명령어.
ㅁ 바이트 코드 파일과 자바 가상 기계
- 자바 프로그램은 완전한 기계어가 아닌, 바이트 코드 파일(.class)로 구성
- 바이트 코드 파일은 운영체제에서 바로 실행할 수 없음.
- 자바 가상 기계(JVM)가 완전한 기계어로 번역하고 실행.
- 바이트 코드 파일(.class)가 보통 개발 완료된 자바 프로그램 형태.
윈도우에서 java명령어로 실행하면 윈도우용 JVM이 구동됨
리눅스에서 java명령어로 실행하면 리눅스용 JVM이 구동됨.
ㅁ 프로젝트 생성부터 실행까지
- 이클립스에서 실습
[1단계] 프로젝트 생성
[2단계] 소스파일 생성과 작성
[3단계] 바이트 코드 실행
[1단계] 프로젝트 생성
- 상단의 File - New - Java Project
- JRE를 보면 여러분이 설치한 JDK의 버전이 선택되어 있음. 근데 JDK가 아닌 JRE로 표시되는 이유는,
JDK는 개발 도구 및 실행환경을 제공해주는데 그 실행 환경이 JRE다.
여러분이 설치한 JDK의 JRE를 이용해서 이 프로젝트를 실행하겠다는 뜻. 나머지는 건드리지 않고 next.
- 이 프로젝트의 소스파일은 chap01-src에 저장, 바이트코드 파일은 chap01-bin에 저장한다고 나와있음.
- 보통 프로젝트 생성시에는 프로젝트 이름과 JRE를 확인하고 바로 finish를 누름.
- next를 누르면 module-info.java라는 파일을 생성할 거냐고 물어봄.
module-info.java는 모듈 기술자라고 함. 자바11부터는 반드시 module-info.java라는 모듈 기술자를 생성해야 함.
- module-info.java에 들어가는 모듈 이름을 무엇으로 할거냐.
기본적으로 프로젝트 이름과 동일하게 되어있는데 바꿔도 상관은 없음. 그냥 동일하게 chap01로 create.
[2단계] 소스파일 생성과 작성
- 왼쪽의 Package Explorer 뷰에서 src를 오른쪽 클릭 - new - package 누르면 패키지 이름을 정하고 finish.
그러면 패키지 이름으로 정했던 폴더가 생성됨. (sec03.exam01로 함)
- 패키지는 파일 시스템의 폴더와 비슷한 구조를 갖고 있지만 이 패키지는 엄연하게 자바 언어의 한 요소.
자바11에서는 소스파일을 작성할 때 반드시 패키지를 생성하고 그 안에 소스파일을 작성해야 함.
(자바11은 프로젝트 자체가 다른 프로젝트에서 이용될 수 있는 모듈로 활용될 수 있게
반드시 프로젝트 내부에 패키지가 있어야 하고, 그 패키지 안에 소스파일이 있어야 함)
(대부분의 프로젝트는 패키지를 먼저 생성을 하고 그 패키지 안에 소스파일을 저장하는 것이 일반적이기 때문에
자바 8을 사용하는 분들도 이렇게 패키지를 만들고 그 안에 소스파일을 관리하는게 좋겠습니다.)
- 소스파일 생성은 패키지 오른쪽 클릭 - new - class 해서
name에 이름 쓰고 아래의 public static void main(String[] args)를 체크하고 finish하면 이름.java가 생성됨.
- 글자 크기를 키우고 싶으면 Window - Preferences - General - Appearance - colors and fonts - basic - text font - edit에서 수정 가능.
- 폴더 바로 여는 법은 오른쪽 클릭 - Properties - location에서 바로 열 수 있음.
혹은 오른쪽 클릭 - show in - system explorer.
- 패키지 이름에 해당하는 sec03 폴더가 있고, 그 안에 서브 폴더인 exam01이 있음.
- 이클립스는 별도로 컴파일을 위한 메뉴나 버튼을 제공하지 않음. (javac.exe를 직접적으로 사용하지 않음.)
소스코드를 작성하고 저장버튼을 누르면 자동으로 컴파일이 되어 바이트코드 파일이 생성됨.
[3단계] 바이트 코드 실행
- 왼쪽의 Package Explorer에서 소스파일을 선택하고, 상단의 툴바에서 재생버튼 모양의 run을 누르면 실행됨.
- 아니면 왼쪽의 Package Explorer에서 소스파일을 오른쪽 클릭 - run as - java application해도 됨.
(둘 다 소스파일을 직접 실행하는 것은 아니고 소스파일이 컴파일 된 바이트코드 파일을 실행한 결과가 아래의 console뷰에 나오는 것.)
= chap01이라는 프로젝트를 생성했고, sec03.exam01이라는 패키지를 생성했고, 그 안에 Hello.java라는 소스파일을 생성했고, 출력이 될수있게 코드를 작성했고, 저장했고(소스파일을 컴파일해서 바이트코드 파일로), 소스파일을 선택해서 run.
6강. 프로젝트 생성부터 실행까지
ㅁ 이번에는 명령 라인에서 컴파일과 실행.
ㅁ C:\SelfStudyJava\chap01\bin에서 sec03 폴더와 module-info.class 다 삭제.
ㅁ cmd 열고
- cd C:\SelfStudyJava\chap01로 이동
- dir하면 현재 위치의 폴더와 파일들을 보여줌.
.classpath와 .project와 .settings 이런 파일들은 이클립스의 프로젝트에서 자동적으로 생성된 파일이기 때문에 신경쓰지 않아도 됨. bin과 src 폴더만 신경쓰면 됨.
- tree /f하면 현재 폴더의 구조를 보여줌.
ㅁ 컴파일
- JDK 8 이전 버전은
javac -d [바이트코드 파일을 저장할 위치] [소스 경로/*.java]
javac -d bin src/sec03/exam01/*.java
- JDK 11 이후 버전은
javac -d [바이트코드 파일 저장 위치] [소스 경로/module-info.java] [소스 경로/*.java]
javac -d bin src/module-info.java src/sec03/exam01/*.java
(모듈 이름 뒤에 될 수 있으면 숫자 쓰지 말라고 경고뜨는데 상관없음.)
- *.java는 모든 .java를 컴파일하는 것.
- javac로 컴파일하는 것과 javac -d로 컴파일하는 것의 차이는,
javac로 컴파일하면 소스파일과 클래스파일이 같은 디렉토리에 저장.
javac -d로 컴파일하면 소스파일과 클래스파일이 다른 디렉토리에 저장.
특히 패키지 구조에 따라 디렉토리들을 만들고 저장해 줌.
ㅁ 실행
- JDK 8 이전 버전은
java -cp [바이트코드 파일 저장 위치] [패키지이름...클래스이름]
java -cp bin sec03.exam01.Hello
- JDK 11 이후 버전은
java -p [바이트코드 파일 저장 위치] -m 모듈/패키지이름...클래스이름
java -p bin -m chap01/sec03.exam01.Hello
- java 명령어는 클래스패스(classpath)를 자동으로 설정합니다. 기본적으로 현재 디렉토리 및 Java Runtime 환경의 설정에 따라 클래스패스를 설정합니다. 클래스패스는 자바 가상 머신(JVM)이 클래스 파일을 찾는 경로를 지정하는 데 사용됩니다.
- java -cp 명령어는 클래스패스를 명시적으로 설정하며, 클래스 파일이 다른 디렉토리에 있거나 외부 라이브러리를 사용하는 경우에 사용됩니다.
- cp는 클래스패스. bin이라는 폴더가 패키지가 시작하는 클래스 패스라는 뜻.
그리고 뒤엔 실제 실행할 바이트코드 파일이름을 넣는데 반드시 패키지명과 함께 입력해야 함.
- 자바11부터는 p 패스. 뒤에 모듈의 경로가 옴. 모듈의 경로는 모듈 기술자가 있는 경로를 말함.
m은 어떤 모듈이고 그 모듈 안에 실행시킬 클래스는 뭔지.
모듈의 이름은 그런데 모듈기술자의 이름(module-info.java)이 아니고 모듈 기술자를 만들때 만든 이름(chap01)임.
ㅁ 모듈
- 모듈이란 외부에서 재사용할 수 있는 패키지들을 묶은 것.
- 이클립스의 프로젝트는 하나의 모듈을 개발하는 것.
chap01이라는 프로젝트의 안에 있는 모든 것들이 하나의 모듈임.
- 모듈 기술자(module-info.java)는 해당 모듈의 이름이 무엇인지, 해당 모듈이 의존하는 모듈이 무엇인지, 해당 모듈을 외부에서 어떻게 사용할 수 있는지에 대한 내용이 들어가 있음.
ㅁ 의존하는 모듈
- 모듈은 단독으로 실행 가능한 모듈도 있지만 실행되기 위해서 다른 모듈이 필요한 모듈도 있음.
- sec03.exam01 패키지에 있는 Hello.class는 java.base라는 모듈이 필요함.
- 그래서 chap01모듈은 java.base 모듈에 의존한다고 말할 수 있음.
- java.base라는 모듈을 모듈기술자에 쓰지 않았지만 기본적으로 사용 가능함.
- java.se 모듈안에 여러 모듈이 있음. 모듈 기술자에 의존하는 모듈들을 기술하지 않으면 기본적으로 java.base 모듈만 사용 가능. 다른 모듈도 쓰려면 requires로 기술해야 함.
- java.se 한줄로 전체 모듈을 다 쓸 수도 있다.
ㅁ
- Hello.java에 import javax.swing.*;를 추가하면, import javax.swing.*; 빨간색 밑줄이 뜸.
모듈기술자에 requires java.desktop;을 추가해야 컴파일 에러가 발생하지 않음.
- 모듈기술자에 requires java.desktop;을 추가해도 import javax.swing.*;에 노란색 밑줄이 뜨는데,
노란색 밑줄은 이 패키지에 있는 어떤 클래스도 여기에서 사용하지 않고 있다는 뜻으로 오류가 나는 건 아님.
ㅁ 자바 8에는 없던 모듈화가 필요한 이유
- 패키지 보안
자바 8같은 경우는 모든 패키지들이 다 사용가능했어서 어떤 패키지들은 보안상 노출되지 말아야 하는데 노출이 됐었음.
자바 11부터는 개발자가 사용하지 않아야 하는 패키지는 모듈 내부에 숨길 수가 있음.
- 작은 최적의 런타임 이미지를 만들기 위해
자바 8같은 경우는 우리가 만든 Hello 프로그램을 실행시키기 위한 런타임 환경을 구성할 때,
자바 8 전체를 가져와서 Hello 프로그램을 실행해야 함.
자바 8에서 제공하는 JVM과 java.lang, java.sql 등등의 전체패키지의 총 사이즈는 250mb임.
Hello 프로그램은 몇 kb밖에 안되는 데 실행하기 위해 필요한 자바 런타임 환경이 훨씬 커서 비효율적.
자바 11 버전부터는 자바 8에서 제공하던 전체 패키지를 기능별로 모듈화를 해서 필요한 모듈만을 가져와서 씀.
java.base모듈은 약 30mb.
임베디드 같은 작은 소형 기기에 자바 실행 환경을 구성할 때 유리함.
ㅁ Hello.java 소스코드 분석
(1) 패키지 선언
package sec03.exam01;
- package라는 키워드와 Hello.java가 소속된 패키지의 경로가 써져 있음.
- 패키지와 패키지 사이에는 .으로 구분을 하는데 실제 파일 시스템에서는 상위 디렉토리와 하위 디렉토리로 생성이 됨.
(2) 클래스 선언
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, Java");
}
}
- 클래스 선언은 위 전체고, 클래스 선언부는 public class Hello다.
- class는 클래스를 선언하는 키워드고 뒤에는 클래스 이름이 온다.
- 중괄호 { }안을 클래스 블록이라 함.
(3) 메소드 선언
public static void main(String[] args) {
System.out.println("Hello, Java");
}
- 메소드 선언부는 public static void main(String[] args)다.
- 중괄호 { } 안을 메소드 블록이라 함.
- main이라는 이름의 메소드는 자바 프로그램의 진입점(entry point)을 나타내는 특별한 메소드입니다.
이 메소드는 프로그램이 실행될 때 자동으로 호출되며, 프로그램의 시작점에서부터 실행됩니다.
= java hello 하면 바로 main이라는 메소드가 호출되고 main 블록이 실행됨.
ㅁ 주석
- 이클립스는 /* */하면 사이에 * *를 붙여주는데 삭제해도 무방.
- 주석은 컴파일 과정에서 무시되고 실행문만 바이트 코드로 번역됨.
- 실행문은 변수 선언, 값 저장, 메소드 호출에 해당하는 코드를 말함.
실행문 끝에는 세미콜론 ; 을 붙여야 함.
ㅁ 새로운 예제
- 왼쪽의 Package Explorer에서 src 오른쪽 클릭 - new - 패키지. sec03.exam02로 만듦.
-
현재 상태. 패키지가 플랫으로 표시되어 있음.
여기서 Hierarchical을 누르면
이와 같이 sec03 밑에 exam01, exam02 이렇게 수직으로 배치 됨.
- exam02 오른쪽 클릭 - new - class하고 RunStatementExample이라는 이름으로 메인 체크해서 생성함.
ㅁ 소스파일을 이클립스에 불러오기
- 출판사 사이트에서 SelfStudyJava.zip 다운로드 후 압축 풀기. 모든 예제가 들어 있음.
- 이클립스에서 프로젝트를 chap02로 만든 다음, src를 선택하고 우클릭 - paste - 모듈기술자 overwrite하면 됨.
- 프로젝트를 만들지 않고 불러오는 방법은 상단의 File - open projects from file system - import source 옆의 directory 눌러서 SelfStudyJava - chap03을 누르고 폴더선택 - finish.
'혼자 공부하는 자바' 카테고리의 다른 글
혼자 공부하는 자바 (34강 ~ 39강) (0) | 2024.05.29 |
---|---|
혼자 공부하는 자바 (27강 ~ 33강) (0) | 2024.05.28 |
혼자 공부하는 자바 (20강 ~ 26강) (0) | 2024.05.26 |
혼자 공부하는 자바 (13강 ~ 19강) (0) | 2024.05.24 |
혼자 공부하는 자바 (7강 ~ 12강) (0) | 2024.05.23 |