기타 자바 키워드

2022. 12. 8. 01:41자바

728x90

1. transient

자바에서 자원에 관한 특별한 키워드

오브젝트를 디스크에 저장 시 특정 변수를 제외

주로 직렬화 시 특정 값을 은닉하기 위해 사용

직렬화? 오브젝트를 바이트 스트림으로 변환하는 것(다른 자바 시스템에서도 사용할 수 있도록)

->오브젝트를 네트워크로 전송할 때 사용

class T {
transient int a; //변수 a의 값은 저장이 안됨
int b;
}

 

2. volatile //thread safety 보장 위한 키워드

thread safety? 다수 스레드가 접근해도 실행에 문제가 없음

지정된 변수가 스레드에 의해 변경될 수 있음을 표시

두 스레드가 하나의 변수를 조작할 때 지정안하면

->각 스레드는 변수의 복사본을 유지해 변수를 변경해도 실제 값은 변경이 안되고 복사본만 변경

volatile 지정된 변수를 변경 시

-> 스레드가 메모리에 저장된 실제 값을 읽어옴(실제로 값 변경)

 

3. instanceof

런타임에 오브젝트의 타입을 알고 싶을 때 사용

Objref instanceof type

- obfref는 오브젝트의 참조 변수

-type은 클래스 타입

아래 두가지 경우에 대해 true 리턴

-objref가 type 클래스일 경우

-objref가 type으로 자동캐스팅 가능한 경우: 자식에서 부모로

**부모에 자식 대입 ->자동 타입캐스팅 //부모에는 자식이 가지고 있는게 다 있기 때문
자식에 부모 대입->명시적 타입캐스팅 해줘야함//자식에겐 부모가 가지고 있는것 말고도 다른게 있기 때문

class A {

    int i, j;
}

class B {

    int i, j;
}

class C extends A {

    int k;
}

class D extends A {

    int k;
}

class InstanceOf {
    public static void main(String[] args) {
        A a = new A();
        B b = new B();
        C c = new C();
        D d = new D();

        if (a instanceof A)
            System.out.println("a is instance of A");
        if (b instanceof B)
            System.out.println("b is instance of B");
        if (c instanceof C)
            System.out.println("c is instance of C");
        if (c instanceof A)//자식에서 부모로 자동캐스팅 가능
            System.out.println("c can be cast to A");
        if (a instanceof C) 
        //부모에서 자식으로 자동캐스팅 불가(자식에게는 부모에게 물려받은것말고도 다른게 있기때문)
            System.out.println("a can be cast to C");
        A ob;
        ob = d; // A reference to d
        if (ob instanceof D)
            System.out.println("ob is instance of D");
        ob = c; // A reference to c
        if (ob instanceof D) //c가 D로 타입캐스팅 될순 없음
            System.out.println("ob can be cast to D");
        else
            System.out.println("ob cannot be cast to D");
        if (ob instanceof A) //자식에서 부모로 캐스팅 가능
            System.out.println("ob can be cast to A");
        if (a instanceof Object)
        //object는 모든 클래스의 부모클래스이므로 자식에서 부모로 캐스팅 가능
            System.out.println("a may be cast to Object");
        if (b instanceof Object)
            System.out.println("b may be cast to Object");
        if (c instanceof Object)
            System.out.println("c may be cast to Object");
        if (d instanceof Object)
            System.out.println("d may be cast to Object");
    }
}

 

 

4. native

운영체제가 지원하는 native 코드를 사용할 때 사용

예) c/c++로 작성된 외부 코드 사용

자바가 지원하지 못하는 기능이나 성능문제 때문에 필요함

 

5. assert

주어진 조건식에 대해 참이 되는지 검사할 때 사용

예) assert n>0; //n>0이 true가 되어야 assert문 통과

false 시 AssertionError 예외 발생( 단, 런타임에 옵션 줘야함 -> java -ea )

 

728x90

'자바' 카테고리의 다른 글

static 키워드  (1) 2022.12.09
제네릭  (0) 2022.12.09
try-with-resources문  (0) 2022.12.08
입출력 기본  (0) 2022.12.07
열거형, 박싱, 어노테이션  (0) 2022.12.07