상세 컨텐츠

본문 제목

자바 변수총정리_ 인스턴스변수,로컬변수,클래스변수 싹털기

java_자바

by 쫑메이 2020. 6. 3. 01:02

본문

 

 

 

 

 

 

 

 

인스턴스 변수/ 로컬 변수/ 클래스 변수

자바에서 중요한 역할을 하는 변수들은 

꼭 알고 넘어가자!!!!!

 

 

 


 

<변수의 종류 정리>

구분 선언위치 변수 종류 특징
멤버변수 클래스 영역 클래스 멤버변수 static키워드 사용
인스턴스 멤버 변수 static키워드 없음
로컬변수 함수 등 내부 로컬변수  
파라미터변수(매개변수) 메서드 파라미터

 

 

 

 

<인스턴스 멤버 변수는?>

1) 클래스 영역에 static키워드 없이 선언된 변수

2) 객체가 만들어질 때, 즉new생성될 때 객체별로 생성된다

3) 생성시점에서 타입별로 자동으로 초기화가 이뤄진다

 

 

 

 

 

<참고: 타입별 기본값>

자료형 기본값 비고
boolean false  
char ‘\u0000’ 공백문자
byte, short, int 0  
long 0L  
float 0.0f  
double 0.0  
참조형 변수 null 아무것도 참조하지 않음

 

 

 

 

<인스턴스 멤버 변수 특징>

1) 인스턴스 멤버 변수는 객체 내부에 생성되기 때문에 객체 소속이다

그래서 이 변수를 사용하기 위해서는 먼저 객체를 생성해서 객체 이름을 통해서 접근해야 한다

 

2) 인스턴스 멤버 변수의 값은 객체마다 생성되기 때문에 객체별로 고유값을 가질 수 있다

인스턴스 new 객체 생성하지 않으면 사용할 수 없다

 

 

 

 

 

 

<로컬 변수(지역변수)의 특징>

 

1) 로컬변수는 클래스 영역 이외의 모든 중괄호 안에 선언되는 변수

2) 로컬변수는 멤버변수와 달리 자동으로 초기화가 이뤄지지 않는다

그래서 로컬변수를 사용하기 전에 반드시 명시적인 초기화가 필요하다

 

 

<초기화가 되어 있지 않다는 경고문>

The local variable localVariable may not have been initialized

 

 

 

 

 

 

<클래스 변수=static변수=정적변수_ 정의>

 

1. static키워드는 변수와 메서드에 사용 가능

2. 클래스 멤버 변수는 인스턴스 멤버 변수와 마찬가지로 클래스의 영역에 선언되는 변수 중

static키워드가 선언된 변수

3. 변수의 데이터 타입 앞에 static 키워드 사용

 

 

 

 

 

 

<클래스 변수(=static변수=정적 변수)_특징>

1) 인스턴스 생성 없이 클래스가 메모리에 로딩될 때 변수도 함께 로딩된다

즉, 개별 객체 생성과는 무관. 즉 인스턴스가 생성 전에 생긴다.

왜냐하면 클래스 변수의 소속이 객체가 아니라 클래스이기 때문

 

2) 클래스는

3) 공유변수: 모든 인스턴스에 하나의 변수를 공유함

비유> 강의실은 여러 군데 있지만 인포 데스크는 1개밖에 없다. 모두 공유하는 곳

 

4) 클래스

5) 개별 객체와 무관하기 때문에 객체가 아닌 클래스 이름으로 접근해야 한다

인스턴스 주소를 갖는 참조 변수 대신 클래스명만으로 접근 가능

 

 

 

 

 

<클래스 변수(=static변수=정적 변수)_기본 사용 문법>

선언 : [접근 제한자] static 데이터타입 변수명;

사용 : 클래스명. 변수명

 

 

 

 

 

 

 

 

<각각의 변수들의 생성과 소멸시점 비교>

1) 로컬변수 메서드가 호출되면 메서드가 생성, 메서드가 끝나면 끝난다

2) 인스턴스 멤버변수는 new 했을 때, 객체를 만들었을 때, 소멸은 객체가 제거될 때

3) 클래스가 생성될 때 클래스 멤버 변수도 생기고, 프로그램이 끝날 때 이 변수도 끝난다

 

 

< 자바 프로그램 실행 과정 및 변수 생성 시점 >

1. 소스 코드(.java) 작성 후 실행

2. 클래스 파일(.class) 생성

3. 클래스 파일 실행

4. 클래스 로딩 => static 키워드 사용된 변수 및 메서드 로딩됨

5. main() 메서드 호출(실행)

6. 인스턴스 생성 => 인스턴스 변수 및 메서드 로딩됨

7. 메서드 호출 => 로컬 변수 로딩됨

8. 메서드 종료 => 로컬 변수 제거됨

9. 인스턴스 제거됨 => 인스턴스 변수 제거됨

10. 프로그램 종료됨 => static 변수 제거됨

 

 

 

 

 

 

 

 

<static 사용 시 주의사항>

1) static메서드 내에서는 인스턴스 변수 사용불가!!!!!

static 메서드 로딩 시점은 인스턴스 변수가 생성되기 전이므로

static 메서드 내에서는 인스턴스 변수 접근이 불가능하다

그러므로 static변수를 사용할 때 쓸 수 없는 인스턴스 변수들이 있다는 것에 주의

 

 

 

2. static 메서드 내에서는 레퍼런스 this사용 불가

왜냐하면 레퍼런스 this도 인스턴스 생성 시점에 메모리에 로딩되기 때문에

static 메서드 로딩 시 존재하지 않는다

 

 

<해결방법>

this대신 클래스 명을 쓰면 된다

 

 

 

 

 

 

ㅣ읽느라 수고 많으셨어요~ㅣ

 

 


 

부족한 글을 읽어주셔서 감사드립니다

아직 부족한 게 많으니

틀린 곳이 있다면

조언의 말씀 꼭 부탁드립니다!!!!

 

 

 

 

 

 


 

 

반응형

관련글 더보기