JAVA 프로그래밍 언어에서 변수는 다음과 같은 종류가 있다.
# 인스턴스 = 객체
# 필드 = 변수
# 파라미터는 메서드에 추가 정보를 제공하는 변수입니다.
인스턴스 변수 (Instance)
static 키워드 없이 선언된 필드에 개체의 개별 상태를 저장하며 비정적 필드 (Non-Static Fields)라고 한다.
해당 값이 클래스의 각 인스턴스에 고유한 값이기에 인스턴스 변수라고도 한다.
클래스 변수 (Class)
static 키워드로 선언된 필드에 개체의 개별된 상태를 저장하며 정적 필드 (Static Fields)라고 한다.
인스턴스화 횟수에 상관없이 변수의 복사본이 하나만 존재한다는 것을 컴파일러에게 알려준다.
static는 개념적으로 동일한 인스턴스에 같은 값을 적용하므로, 값이 변경되지 않음을 나타내기 위해 final 키워드를
추가할 수 있다.
지역 변수 (Local)
객체의 상태를 저장하는 클래스 변수처럼 메소드는 내부에 임시 상태를 변수로 저장한다.
선언된 지역 변수는 해당 변수가 선언된 메서드 내부에서만 사용이 가능하며, 다른 클래스에선 사용할 수 없다.
지역 변수와 파라미터는 항상 변수로 분류된다.
매게 변수 (Parameters)
파라미터는 항상 필드가 아닌 변수로 분류된다.
변수 명명법
유니코드 문자와 숫자로 이루어진 길이 제한이 없는 시퀀스이다.
하지만 관례적으로 특수문자가 아닌 문자로 시작하며 공백과 예약어, 키워드는 허용되지 않는다.
약어 대신 완전한 단어를 사용하는 것이 권장되며 이는 직관성과 코드 이해성을 증가시킨다.
소문자로 시작하며 2개 이상의 단어는 각 단어의 첫 글자를 대문자로 작성하는 것이 관례적이다.
기본 데이터 타입 (Primitive Data Types)
자바 프로그래밍은 정적으로 타입이 지정되어 있어 변수는 사용전에 반드시 선언되어야 한다.
기본적으로 사용되는 8가지의 기본 데이터 유형은 다음과 같다.
byte | 8비트 부호 있는 2의 보수 정수입니다. 최소 값은 -128이고 최대 값은 127이다. byte 데이터 유형은 메모리를 절약할 수 있는 큰 배열에서 메모리를 저장하는 데 유용할 수 있습니다. |
short | 16비트 부호 있는 2의 보수 정수입니다. 최소 값은 -32,768이고 최대 값은 32,767이다. |
int | 기본적으로 int 데이터 유형은 32비트 부호 있는 2의 보수 정수로, 최소 값은 -231이고 최대 값은 231-1입니다. |
long | 64비트 2의 보수 정수입니다. 부호 있는 long의 최소 값은 -263이고 최대 값은 263-1입니다. |
float | 단일 정밀도 32비트 IEEE 754 부동 소수점이다. |
double | 이중 정밀도 64비트 IEEE 754 부동 소수점이다. |
boolean | 두 가지 값인 true와 false를 가진다. |
char | 단일 16비트 유니코드 문자입니다. |
이 8가지의 데이터 유형외에도 자바 프로그래밍 언어는 java.lang.string 클래스를 통해 문자열에 대한 여러가지의 지원을 제공한다.
기본 값 (Default Values)
일반적으론 기본 값은 컴파일러에 의해 데이터 유형에 따라 0 또는 null로 설정된다.
하지만 이러한 디폴트 값에 의존하는 것은 좋지 않은 프로그래밍 스타일로 간주된다.
Data Type | Default Value (for fields) |
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | '\u0000' |
String (or any object) | null |
boolean | false |
지역 변수는 컴파일러가 초기화되지 않는 지역 변수에는 기본값을 할당하지 않는다.
그렇기에 사용하기 전에 값을 할당해야하며, 초기화되지 않은 지역 변수의 사용은 컴파일 시간 오류를 유발한다.
리터럴 (Literals)
기본 데이터 타입은 클래스에서 생선돈 객체가 아니기 때문에 변수 초기화에 new 키워드가 사용되지 않는다.
리터럴은 고정된 값의 소스 코드 표현으로 계산이 필요하지 않고 직접 코드에 표현된다.
다음과 같이 표현이 가능하다.
boolean result = true;
char capitalC = 'C';
byte b = 100;
short s = 10000;
int i = 100000;
정수 리터럴 (Integer)
정수 리터널이 L 또는 l로 끝나면 long 형이며, 그렇지 않으면 int 형으로 구분된다.
int 리터널은 byte, short, long 유형의 값을 생성할 수 있으며 범위를 초과한 경우엔 long 리터널에서 생성이 가능하다.
10진수 | 숫자 0부터 9까지로 구성된 10진법은 일상적으로 사용하는 숫자 체계입니다. |
16진수 | 숫자 0부터 9와 문자 A부터 F로 구성된 16진법은 0x로 표시됩니다. |
2진수 | 숫자 0과 1로 구성된 2진법은 0b로 표시됩니다. |
# (Java SE 7 및 그 이후 버전에서 2진 리터럴을 생성할 수 있다.)
부동 소수점 리터럴 (Floating-Point)
부동 소수점 리터럴이 F 또는 f로 끝나면 float 형이며, 아닐경우 double 형이 되며 D 또는 d로 끝날 수 있다.
다음과 같이 표현이 가능하다.
double d1 = 123.4;
double d2 = 1.234e2;
float f1 = 123.4f;
d1과 d2는 값이 동일하지만, d2는 과학적 표기법을 사용한 d1이다. e2는 10의 2승을 표현한다.
Character and String Literals
char 과 String 유형의 리터럴은 UTF-16 유니코드의 모든 문자를 사용할 수 있습니다. 에디터와 파일 시스템이 허용하지 않는 경우엔 유니코드 이스케이프로 사용할 수 있습니다.
char 리터널은 단일 따옴표를 사용하며, String 리터널은 이중 따옴표를 사용합니다.
자바 프로그래밍 언어에서는 char 과 String 유형의 리터럴에 대해 몇 가지의 특수 이스케이프 시퀀스를 지원한다.
- \b (backspace)
- \t (tap)
- \n (line feed)
- \f (form feed)
- \r (carriage return)
- \" (이중 인용부호)
- \' (단일 인용부호), 및 \\ (backslash)
null 리터널
기본 타입 데이터 변수를 제외한 모든 변수에 할당할 수 있다.
물론 null 값은 존재 여부 테스트나 어떤 객체가 사용 불가능하다는 표시로 종종 사용된다.
Arrays 배열
배열은 단일 유형의 일정한 개수의 값을 보관하는 컨테이너 객체로 배열이 생성될때 배열의 길이가 결정된다.
생성 후엔 길이가 고정된다.
배열의 각 공간을 엘리먼트(element)라고 하며, 숫자 인덱스로 액세스된다. 인덱스는 0부터 시작된다.
배열 선언은 데이터 타입[] = 배열 변수명;
int[n] = testArray
# 배열 변수명 뒤에 대괄호를 배치해도 되지만 권장되지 않는다.
위 코드에서 배열을 선언하였지만, 실제로 메모리가 할당된 배열이 생성된 것은 아니다.
배열 변수명 = new 데이터 타입[엘리먼트의 수];
testArray = new int[n];
# 배열을 선언하고 생성할 때 대괄호 두개 이상을 사용하여 만들수도 있다.
# 배열 변수명.lenght로 배열의 크기를 알 수 있다.
Copying Arrays
시스템 클래스에는 하나의 배열에서 다른 배열로 데이터를 복사하는데 사용되는 arraycopy 메서드가 있다.
for 구문은 싱글 코어(CPU)이기에 작업이 비효율적이지만, 해당 메서드는 모든 코어를 사용한다.
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
Array Manipulations
자바 SE에서는 사용자에게 배열과 관련된 기본적인 조작 작업을 수행하기 위한 몇 가지의 메서드를 제공한다.
binarySearch | 배열에서 특정 값을 검색하여 해당 값이 위치한 인덱스를 얻는 작업 |
equals | 두 배열을 비교하여 동일한지 결정하는 작업 |
fill | 배열의 각 인덱스에 특정 값을 배치하는 작업 |
sort | 배열을 오름차순으로 정렬하는 작업 |
parallelSort | 배열을 병렬적으로 정렬하는 작업 |
stream | 배열을 소스로 사용하는 스트림을 생성하는 작업 |
toString | 배열을 문자열로 변환하는 작업 |
'자바 튜토리얼' 카테고리의 다른 글
클래스와 객체 (Classes and Objects) [1] (0) | 2024.07.02 |
---|---|
객체 지향 프로그래밍 (Object-Oriented Programming) (0) | 2024.07.02 |
제어 흐름 명령문 (Control Flow Statements) (0) | 2024.07.01 |
표현식(Expressions)과 명령문(Statements), 블록(Block) (0) | 2024.06.28 |
연산자 (Operators) (0) | 2024.06.28 |