231218 클래스변수, 로컬변수, 상속,
★ SOLID 원칙
★ GRASP 설계 기법
★ GoF의 Design Patterns 실용 설계 기법
필드데이터
클래스 변수 = 스태틱 필드 => static int a;
==> 스태틱영역에서 loading되어 Method Area에 들어간다.
static 필드 = 클래스 필드(변수)
- 클래스를 로딩할 때 Method Area 영역에 생성된다.
- 클래스는 단 한 번만 로딩된다.
- 따라서 스태틱 변수도 한 번만 생성된다.
- JVM을 종료할 때 메모리에서 한꺼번에 제거된다.
메서드안에 선언된 변수 = 로컬 변수 => int b; (초기화 시키는 것)
==> 논스태틱 필드에서 new로 되어 Heap 메모리에 저장된다.
non-static 필드 = 인스턴스 필드
- new 연산자를 실행할 때 Heap 영역에 생성된다.
- new 연산자를 실행할 때마다 생성된다.
- Garbage Collector에 의해 인스턴스가 해제될 때 제거된다.
결론!
클래스 메서드(=스태틱 메서드)
=> 인스턴스 변수를 사용하지 않을 경우 클래스 메서드로 선언하라!
인스턴스 메서드
=> 인스턴스 변수를 사용할 경우 인스턴스 메서드로 선언하라!
실무
=> 일단 인스턴스 메서드로 무조건 만들라!
=> 인스턴스 변수를 완전히 사용하지 않음을 확신하면
그 때 클래스 메서드로 전환하라!
★ 레퍼런스 배열
100번지, 200번지, 300번지가 있으면 이 번지 배열을 레퍼런스 배열이라고 한다.
인스턴스 객체가 모여 레퍼런스 배열이 된다!!
번지안에 name, title, content,deadline 등이 있는데 이것을 인스턴스 배열이라고 한다.
변수종류 참고하기!!
★로컬변수 = 변수를 생성하라는 명령문, 변수 초기화를 해준다.
★기능 추가 - 기존 코드를 손대지 않고 추가 / 변경 ( 상속 extends )
특징!
- 기존 코드의 소스 파일이 필요 없다.
- 기존 코드를 변경하면 상속 받는 모든 서브 클래스에 바로 적용된다.
상속을 사용하지 않으면!!
- 기존 클래스에 추가를 하게 되면 전체 코드를 변경해야 하는 일이 생길수 있다.
- 코드가 점점 누더기가 되어간다.
- 기존 코드에 대한 소스파일이 있어야 한다.
★final 을 붙여주면 변수가 아니라 고정값이 된다!!
★ex03 은 생성자 관련
ex03 완료