primitive / reference type

똘이주인·2021년 5월 18일
0

Primitive type(기본형) - 변수에 값 자체를 저장

종류 byte / short / int / long / float / double / char / boolean / void

모두 첫 글자가 소문자

산술 연산이 가능

비객체 타입으로, Null을 가질 수 없는 형태

int a  = null; (X)
int a = 0;     (O)

Reference type(참조형) - 메모리상에 객체가 있는 위치를 저장

참조형은 기본적으로 java.lang.Object 를 상속

또한, 선언한 자료형이 기본형이 아닌경우 참조형이라 보면 된다.

참조형에는  Class, Interface, Arrays 이 있다.

  1. Class Type

    클래스형은 기본형과 다르게 객체를 참조하는 형태

    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.
        }
    }
    
    // b객체의 멤버 변수 값을 바꿨지만 a객체도 같은 객체를 참조하기 때문에 동일한 값을 출력

1 - 1. String Class

참조형에 속하지만 기본적인 사용은 기본형처럼 사용.

일반적으로 기본형 비교는 == 연산자를 사용하지만 String 객체간의 비교는 .equals()메소드 사용

1 - 2. Wrapper Class

Primitive type으로 표현할 수 있는 간단한 데이터를 객체로 만들어야 할 경우

그러한 기능을 지원하는 클래스

public static void main(String[] args) {
        
        Integer a = new Integer(3);
        
        System.out.println(a.MIN_VALUE);
        System.out.println(a.MAX_VALUE);
        
    }
 
// 출력 시..
-2147483648
2147483647

Primitive Type ↔ Reference Type변환

primitive Type에서 Reference Type간에 변환할때

Boxing 과 Unboxing이라고 한다.

public static void main(String[] args) {
        
        Integer a = new Integer(3);
        int b = 3;
        
        Integer c = (Integer) b; // 이것은 boxing
        int d = (int) a; // 이것은 Unboxing
        
        int e = a; // 자동으로 된다!!
        Integer f = b; // 자동으로 된다!!
        
    }

valueOf()와 parseInt()의 차이

// to int i from Integer ii
int i = ii.intValue();

// to Integer ii from int i
Integer ii = new Integer( i );

※ 정수로 파싱할 수 없는 String을 파라미터로 전달하면 에러

2. Interface Type

인터페이스를 만들게 되면 새로운 참조 자료형Reference Data Type을 만드는 것과 같다.

참고로 기존에 있는 자료형의 이름도 만들 수 있습니다(ex:Long).

그리고 인터페이스도 자료형이기 때문에 자료형으로써 자신을 구현한 객체의 주소를 가질 수 있습니다.

하지만 인터페이스에 정의된 메소드만 사용할 수 있음.

3. Array Type

배열은 기본형,참조형으로 만들 수 있다.

자료형에 대해 []를 선언함으로 배열을 지정할 수 있습니다.

참고로 배열형 변수 또한 배열의 주소를 가지고 있는 것이기 때문에 클래스형의 특징과 일치

같은 객체의 주소를 바라보게 만들면 동일한 배열을 가리키게 된다.

그리고 아래 코드의 마지막 라인처럼 [][]등으로 중첩 괄호를 사용하게 된다면 다중 배열로 사용할 수 있다.

public class ArrayType {
    public static void main(String[] args) {
        int [] i = new int[2];
        Long [] l = new Long[2];
        Object[][] o = null;
}

0개의 댓글