10. static, final, 다형성
10.1 static
10.1.1 static
정지상태, 고정적인, 변화가 없는
static의 반대말: dynamic
10.1.2 static member
static variable(정적 변수)
어디서든 공유해서 사용할 수 있는 변수
static method(정적 메서드)
10.1.3 static member의 특성
프로그램이 실행되면 메모리(클래스 영역)에 자동으로 로딩됨
프로그램이 끝날 때까지 메모리에 상주함
static method에서는 static member만 사용 가능함
10.1.4 dynamic member의 특성
프로그램 실행 중에 필요할 때 만들어지고 필요없으면 삭제됨
stack, heap 영역에 저장됨
10.2 JVM(Java Virtual Machine)의 구조
10.2.1 JVM의 구조
1. Java Source
2. Java Compiler
3. Class Loader : 클래스의 내용을 메모리에 로딩하는 기능
4. Execution Engine : 바이트코드를 해석 기능
5. Runtime Data Area : 운영체제에서 할당받은 메모리 공간
① Class 영역 : method, code, static, constant
② Stack 영역 : method 호출, 지역변수
③ Heap 영역 : 동적 메모리 할당 공간, 인스턴스, 배열
④ Native method 영역 : C언어 함수 공간
⑤ pc register 영역 : 현재 실행중인 부분의 명령어와 주소가 저장
2) Stack 영역
후입선출(Last In First Out)
method 호출, 지역변수 저장 등에 사용되는 메모리 영역
3) Heap 영역
인스턴스, 배열이 저장되는 공간(대용량 메모리 영역)
Garbage Collection의 대상이 되는 영역
(image; heap link)
10.3 final
10.3.1 final이 붙은 요소는 변경할 수 없음
10.3.2 final variable
값을 변경할 수 없음(상수)
final int MaX = 100;
10.3.3 final method
오버라이딩이 금지됨
10.3.4 final class
상속이 금지됨
예) Math
, String
클래스
10.4 다형성(polymorphism)
여러 가지 형태를 가질 수 있는 능력
하나의 참조변수로 다양한 자료형의 객체를 참조할 수 있는 것
실생활의 예 : 마스터키, 만능리모컨
부모 클래스의 참조변수로 자식 클래스의 객체를 다룰 수 있는 방법
Object a = 10;
Object a = 100.5;
Object a = true;