티스토리 뷰
자바는 컴파일을 한 번하게 되면 -> 컴파일된 클래스 파일로 여러 운영체제에서 실행할 수 있다는 장점이 있다.
즉, 이식성이 높은 언어이다.
- 파이썬과 자바스크립트는 컴파일이 필요 없다.
- 자바는 함수적 스타일 코딩을 지원한다. (람다식)
- 자바는 메모리(주기억장치)를 자동으로 관리한다.
- 이클립스와 STS(Spring Tool Suite)는 주 언어로 JAVA를 이용하여 만들었다.
- 멀티스레드를 쉽게 구현할 수 있다.
- 동적 로딩을 지원한다.
※ 자바의 3가지 영역
- Java SE - Standard Editioin
: 기본 에디션, 자바 프로그램을 실행시키는 JVM 정의
자바 프로그램들이 공통으로 사용하는 개발 도구와 API 정의
구현체 -> JDK
- Java EE - Enterprise Edition
: 서버 애플리케이션 개발 에디션, 웹 개발
구현체 -> WAS (Web Application Server : tomcat, weblogic, jeus, jboss)
- Java ME - Micro Edition
: 임베디드 또는 모바일 장비를 위한 개발 도구와 API 정의, 지금은 사라짐
※ 자바 버전 구분
언어 중점 | 스펙 중점 | 스펙 구현체 |
Java 15 | Java SE 15 |
JDK 15 1. Oracle : 유료, 개방 X, 안정적 2. Open : 무료, 개방해야함 |
Java 11 | Java SE 11 | JDK 11 |
Java 8 | Java SE 8 | JDK 8 |
언어의 버전을 중점 | 스펙은 설계한 내용 이 스펙대로 만들어진 것이 구현체이다. |
※ JRE와 JDK의 차이점
: JRE와 JDK 모두 구현체가 맞는데, JRE는 오로지 실행하기 위한 라이브러리이고, JDK는 JRE에 개발도구가 추가된 개념이다.
JAVA 11 이후부터는 JRE와 JDK가 통합되어서 JRE 개념이 사라졌다. (주의 - JRE 11은 없다!!!)
- 더 자세한 내용은 angelatto.tistory.com/2 여기를 참조해주세요~
cf ) Server JRE - 실행기능 + 좀 더 통계와 관련된 내용이 추가됨
※ JDK 8u251, 8u261, 8u281
(-> 좀 더 안정화 되었다.)
: JDK 8u251 이후로 내용물이 바뀌었다.
이후 라이브러리부터 유료 라이센스로 바뀌면서 일부 라이브러리가 빠져서 이후 버전에서 안돌아가는 것이 있을 수 있다.
따라서 나는 8u251을 다운로드 받아서 사용할 것이다.
※ 오라클 자바 버전 계획
- LTS : 장기 릴리즈, 버그를 관리해주고 업데이트 해주겠다.
지금 자바 11버전이 LTS 버전이다. 현재 15까지 있는데 이것은 오라클이 발표하고 끝이고 업데이트 해주지 않음.
2021년도에 자바 17버전이 LTS 버전이 나올 것이다.
현업에서는 자바 8을 아직까지도 많이 사용하고 있다.
※ 자바 API documentation
docs.oracle.com/javase/8/docs/api/
Java Platform SE 8
docs.oracle.com
※ Spring Tool Suite 기본 내장
- jdk 15
- eclipse 2020.12
- spring 개발 도구 및 라이브러리
cf) eclipse 버전
※ 자바 소스 작성에서부터 실행까지
java.exe 명령어를 실행하면 JVM이 실행되면서 각각의 운영체제에 종속되는 기계어로 변환하여 실행한다.
java.exe 명령어 이후로는 우리눈에 보이지 않는다.
[실습]
1. javac 라는 명령어로 컴파일을 한다. (이때 class 파일이 생성된다 .class 는 바이트 코드 파일이다 )
2. java 명령어로 실행한다.
- 이때 javac는 jdk명령어이고, java는 jre명령어이다. (.exe)
- 이클립스에서는 저장만 하면 자동으로 컴파일 해준다.
컴파일된 바이트 코드 파일은 bin 폴더안에 있다.
[기본(primitive) 타입]
값의 종류 | 기본 타입 | 메모리 사용 크기 |
정수 | byte (-128 ~ 127) | 1byte |
char | 2byte | |
short | 2byte | |
int | 4byte | |
long | 8byte | |
실수 | float | 4byte |
double | 8byte | |
논리 | boolean | 1byte |
[자동 타입 변환 vs 강제 타입 변환]
※ 타입 변환
- 데이터 타입을 다른 타입으로 변환하는 것
: byte <-> int, int <-> double
※ 종류
1. 자동 타입 변환: Promotion (큰크기 타입 <------- 작은크기타입)
: 프로그램 실행 도중에 작은 타입은 큰 타입으로 자동 타입 변환됨
byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
2. 강제 타입 변환: Casting
- 주의 : long은 8byte이고, float은 4byte이지만 float이 long보다 더 크다.
실수형 타입이 정수형 타입보다 크다.
- 주의 : 강제 타입 변환은 원래 값을 잃어버리지 않는 선에서만 의미가 있다.
값은 그대로 유지하고 타입만 변경해야 한다
[실습]
package pr02;
public class exam01 {
public static void main(String[] args) {
/* 정수 타입의 변수 선언과 값 저장
* 보통 int를 많이 쓴다.
* 그 이유는? byte + byte 는 결과는 어차피 int 인데, 그 이유가 byte 에서 int로 변환하기 때문이다.
* */
// byte var1 = 1000; byte는 -128에서 127 범위의 숫자만 저장할 수 있다.
byte var1 = 100;
short var2 = 1;
//int var3 = 20000000000;
long var4 = 2000000000L;
/* 문자 타입의 변수 선언과 값 저장
* 큰따옴표안에는 문자열, 작은 따옴표 안에는 하나의 문자
* */
char var9 = 65;
char var10 = 'A';
System.out.println("var9: " + var9);
System.out.println("var10: " + var10);
/* 실수 타입의 변수 선언과 값 저장
*
* 정밀도 높다 : 숫자를 정밀하게 저장할 수 있다. 소수 이하 자리가 좀 더 많이 저장된다.
* float 보다 double이 정밀도가 더 높다.
*
* 따라서 소수에서 정밀한 숫자 또는 더 큰 숫자를 저장하려면 double을 써라.
* */
float var5 = 2.5f;
double var6 = 2.5;
float var50 = 0.123456789123456789f;
double var60 = 0.123456789123456789;
System.out.println("var50: " + var50);
System.out.println("var60: " + var60);
/* 논리 타입의 변수 선언과 값 저장 */
boolean var7 = true;
boolean var8 = false;
}
}
package pr02;
public class exam02 {
public static void main(String[] args) {
// 자동 타입 변환
byte var1 = 10;
int var2 = var1; // 1byte가 4byte에 저장됨
System.out.println("var2: " + var2);
// 강제 타입 변환
int var3 = 1000;
byte var4 = (byte)var3; // 4byte가 1byte에 저장되지 않음
//byte 를 4등분해서 앞에는 버리고, 뒤에 하나만 인트에 넣는다.
// (byte)의 의미는 byte단위로 쪼개갰다.
System.out.println("var4: " + var4);
//--------------/--------------/--------------
// 자동 타입 변환
int var5 = 10;
double var6 = var5; // 정수를 실수로 넣는 것은 언제든지 가능하다.
long var7 = 10;
float var8 = var7; // 정수를 실수로 넣는 것은 언제든지 가능하다.
// 강제 타입 변환 (실수는 정수보다 항상 큰 범위 )
float var9 = 10.5f;
long var10 = (long)var9; // 실수를 정수에 넣는 것은 안된다.
//--------------/--------------/--------------
// 실수를 정수로 변환
double var11 = 3.14;
int var12 = (int)var11;
System.out.println(var12);
}
}
package pr02;
public class exam03 {
public static void main(String[] args) {
// 1. int 타입 이하의 피연산자의 연산은 결과가 int
byte var1 = 10;
byte var2 = 20;
int var3 = var1 + var2; // 주의 : byte와 byte의 연산의 결과는 int형이다.
// 2. int 타입보다 큰 타입이 연산이 되면 큰 타입으로 결과가 된다.
int var4 = 10;
long var5 = 20;
long var6 = var4 + var5; // long 타입이 들어간 연산은 반드시 결과가 long타입이다.
int var7 = 10;
double var8 = 1.5;
double var9 = var7 + var8;
}
}
package pr02;
public class exam04 {
public static void main(String[] args) {
// 문자열 => 숫자(정수, 실수 )
// 문자열은 String 타입 변수에 저장한다.
String var1 = "10";
System.out.println("var1: " + var1);
// 문자열하고 숫자가 더해지면 문자열 결합
String var2 = var1 + 5;
System.out.println("var2: " + var2);
// 문자열을 정수로 변경해서 연산
int var3 = Integer.parseInt(var1) + 5;
System.out.println("var3: " + var3);
// 문자열을 실수로 변경해서 연산
String var4 = "10.5";
double var5 = Double.parseDouble(var4) + 2.3;
System.out.println("var5: " + var5);
// 숫자 => 문자열
int var6 = 3;
// 방법 1 : 숫자랑 문자열 더하면 숫자는 문자열이 된다.
String var7 = "" + var6 + 0;
// 방법 2 : 숫자를 문자열로 변환
String var8 = String.valueOf(var6) + 0;
System.out.println("var7: " + var7);
System.out.println("var8: " + var8);
}
}
'프로그래밍언어 > JAVA' 카테고리의 다른 글
[JAVA] Call-By-Reference vs Call-By-Value / 인스턴스멤버 vs 정적멤버 / 자바 접근제한자 (0) | 2021.02.22 |
---|---|
[JAVA] 객체지향 개념 / Method vs Function / 클래스 (필드, 메소드, 생성자) (0) | 2021.02.21 |
[JAVA] 배열 복사하는 3가지 방법 / Shallow Copy vs Deep Copy (0) | 2021.02.19 |
[JAVA] Primitive Type vs Reference Type / 타입별 변수의 메모리 저장 위치 비교 / 열거 타입(Enumeration type) (0) | 2021.02.17 |
JVM은 무엇이며 자바 코드는 어떻게 실행하는가. (0) | 2020.11.16 |
- Total
- Today
- Yesterday
- 백준
- 자바스크립트Promise
- nunjucks
- 정적멤버
- 클래스와객체
- sequelize.fn
- 사용자정의예외클래스
- jre
- method와 function
- 인스턴스멤버
- @functools.lru_cache
- 익명자식객체
- Git
- 자바스레드
- 자바빌드도구
- java
- 자바스크립트Call-back
- es6모듈
- ES6
- os
- @functools.singledispatch
- 생성자필드메소드
- jdk
- 메이븐 저장소
- 객체지향개념
- @functools.wraps
- dynamic-project
- 백준2206 파이썬 풀이
- nodejs
- yarn start
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |