JDK 의 종류 및 프로그램
J2SE(Java 2(to) Standard Edition) - 일반적인 자바 프로그램을 만들 수 있는 기본 패키지 (콘솔/응용을 포함)
JSEE(Java 2(to) Enterprise Edition) - 엔터프라이즈급 프로그램 만들때사용 .EJB/SERVLET등의 기술사용 (기업용/웹 포함)
J2ME(Java 2 Micro Edition) - 휴대폰등의 소형 시스템에서 사용할 프로그램을 만들 수 있는 패키지
콘솔프로그램 : 결과가 콘솔창에 뿌려짐
응용프로그램 : =윈도우 프로그램(최소,최대,종료버튼이 있는 체제를 생각하면 좋다.)
웹 : 결과가 브라우저에 뿌려짐
모바일 : 결과가 모바일화면(스마트폰)에서 뿌려짐
디렉토리 구조
- bin / binary(2진)
주로 실행파일이 들어있는 디렉토리라고 생각하면 된다. EX) .exe, .dll ...
컴파일러, 인터프리터등
*계산기-> 프로그래밍 버젼으로 변경시, 자동으로 진법으로 계산해준다.
- lib / library
프로그래밍에 필요한 정보등이 들어있음. 갖다쓰는 도구들이라고 생각하면 좋다.
개발툴에 의해 사용되는 파일들 ex) .jar ...
*jre > lib > rt.jar 은 자바에서 사용하는 클래스들이 들어있다.
- jre / java runtime environment 자바실행환경
개발도구를 제외하고 실행에 필요한 최소한의 환경만을 제공.
PATH 변경 (윈도우 기준)
cd.. 또는 dir 을 이용해서 계속 경로를 변경해주기는 번거롭다.
path 변경이 되지않은 상태에서 터미널창에 자바를 찾고자한다면 이런식으로 뜨게된다.
...CMD 화면이라고 가정시
C:\USERS\DARAM > javac -version
//찾을수 없다고 나온다.
C:\USERS\Program Files\Java\bin > javac -version
//찾아진다
현재 javac 의 위치는 C:\USERS\Program Files\Java\bin 폴더에 있기때문에
그 외의 경로에서는 검색이 되지않기때문이다.
밑의 과정으로 path 변경을 해주면, 이제 어느 경로에서 검색해도 javac.exe가 실행될 수 있게된다.
PATH 변경 경로
내컴퓨터 > 속성 > 고급시스템설정 > 환경변수설정 > 시스템변수의 편집 > path에 등록
[위에서부터 순차적으로 검색하므로 순위를 따져서 입력하면 좋다]
환경변수 등록 경로
내컴퓨터 > 속성 > 고급시스템설정 > 환경변수설정 > 시스템변수의 새로만들기 >
JAVA_HOME /
JDK설치한 곳의 주소지정. EX) C:\Program Files\Java\jdk1.8.0_60
-환경변수를 등록하는 이유는 path와는 별개로, 다른 어플리케이션이 JDK에 인스톨된 파일을 찾기위해서
JAVA_HOME을 참조하기때문에 등록하는것이다.
>> 맥북용 경로설정은 따로 포스팅했다.
2020/08/12 - [BACK-END/JAVA] - Mac 에서 자바 path 및 환경변수 설정하기 * 맥에서 JDK 초기설정
자바의 특징
1. 플랫폼 독립성
JVM(java Virtual Machine : 자바가상머신)은 크로스플랫폼이다.
JVM이 프로그램의 바이트코드(.class)를 운영체제에 따라서 자동으로 컴파일해줘서
어떤 운영체제에서든지 하나의 프로그램으로도 실행이 되게하기때문에
플랫폼에 대한 의존성이 없다.
2. 객체 지향언어
>> OOP 에 관한 포스팅은 이곳에서 확인하자
2020/08/19 - [BACK-END/JAVA] - OOP(객체지향 프로그래밍) / 접근지정자
3. 멀티 스레드 지원
대표적으로 자바스크립트는 싱글스레드여서 비동기가 굉장히 중요했다.
4. 자동 메모리 관리
JVM에 가비지콜렉터가 있어 자동으로 메모리를 회수하며,
개발자가 덜 신경을 써도 되기때문에 편리하며 다른 언어보다 안정성이 높은 편이다.
자바의 단점
1. 상대적으로 느리다
실행시 자바가상머신(JVM)을 거쳐야하므로 실행속도가 상대적으로 느린편이다.
대신 어느 운영체제에서든지 하나의 프로그램으로 작동할 수 있다.
2. 예외처리
자바는 예외처리가 잘 되어있지만, 개발자가 하나하나 처리해줘야 하는 단점도 있다.
또한, 다른 언어에 비해 작성해야하는 코드가 긴 편이다.
컴파일+인터프리터의 과정
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello Java"); //println (소문자 l임을 주의하자)
}
}
- HelloWorld : 직접 만든 클래스명. Class명은 대문자로 시작하며, (클래스명).java로 저장
- String, System, Date : rt.jar 에 들어가있는 내장 .class 도구. java.lang이 아닌것은 import 해줘야한다.
import java.util.Date;
//Date가 util항목에 있기때문에 이걸 쓰지않으면 에러난다
public class HelloWorld {
public static void main (String[] args) {
System.out.println("Hello Java");
Date today = new Date();
System.out.print("Today is ");
System.out.println(today); //Today is 오늘날짜 출력
}
}
- Class loader : class파일을 RAM메모리에 로드한다. (휘발성 메모리)
- Verification : 검증과정 (악성코드등을 검사)
- Interpreter : Main 메소드를 찾는다. Main mathod가 없을시 컴파일은 되나, 실행은 되지않는다.
- 컴파일 : 원시코드를 컴퓨터가 쓰는 바이트코드로 변환시켜주는것.
- 인터프리트 : 위에서부터 순차적으로 실행하는 것
... CMD 화면이라 가정시
>javac TestFile.java //컴파일하는 과정
>java TestFile //실행하는 과정 (실제로는 TestFile.class가 생략됨)
여기서 TestFile.java는 원시코드이며
이를 컴파일해서 만들어지는 TestFile.class는 바이트코드이다.
메인의 모든것이 다 실행이되면 프로그램은 종료된다.
즉, 자바는 한번 컴파일을 한 후 인터프리트되며 실행되는 언어라고 생각하면 된다.
+추가
Class loader시 Static 은 메모리에 먼저 할당된다. static이 아닌 다른것들은 인터프리터할때 실행이 된다.
Static(정적멤버)가 먼저 실행되고 만들어지며, 그 외 Instance(인스터스 멤버)는 인스턴스화(객체화)를 해야 메모리에 생긴다. 이 순서의 차이를 잘생각해서 할당해야한다. 생명주기를 더 공부해보자.
프로그램 구조(자바 기본 구조)
package 패키지명; //패키지 선언부
import java.util.Date; //import 선언부
public class HelloWorld { //class 선언부
//하나의 프로그램에는 반드시 main메서드가 있어야함(프로그램 진입점 Entry point)
//특히 콘솔,윈도우 만들때는 반드시 필요함.
public static void main (String[] args) {
System.out.println("Hello Java");
}
}
- package 선언: 클래스나 인터페이스를 종류별로 묶어서 관리하기위한 선언. 무조건 소문자
- import 선언: 필요한 자바클래스들을 가져다쓰기위한 선언.
- class 선언: 클래스에서도 그 안의 Main Method부분은 지역으로 친다. 반드시 하나는 있어야 함.
예제 - 날짜를 다른방식으로 출력하기
import java.util.Date;
import java.text.SimpleDateFormat;
public class TodayScript {
public static void main(String[] args) {
//오늘 날짜 출력하기
Date today = new Date();
System.out.println("Today is ...");
System.out.println(today); // 결과물: Mon Aug 10 13:20:02 KST
//2020-08-10 10:15:12 형식으로 출력해보자
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(dateFormat.format(today)); // 결과물: 2020-08-10 10:15:12
}
}
참고하면 좋은 사이트
1. TIOBE - Ranking site https://www.tiobe.com/tiobe-index/
2. Flutter / dart언어를 사용, Android&IOS Mobile dev 할때 참고해보자 <-> Kotlin
'BACK-END > JAVA' 카테고리의 다른 글
맥(MAC)에서 자바기반 프로그램 설정 세팅 (0) | 2021.02.22 |
---|---|
Stream (0) | 2020.09.16 |
Mac 에서 자바 path 및 환경변수 설정하기 * 맥에서 JDK 초기설정 (6) | 2020.08.12 |
CMD&MAC 명령프롬프트 / JAVA 주석 (0) | 2020.08.11 |
Variable & Constant (0) | 2020.08.10 |
댓글