2022. 12. 8. 01:41ㆍ자바
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 )
'자바' 카테고리의 다른 글
| static 키워드 (1) | 2022.12.09 |
|---|---|
| 제네릭 (0) | 2022.12.09 |
| try-with-resources문 (0) | 2022.12.08 |
| 입출력 기본 (0) | 2022.12.07 |
| 열거형, 박싱, 어노테이션 (0) | 2022.12.07 |