- 객체지향 프로그래밍 언어
- 운영체제에 독립적이기 때문에, 운영체제에 따라 프로그램을 변경할 필요가 없음
💡 특징
운영체제에 독립적
- 자바로 작성된 프로그램은 OS나 하드웨어가 아닌, JVM하고만 통신함
- JVM은 자바 프로그램으로부터 받은 명령을 OS가 이해할 수 있도록 변환하여 전달함
- 자바는 OS 독립적이지만, JVM은 OS에 종속적이다.
객체지향 언어
- 상속, 캡슐화, 다형성이 잘 적용되어 있음
동적 로딩 지원
- 자바 애플리케이션은 여러 개의 클래스로 구성되어 있음
- 실행 시에 모든 클래스가 로딩되지 않고, 필요한 시점에 클래스를 로딩하여 사용하는 동적 로딩을 지원
- 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일 할 필요 X
- 애플리케이션이 변경되어도 비교적 적은 작업만으로 변경 사항에 대한 처리가 가능
- OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터이다.
자바 코드와 기계어의 중간 단계로,
java
파일로 작성된
자바 코드를 complile하면.class
바이트 코드가 된다.
변수의 타입
기본형과 참조형
- 자료형: 데이터의 종류에 따라 데이터가 저장될 공간의 크기와 저장형식을 정의한 것
- 기본형(Primitive Type)
- 실제 값을 저장
- boolean, char, byte, short, int, long, float, double의 8개로 구성
- 참조형(Reference Type)
- null 또는 객체의 메모리 주소를 저장
- 기본형을 제외한 나버지 타입들은 참조형에 해당
- 참조형 변수를 선언할 때는, 클래스의 이름이 참조변수의 타입이 됨.
종류 | 데이터형 | 크기(byte/bit) | 표현범위 |
---|---|---|---|
논리형 | boolean | 1 / 8 | true 또는 false |
문자형 | char | 2 / 16 | '\u0000' ~ 'uFFFF' (16비트 유니코드 문자 데이터) |
정수형 | byte | 1 / 8 | - 128 ~ 127 |
정수형 | short | 2 / 16 | -32768 ~ 32767 |
정수형 | int | 1 / 8 | -2147483648 ~ 2147483647( -21억 ~ + 21억) |
정수형 | long | 8 / 64 | -9223372036854775808 ~ 9223372036854775807(-100경 ~ + 100경) |
실수형 | float | 4 / 32 | 1.4E-45 ~ 3.4028235E38 |
실수형 | double | 8 / 64 | 4.9E-324 ~ 1.7976931348623157E308 |
1. 논리형
boolean
true
,false
중 하나를 가짐- 주로 논리구현에 사용
- 기본값 : false
2. 문자형char
- 문자를 저장하기 위한 변수를 선언할 때 사용
- 단 하나의 문자만을 저장할 수 있음.
- 특수문자를 저장하고 싶은 경우,
\t
\n
등을 이용- 2byte를 할당 받음.
- single quotation 을 이용해서 만든다.
3. 정수형byte
,short
,int
,long
- 각각 1byte, 2byte, 4byte, 8byte를 할당받음
- 정수형 변수를 선언할 때는 기본적으로 int형을 사용하고, int형 범위를 넘어갈 때만 long을 사용
- byte, short는 성능보다 저장공간 절약을 우선시할 때 사용
4. 실수형float
,double
- 빠른 연산속도나 메모리 절약을 우선한다면 float형을 사용
- 더 큰 값의 범위나 더 높은 정밀도가 필요한 경우에는 double형을 사용
- 실수형 데이터타입에서는 double형 데이터타입이 기본 데이터타입이다.
- 참조 타입은 원시 타입을 제외한 타입들(
문자열
,배열
,열거
,클래스
,인터페이스
)을 말한다.- Java에서 실제 객체는
Heap 영역
에 저장되며 참조 타입 변수는Stack 영역
에 실제 객체들의 주소를 저장하여, 객체를 사용할때 마다 참조 변수에 저장된 객체의 주소를 불러와 사용하는 방식이다.
- 캐스팅(casting)이라고도 부름
- 변수나 리터럴의 타입을 다른 타입으로 변환하는 것
- 서로 다른 타입간에 연산을 수행하는 경우, 연산 전에 형변환을 통해 피연산자들의 자료형을 일치시켜야 함
형변환 방법
- 형변환하려는 변수나 리터럴의 앞에 변환하고 싶은 타입을 괄호와 함께 붙여주면 됨.
- 이 때 사용되는 ( )는 형변환 연산자라고 불림.
double num = 10.2d; float tmp = (float)num; // num의 값은 여전히 10.2d
- boolean을 제외한 기본형들은 서로 형변환 가능
- 기본형과 참조형은 서로 형변환 불가
- 프로그램에서 데이터를 처리하여 결과를 산출하는 것을 연산(operation)이라 한다.
- 연산에 사용되는 표시나 기호를 연산자(operator)라고 한다.
- 연산되는 데이터는 피연산자(operand)라고 한다.
예) 산술연산 +, -, *, /, %
종류 | 연산자 | 우선순위 |
---|---|---|
증감 연산자 | ++, -- | 1순위 |
산술 연산자 | +, -, *, /, % | 2순위 |
시프트 연산자 | >>, <<, >>> | 3순위 |
비교 연산자 | >, <. >=, <=, ==, != | 4순위 |
비트 연산자 | &, |, ^, ~ | ~만 1순위, 나머지는 5순위 |
논리 연산자 | &&, ||, ! | !만 1순위, 나머지는 6순위 |
조건(삼항) 연산자 | ?, : | 7순위 |
대입 연산자 | =, *=, /=, %=, +=, -= | 8순위 |
1. 증감 연산자
- 피연산자의 값을
1씩 증가
또는감소
시키는 연산자- 증감 연산자가 변수 앞에 위치하느냐 변수 뒤에 위치하느냐에 따라 결과 값이 달라진다.
// 증감연산자 ++, -- int x = 10; //int y = x++; // y = x; x = x + 1; int y = ++x; // x = x + 1; y = x; System.out.println("x = " + x); System.out.println("y = " + y);
2. 산술 연산자int x = 1234; System.out.println("x % 7 = " + (x % 7)); // 0 ~ 6 사이의 값을 반환 System.out.println("x % 2 = " + (x % 2)); // 0 ~ 1 사이의 값을 반환, x값이 홀수인지 짝수인지 구분에 유용
3. 시프트(Shift) 연산자
- bit단위의 연산처리를 하며 자료의 가공을 위해 오른쪽 또는 왼쪽으로 이동하여 값에 대한 변화를 일으키는 연산자
// 쉬프트 연산자 >>, <<, >>> int x = 64; // -64; int n = 2; System.out.println("x >> n = " + (x >> n)); // 나눗셈, (x / 2^n) System.out.println("x << n = " + (x << n)); // 곱셈, (x * 2^n) System.out.println("x >>> n = " + (x >>> n)); System.out.println("x >> 34 = " + (x >> 34)); // x / 2^(n % 32) System.out.println("x << 34 = " + (x << 34)); System.out.println("x >>> 34 = " + (x >>> 34));
4. 비교 연산자
- 결과가 항상
true
또는false
인 논리값(boolean)이어야 한다.
5. 논리 연산자
- 피연산자의 값이
true
나false
인 논리 값을 가지고 다시 한번 조건 연산하는 연산자- 논리 연산자의 경우
논리곱(&, &&)
,논리합(|, ||)
연산자가 2가지로 사용이 가능하다. 이들의 사용법은 차이가 있으며, 일반적으로&&
,||
이 연산자를 주로 사용한다.
6. 대입 연산자
- 특정한 상수 값이나 변수 값 또는 객체를 변수에 전달하여 기억시킬 때 사용하는 연산자
7. 비트 연산자
- 피연산자 즉 연산의 대상이 되는 값들을 내부적으로 bit단위로 변경한 후 연산을 수행하는 연산자
8. 조건(삼항) 연산자
- 하나의 조건을 정의하여 만족 시에는 ‘참값’을 반환하고 만족하지 못할 시에는 ‘거짓값’을 반환하여 단순 비교에 의해 변화를 유도하는 연산자
- 피연산자가 3개라 해서 삼항 연산자라고도 부른다.
// 조건 연산자 cond ? true : false char gender = 'F'; System.out.println(gender == 'M' ? "남성" : "여성"); // 어떤 수가 양수, 음수, 영인지 판별하시오. int no = -12; System.out.println(no == 0 ? "영" : ( no > 0 ? "양수" : "음수"));