자바 언어의 특징
1. 운영체제에 독립적이다.
: 자바가상머신(JVM)을 통해서 가능한데, 자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM하고만 통신하고 JVM아 자바 응용프로그램으로부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달한다.
2. 객체지향언어이다.
: 객체지향 프로그래밍 언어 중의 하나로 객체지향 개념의 특징인 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향언어이다. 재사용성과 유지보수의 용이성 등 많은 장점을 가지고 있다.
3. 자동 메모리관리(Garbage Collection)
: 자바로 작성된 프로그램이 실행되면, 가비지컬렉터가 자동적으로 메모리를 관리해주기 때문에 프로그래머는 메모리를 따로 관리하지 않아도 된다.
4. 네트워크와 분산처리를 지원한다.
: 다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원한다.
5. 멀티쓰레드를 지원한다.
: 일반적으로 멀티쓰레드의 지원은 사용되는 운영체제에 따라 구현방법도 상이하며, 처리 방식도 다르다. 그러나 자바에서 개발되는 멀티쓰레드 프로그램은 시스템과는 관계없이 구현이 가능하다. 그리고 여러쓰레드에 대한 스케쥴링을 자바 인터프리터가 담당하게 된다.
6. 동적 로딩(Dynamic Loading)을 지원한다.
: 보통 자바로 작성된 애플리케이션은 여러 개의 클래스로 구성되어 있다. 자바는 동적 로딩을 지원하기 때문에 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다는 장점이 있다.
JVM(Java Virtual Machine)
"Write once, run anywhere"(한번 작성하면 어디서든 실행된다.) 즉 어느 기기, 또는 어느 운영체제 상에서도 실행될 수 있게 하는 것과 프로그램 메모리를 관리하고 최적화하는 것이 기본 기능이다. 코드를 실행하고 해당 코드에 대해 런타임 환경을 제공하는 것 또는 프로세스 가상 머신으로 정의한다. JVM의 실행을 통해 힙(Heap)과 스택(Stack)의 메모리 사용을 확인한다.
- 가비지 컬렉션(Garbage Collenction)
자바 이전에는 프로그래머가 모든 프로그램 메모리를 관리했으나, 자바에서는 JVM이 프로그램 메모리를 관리한다. JVM은 가비지 컬렉션이란 프로세스를 통해 메모리를 관리하며, 이 가비지 컬렉션은 자바 프로그램에서 사용되지 않는 메모리를 지속적으로 찾아서 제거한다. 가비지 컬렉션은 실행 중인 JVM 내부에서 일어난다.
[참고]
JDK - 자바 개발 도구(Java Development Kit)
JRE - 자바 실행 환경(Java Runtime Environment), 자바로 작성된 응용프로그램이 실행되기 위한 최소환경
JDK = JRE + 개발에 필요한 실행파일(javac.exe: 자바 컴파일러(자바소스코드 -> 바이트코드) 등)
JRE = JVM + 클래스라이브러리(Java API)
변수의 타입
: 변수란?값을 저장할 수 있는 메모리 공간을 말한다.
자료형
: 값의 종류에 따라 값이 저장될 공간의 크기와 저장형식을 정의한 것이 자료형이다.
자료형에는 문자형(char), 정수형(byte, short, int, long), 실수형(float, double) 등이 있다.
자료형은 크게 '기본형(primitive type)' 과 '참조형(reference type)' 두 가지로 나눌 수 있는데, 기본형 변수는 실제 값을 저장하는 반면, 참조형 변수는 어떤 값이 저장되어 있는 주소(memory address)를 값으로 갖는다. 자바는 C언어와 달리 참조형 변수 간의 연산을 할 수 없으므로 실제 연산에 사용되는 것은 모두 기본형 변수이다. 참조형 변수를 선언할 때는 변수의 타입으로 클래스의 이름을 사용하므로 클래스의 이름이 참조변수의 타입이 된다. (예, Date today = new Date(); -> Date클래스 타입의 참조변수 today를 선언한 것)
/**
* @Author : 김소현
* @Date : 2020. 4. 27.
* @Description : 자료형
*/
데이터로 들어가는 것은 자료형, 모자르면 error 이고 남으면 error 아니다. 그렇지만 적절하게 맞는 데이터 타입을 잘 설정해주도록 하자.
컴파일하면 주기억장치 메모리 공간에 올라갔다가 프로그램이 끝나면 메모리 공간에서 내려온다.
- 숫자(정수, 실수)
- 정수 : byte, short, int, long
- 실수 : float, double
- 문자 : (2byte)
- 문자열 : 2byte 이상 참조형 자료형
[참고]
C언어에서는
char *str = "Hello";
printf("%d", str); -> str의 주소값
printf("%s", *str); -> str의 첫번째 문자부터 맨 마지막 널값까지 출력한다.
Oracle의 문자열은 버전별로 앞뒤 문자에 공백이 들어간다. (그래서 크기를 넉넉하게 잡아줘야한다.)
자바의 문자열은 맨 뒤에 공백값(null)이 들어간다.
자바에서 주소값을 비교할 일은 거의 없으므로 문자열 비교에는 equals()를 사용하도록 하자.
스택영역에 할당된다.
new 키워드 => 힙영역에 할당된다.
- 논리형 자료형 : T(1), F(0) 1btye 내부적으로 true는 1로, false는 0 값으로 들어간다.
[참고] 보수표현
십진수를 이진수 숫자로 바꿔라.
이진수 숫자를 십진수로 바꿔라.
즉, 음수면
예) -15이면 14를 이진수로 변환할 때 0으로 채워주고 나머지를 1로 채워진다.
0000 1110 (1을 0으로 바꾸기)-> 1111 0001
/**
* @Author : 김소현
* @Date : 2020. 4. 27.
* @Description : 연산자 우선순위
* 1) 최우선 연산자 : ., [], ()
* 2) 단항 연산자 : !, ~, +/-, ++/--(전위형증감연산자), (cast) 또는 (자료형)
* 3) 산술 연산자 : *, /, %, +, -
* 4) 시프트 연산자 : <<, >>, >>>
* 5) 비교연산자 : <, >, <=, >=, ==, !=
* 6) 논리연산자 : &, ^, |, &&, ||
* 7) 삼항연산자 : 조건식?참:거짓
* 8) 대입연산자 : =, *=, /=, %=, +=, &=, ^=, ...
* 9) 후위형증감연산자 : ++/--
* 10) 순차연산 : ,
*/
- 단항 연산자 : !, ~, +/-, ++/--, (cast) 또는 (자료형)
- 1) 증감연산자
연산자 순서에 의해서 계산이 된다.
- 2) CAST(자료형) 연산자
정수면 정수, 실수면 실수 딱 맞게 써주는 것이 가장 이상적인 경우이다. 연산 결과 범위가 선언한 자료형의 범위를 벗어나서 더 큰 범위의 자료형이 필요한 경우 큰 범위의 변수를 사용하면 된다.
그러나, 예를 들어 정수 + 실수 를 정수형으로 바꿔주는 경우, CAST연산자를 이용한 형변환이 필요하다.
후위연산자보다 + 연산자의 우선순위가 더 높다.
전위연산자가 +연산자보다 우선순위가 더 높다.
형변환
형변환(캐스팅, casting)이란? 변수 또는 상수의 타입을 다른 타입으로 변환하는 것
- 형변환 방법
(타입) 피연산자
double d = 85.6;
int score = (int) d;
자동 형변환
서로 다른 타입간의 대입이나 연산을 할 때, 형변환으로 타입을 일치시키는 것이 원칙이지만 경우에 따라 편의상이 이유로 형변환을 생략할 수 있다. 그렇다고 해서 형변환이 이루어지지 않은 것은 아니고, 컴파일러가 생략된 형변환을 자동적으로 추가한다.
변수가 저장할 수 있는 값의 범위보다 더 큰 값을 저장하려는 경우에 형변환을 생략하면 에러가 발생한다.
자동 형변환 규칙
1. boolean을 제외한 나머지 7개의 기본형은 서로 형변환이 가능하다.
2. 기본형과 참조형은 서로 형변환할 수 없다.
3. 서로 다른 타입의 변수간의 연간은 형변환을 하는 것이 원칙이지만, 값의 범위가 작은 타입에서 큰 타입으로의 형변환은 생략할 수 있다.
- 산술 연산자 : *, /, %, +, -
- 비교연산자 : <, >, <=, >=, ==, !=
- 논리연산자 : & , ^ , | , && , ||
- 삼항연산자 : 조건식? 참: 거짓
- 대입연산자 : =, *=, /=, %=, +=, &=, ^=, ...
'Coding > JAVA' 카테고리의 다른 글
배열(Array)과 클래스(Class) (0) | 2022.04.04 |
---|---|
Scanner로 입력 받기 (0) | 2022.04.04 |
디버깅(Debugging) 방법 (0) | 2022.04.04 |
제어문(조건문 if문, switch문 / 반복문 for문, while문) (0) | 2022.04.04 |
JDK 다운로드 및 Eclipse 설치하기 (0) | 2022.04.04 |