Java

12일차

보로로롬 2016. 3. 29. 17:33

지역변수
- 함수안에서 만들어진 변수. 함수가 끝나면 사라졍
- 스택영역에 생성됭

멤버변수( = 필드, 인스턴스(객체) 변수 )
- 클래스 내부에 정의되는 변수 ( new 서클될때 그때 데이터생성 )
- 해당 클래스가 객체화 될때마다 각 객체내에 생성됨 (new 서클될때)
- 해당 객체가 소멸될 때! 같이 사라졍 

정적변수 ( = 클래스변수 )
-해당 클래스로 객체를 하나도 안만들었어도 1개만 존재, 계속만들어도 1개 존재
-클래스 내부의 static 키워드를 포함해서 정의
-프로그램 실행시 생성, 종료시 소멸
-같은 클래스로 만든 객체들은 같은 클래스 영역에 있으니까 private클래스 변수에도 자유롭게 접근이 가능
-해당 클래스의 모든 객체들이 공유할 수 있는 공간 ( 자유롭게 접근가능 )

final - 값이 유지
static - 공간자체가 유지

멤버함수 
- 클래스 내에 정의
- 해당 클래스로 객체를 생성할때마다 각 객체 내에 생성됨. 해당객체가 소멸될때 사라짐.

정적 메소드
- 클래스 내에 static 키워드와 함께 정의
- 프로그램이 실행될떄 한개 생성되서 프로그램 종료시 사라짐
- 멤버변수에게 접근이 안됨..()
-this 사용x

정적 메소드 활용 용도
1.정적변수에 대한 게터 세터
2.멤버변수의 상태와 상관없는 동작을 수행하는 기능을 구현할 때
3.객체의 상태와 상관없는 동작을 수행하는 메소드를 정의할때 사용

finalize
- 원래 존재함.
- 객체가 소멸되기 직전에 호출되는 메소드
- 우리가 똑같은 이름으로 다시 정의하면 해당 객체가 소멸될 때 우리가 정의한 함수내용을 실행함


1. 정적 변수는 어떤 경우에 사용하면 좋은가?

     답: 정적 변수에 대한 게터 세터를 만들거나, 객체의 상태와 상관없는 동작을 수행하는 메소드를 정의할 때 사용 


2. 정적 변수나 정적 메소드를 사용할 때, 클래스 이름을 통하여 접근하는 이유는 무엇인가? 

     답 : 객체가 없을 때도 존재하기 때문에 클래스 영역으로 분류함


3. main() 안에서 인스턴스 메소드를 호출할 수 없는 이유는 무엇인가?

     답 : 정적 함수에서 멤버 함수에 접근 못하는 것처럼 Main함수는 static이기 때문에  

가비지컬렉터
참조값이 다 끊긴 객체를 gabage 라고 불린다. 가비지 컬렉터는 이러한 가비지들을 수집하여 메모리를 해지를 해주어 메모리 공간을 확보하는데 사용한다.