본문 바로가기
Computer Science/Java

[Java] 자료형(기본형/참조형/클래스)

by jeomn 2021. 12. 9.

1. Java 자료형

  가. 기본(basic/primitive) 타입:: 8개

    : 미리 정해진 크기, 변수 자체에 값 저장

종류 자료형 크기 범위 값 예시
논리형 boolean 1Bit   true / false
문자형 char 2Byte Unicode a
정수형 byte 1Byte -128~127 1
short 2Byte -32,768~32,767 1
int 4Byte -2,147,483,648 ~ 2,147,483,647
(2의 31승)
1
long 8Byte -2의 63승 ~ (2의 63승-1) 1
실수형 float 4Byte -3.4E-38 ~ 3.4E+38 1.0
double 8Byte -1.7E-308 ~ 1.7E+308 1.0

 

  나. 참조(reference) 타입::1개

    : 미리 정해질 수 없는 데이터의 표현, 변수에는 실제 값을 참조할 수 있는 주소 저장

    기본형이 아닌 자료형은 모두 레퍼런스타입

    용도는 3가지:: 배열/클래스/인터페이스

      1) 배열(Array)에 대한 레퍼런스

        : [ ]를 선언하여 배열 지정, 배열형 변수는 배열의 주소를 가지고 있음

        [ ][ ]처럼 중첩 괄호를 사용하여 다중 배열 가능

1
2
3
4
5
//사용 예시
int[] integerArray = new int[4];    //크기 4의 정수형 배열
char[] charArray = new char[10];    //크기 10의 문자형 배열
 
int[][] twoDimensionalIntArray = new int[4][5];     //크기 4행 5열의 2차원 정수형 배열
cs

 

      2) 클래스(Class)에 대한 레퍼런스

        : 객체를 참조하는 형태, 선언된 객체를 가리키는 변수는 객체 값이 아닌 객체의 주소값을 가지고 있음

        String, Wrapper 등의 자료형은 아래에서 설명

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//사용 예시
class MyObject{
    private int index, number;
    MyObject(int index, int number){
        this.index = index;
        this.number = number;
    }
    public void setNumber(int newNumber){
        this.number = newNumber;
    }
    public int getNumber(){
        return this.number;
    }
}
 
//활용
MyObject obj1 = new MyObject(010);
MyObject obj2 = new MyObject(115);
        
System.out.println(obj1.getNumber());    //result is 10
System.out.println(obj2.getNumber());    //result is 15
        
obj2 = obj1;    //obj1의 값(obj1주소)를 obj2에 복사 > obj2도 ojb1을 가리키게 됨.
obj1.setNumber(35);
System.out.println(obj1.getNumber());    //result is 35 > 변경된 number 값 출력
System.out.println(obj2.getNumber());    //result is 35 > 변경된 값이 출력됨
cs

 

     3) 인터페이스(Interface)에 대한 레퍼런스

        : 인터페이스는 추상 메소드와 상수만 있고, 필드가 없는 클래스와 같음 > 인터페이스를 참조하는 형태

        인터페이스 자체는 객체 생성 불가능, 다만 자료형으로 인터페이스를 구현한 객체를 가리키는 주소값은 담을 수 있음

1
2
3
4
5
6
7
8
9
10
11
//사용 예시
interface MyInterface{
    int index = 10;
    int number = 5;
    
    void setNumber(int newNumber);
    int getNumber(); 
}
 
//구현 클래스: MyInterfaceImpl.class
MyInterface myInter = new MyInterfaceImpl();    //자료형이기 때문에 객체의 주소값을 담을 수 있음
cs

2. Java 기본 패키지 中 

  가. String

    : 문자열 자료형. 스트링 리터럴도 모두 String 객체로 처리됨

    (스트링 리터럴은 자바 내부에서 리터럴 테이블로 특별히 관리하여 동일한 리터럴을 공유

    반면, new String()으로 생성된 문자열은 힙 메모리에 생성됨)

    스트링 객체는 수정 불가능

1
2
3
4
//사용 사례
String str1 = "abcd";    //스트링 리터럴로 String 객체 생성
 
String str2 = new String("abcd");    //String클래스 생성자로 String 객체 생성
cs

  나. StringBuffer

    : 문자열 자료형. 문자열을 저장하는 가변 버퍼 > 저장된 문자열 수정 가능

1
2
3
4
5
//사용 사례
StringBuffer sb = new StringBuffer("abcd");
 
//수정
sb.append("e");     // sb > "abcde"
cs

  다. Wrapper

    : 기본 타입 자료형을 객체로 다루기 위한 클래스::Boolean, Byte, Short, Integer, Long, Character, Double, Float

    기본 타입 값을 문자열로 변환하거나, 문자열을 기본 타입 값으로 변환 가능

    클래스의 많은 메소드가 static 타입 > 클래스 이름으로 바로 메소드 호출 가능

1
2
3
4
5
6
//사용 사례
Integer i = new Integer(100);    //정수 10을 Integer 객체로 객체화
Character c = new Character('a');    //문자 a를 Character 객체로 객체화
 
//변환
int i = Integer.parseInt("1000");    //문자 1000을 정수 1000으로 변환
cs

  라. Collection

    : 배열이 가진 고정크기의 단점 극복, 객체를 삽입/삭제/검색할 수 있는 가변 크기 컨테이너

    ArrayList, LinkedList, Set, Vector, Map 등

    collection은 Generics기법으로 구현됨

    1) Generics

      : Collection클래스의 이름에는 <E>, <K>, <V> 등의 타입 매개변수가 포함되어 표현됨 ex)ArrayList<E>

      E가 아닌 특정 타입(Integer, String 등)을 지정하면, 특정 타입 객체만 저장하는 컬렉션

      특정 타입만 다루지 않고, 여러 종류의 타입으로 사용할 수 있도록 컬렉션을 일반화 시키기 위해 <E>를 사용

      E를 일반화시킨 타입, 제네릭 타입(generic type)이라고 부름

 

참고
황기대·김효수, 명품 Java Programing(개정 3판) ((주)생능출판사, 2017)
박응용, 점프 투 자바 (2021, https://wikidocs.net/book/31)

 

댓글