Data Type
자바에는 기본형 (Primitive Type)과 참조형 (Reference Type)이 있다.
Java Data Type
ㄴ Primitive Type
ㄴ Boolean Type(boolean)
ㄴ Numeric Type
ㄴ Integral Type
ㄴ Integer Type(short, int, long)
ㄴ Floating Point Type(float, double)
ㄴ Character Type(char)
ㄴ Reference Type
ㄴ Class Type
ㄴ Interface Type
ㄴ Array Type
ㄴ Enum Type
ㄴ etc.
Primitive Type
기본형은 다음과 같은 특징을 가진다.
- 자바에서 기본 자료형은 반드시 사용하기 전에 선언 (Declared) 되어야 한다.
- OS에 따라 자료형의 길이가 변하지 않는다.
- 비객체 타입이다 따라서 null 값을 가질 수 없다.
long 타입의 가장 큰 값은 9223372036854775807이다 이보다 더 큰 숫자가 필요하면 BigInteger을 써야하지만 일반적인 오퍼레이터 연산자는 사용할 수 없다. 대신 add, substract, multiply, divide 메소드가 제공되고 매개변수 또한 BigInteger로 받는다.
Reference Type
참조형은 기본적으로 java.lang.Object를 상속 받는다, 또한 선언한 자료형이 기본형이 아닌 경우 참조형이 된다.
Class Type
클래스형은 기본형과 다르게 객체를 참조하는 형태다.
b 객체의 멤버 변수 값을 바꿨지만 a 객체도 같은 객체를 참조하기 때문에 동일한 값을 출력한다. a와 b라는 변수가 가지는 것은 실제 객체가 아닌 객체의 주소고 같은 객체의 주소를 가지고 있기 때문에 어느 한쪽이 변하더라도 값이 동일하다, 연결고리를 끊고 싶다면 어느 하나의 변수에 null이나 new MyObject()를 통해 객체의 주소를 지워버리거나 새로운 객체를 가리키게 하면 된다.
class MyObject{
private int index;
MyObject(int index) {
this.index = index;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
public class ClassType {
public static void main(String[] args) {
MyObject a = new MyObject(2);
MyObject b = new MyObject(4);
System.out.println(a.getIndex()); // "a" result is 2.
a = b;
System.out.println(a.getIndex()); // "a" result is 4.
b.setIndex(6);
System.out.println(a.getIndex()); // "a" result is 6.
}
}
String Class
클래스형에서도 String 클래스는 조금 특별하다. 이 클래스는 참조형에 속하지만 기본적인 사용은 기본형처럼 사용하고 불변하는 immutable 객체다. String 클래스에는 값을 변경해주는 메소드들이 존재하지만 해당 메소드를 통해 데이터를 바꾼다 해도 새로운 String 클래스 객체를 만들어내는 것이다.
일반적으로 기본형 비교는 == 연산자를 사용하지만 String 객체간의 비교는 .equals() 메소드를 사용해야 한다.
Wrapper Class
기본형은 앞쪽에서 서술한대로 비객체이기 때문에 null을 넣을 수 없지만 wrapper class을 활용해서 넣을순 있다.
Interface Type
일반적으로 인터페이스라고 한다면 추상 클래스 abstract class와 많이 비교 되곤 한다.
아래처럼 인터페이스를 만들어서 사용하면 된다. T는 제러닉 타입으로 옵션이다
interface MyInterface<T> {
void add(T value);
}
인터페이스를 만들게 되면 새로운 참조 자료형 Reference Data Type을 만드는 것과 같다. 참고로 기존에 있는 자료형의 이름도 만들 수 있다. (ex:Long) 그리고 인터페이스도 자료형이기 때문에 자료형으로써 자신을 구현한 객체의 주소를 가질 수 있지만 정의된 메소드만 사용할 수 있다.
Array Type
배열형은 기본형으로도 만들 수 있고 참조형으로도 만들 수있다.
자료형에 대해 []를 선언함으로 배열을 지정할 수 있다. 참고로 배열형 변수 또한 배열의 주소를 가지고 있는 것이기 때문에 클래스형의 특징과 일치하다. 같은 객체의 주소를 바라보게 만들면 동일한 배열을 가리키게 된다 또한 [][] 등으로 중첩 괄호를 사용하게 된다면 다중 배열로 사용할 수 있다.
public class ArrayType {
public static void main(String[] args) {
int [] i = new int[2];
Long [] l = new Long[2];
Object[][] o = null;
}
}
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] Comparable과 Comparator : 비교를 위한 인터페이스 (0) | 2024.10.22 |
---|---|
[Java] Collections 클래스 (0) | 2024.10.22 |
[Java] Generic 제네릭 (0) | 2024.10.22 |
[Java] BigDecimal (0) | 2024.09.04 |
[Java] long float의 값 뒤에 L, F을 붙여야 하는 이유 (0) | 2024.09.04 |