<Java 개요>
A언어 : 입,출력 // 문맥
==> B언어 : A언어기능 + 기계식 데이터 타입, 연산기능, methods
==> C언어 : B언어기능 + 자료형 데이터 타입, 자료구조(분류통)
이후에 등장한 것이 Java. C언어의 많은 특징들을 가지고왔다
1990년대에 등장, 어디서나 마시는 커피(Java)처럼 어디서나 동작 가능한 언어
==> 공통 실행환경 필요 : JVM (Java Virtual Machine) -> 운영체제 위에 올리는 토퍼같은것
==> C언어기능 + JVM, 클래스, 객체
Java 장점 : 공통 실행환경의 존재로, 쓰임이 많다. 대표적인 객체지향 언어
안정성이 높다, 보안성이 좋다 컴파일러가 오류를 체크하고, 각종 보안이 들어가있음
커뮤니티가 크다 -> 다양한 개발 도구와 라이브러리 존재
<JVM>
JVM : 자바가 구동될 수 있는 가상의 기기
byte code : Java코드를 운영체제가 읽을 수 있게 .class 코드로 바꾼 코드
compiler : 변환기
interpreter : 운영체제가 읽은 바이트코드를 기계가 실행할 수 있는 기계어로 번역
JIT컴파일러(Just In Time) : 빠른 Java .class 코드 해석기 -> 인터프리터의 효율을 높여준다?
메모리영역 : Java의 데이터를 저장하는 영역 -> 운영체제로부터 JVM이 할당받은 메모리 영역
클래스 로더 : .class 바이트코드를 메모리영역에 담는 운반기
가비지컬렉터(GC) : 메모리영역에서 안쓰는 데이터를 주기적으로 청소
--------JRE, JDK-------
JRE: Java Runtime Environment ==> 자바를 "실행"할 수 있는 환경
JDK: Java Development Kit ==> JRE를 포함하고, .java파일을 .class파일로 변환해주는 Java compiler(javac) 기능이 있음
==> 코드를 디버깅하는 jdb 등의 기능이 있음
지금으로서는 JDK만 알아두고, JDK와 IntelliJ(IDE) 를 설치할 것.
class : .class파일을 만드는 영역. Main 클래스의 이름은 .java파일의 이름과 일치시켜줘야함
public : 제어자. Main class를 public으로 만들어놓으면 어디서든 접근 가능
static : 이 프로그램이 시작될 때, 무조건 실행되는 상태가 된다? (추가공부 필요)
void : output의 타입이 void인 것을 선언. 자바에서는 input과 output의 타입을 선언해줘야한다.
==>void는 출력이 없다는 것을 말함
(String[] args) : input의 타입과 변수명을 선언하고있음
System.out.println("~~") : System이라는 클래스의 out 객체의 println이란 메소드를 실행
<변수와 상수>
--------변수----------
int num; : num이라는 이름의 integer type 저장공간을 선언
String name; : name이라는 이름의 String type 저장공간을 선언
int num = 10; : 선언과 동시에 10이라는 값으로 "초기화"
int num; 이후 num = 10 : 선언을 해놓고 나중에 값을 대입
--------상수----------
final int num = 10; : final이라는 키워드를 추가하여 상수로 선언
num = 20; : 상수는 값 변경이 안되기 때문에 에러가 난다.
--------변수의 타입----------
1.기본형
=> int, char, string, boolean etc....
=> string은 "쌍따옴표로 감싸고" // char은 '작'은 따옴표로 감싼다
=> 정수형 변수
byte byteNumber = 127; // byte 는 -128 ~ 127 범위의 숫자만 저장 가능합니다.
short shortNumber = 32767; // short 는 -32,768~32,767 범위의 숫자만 저장 가능합니다.
int intNumber = 2147483647; // int 는 -21억~21억 범위의 숫자만 저장 가능합니다.
long longNumber = 2147483647L; // long 은 숫자뒤에 알파벳 L 을 붙여서 표기하며 매우 큰수를 저장 가능합니다.
=> 실수형 변수는 float(4byte), double(8byte)
float (4byte) : 3.4 * -10^38 ~ 3.4 * 10^38(long 보다 큼)범위의 숫자 저장이 가능합니다.
double (8byte) : 1.7 * -10^308 ~ 1.7 * 10^308(long 보다 큼)범위의 숫자 저장이 가능합니다.
2.참조형 : 레퍼런스가 있음. 어떤 공간의 주소값을 바라보고 있는 녀석
String, Object, Array, List .... 등 단일공간에 담을 수 없는 값을 저장
배열 선언 방식 : int[ ] arr = {1, 2, 3}
참조형 변수는 주소값을 가진다고 했다. 이상한 값이 나오는 이유는 arr 배열이 시작되는 메모리 주소값을 주기 때문.
따라서 값을 출력하려면 Java에서 제공하는 Arrays 유틸리티의 toString 메소드를 사용해야한다.
*참고 : Stack영역은 주소값을 저장, Heap 영역은 원본 값을 저장. 참조형 변수의 경우 Stack에 주소값이 있고, 이를 참조하여 Heap의 저장공간에 접근함. Heap은 동적으로 할당된 메모리 영역이기 때문에 크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장함. Stack은 정적으로 할당된 메모리 영역이므로 크기가 몇 byte인지 정해져있는 기본형 변수를 저장. 참조형변수의 주소값은 크기가 정해져있기 때문에 Stack에 저장된다.
숫자형 변수타입의 크기 순서 : byte(1) -> short(2) -> int(4) -> long(8) -> float(4) -> double(8)
3.Wrapper Class : 기본형 변수를 클래스로 한번 wrapping(감싸다) 하는 변수
----boxing----
==> num.methods() : 다양한 메소드를 사용할 수 있다.
----unboxing----
int n = num.intValue() ;
============= 변수 입력받기 ============
import java.util.Scanner ;
Scanner sc = new Scanner(System.in);
int asciiNumber = sc.nextInt(); //입력받는 부분, 변수이름에 대입
char ch = (char)asciiNumber; //입력받은 아스키코드를 문자로 형변환
nextLine().charAt(0); : Line을 입력받고 0번째 char 가져옴
** 형변환 하는 방법 : (char)변수이름 // (int)변수이름 등등
============= 문자, 문자열 ============
문자 : 기본형 변수, 홑따옴표, 문자 뒤에 \0 (Null문자)가 없다.
문자열 : 참조형 변수(), 쌍따옴표, 문자 뒤에 \0 (Null문자)가 있다. (끝을 알려주기위해)
============= 입력, 출력 ============
Java 프로그램은 기본적으로 Scanner.in 객체의 next~~ 메소드를 이용해서 입력을 받음
Java프로그램은 기본적으로 System.out 객체의 print~~ 메소드를 이용해서 출력함
<형 변환>
float, double -> int : 소수점 버려짐
int -> double, float : 소수점 생김
eg)
double doubleNumber = 10.5
int intNumber = (int)(doubleNumber) ===> intNumber : 10
위처럼 (int)같은 타입을 명시해서 typecasting하는 것을 명시적 형 변환이라고 한다.
But, 자동으로 바꿔주는 케이스도 있다.
===========자동으로 형변환되는 경우==========
- int형으로 선언된 변수에 byte자료형을 넣어주면 int로 자동 형변환되어 저장됨
- char타입 값을 미리 선언해놓은 int형 변수에 할당하면 자동으로 아스키코드로 바꿔서 할당됨
- int타입 값을 long 변수에 넣으면 long으로 형변환되어 저장됨
- int타입 값을 double 변수에 넣으면 double로 형변환
===> 작은 크기의 타입에서 큰 크기의 타입으로 할당될 때 자동 형변환이 일어남
===> 마찬가지로, 작은 크기의 type과 큰 크기의 type이 계산이 될 때, 자동으로 큰 크기의 type에 맞춰 형변환되어 계산됨
eg) int + double = double 근데이걸 int에 할당하면 소수점 버려짐
'공부 > Java' 카테고리의 다른 글
Java - 오류 및 예외 처리 // 예외 클래스 구조 // 제네릭 문법 (0) | 2023.04.07 |
---|---|
Java 문법 (4) - 상속관련 super // override // 다형성 // 추상클래스 (0) | 2023.04.05 |
Java 문법 (3) - 생성자 // 제어자 // getter, setter // 상속 // 추상화 //인터페이스 // (0) | 2023.04.05 |
Java문법 (2) - 클래스 // 객체 // 메서드 (0) | 2023.04.05 |
Java 문법 - 연산자 // 반복문 // 배열 // 컬렉션 (0) | 2023.04.04 |