상세 컨텐츠

본문 제목

자바 _인스턴스 변수, 로컬 변수, 클래스 변수_ 변수 다 모엿!!

java_자바

by 쫑메이 2020. 7. 4. 00:14

본문

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

변수는 데이터를 저장하는 공간인데,

무슨 변수의 종류가 이렇게도 많담...

종류가 많은 거 보니 그만큼 중요하다는 뜻이니 

꼭 알고 가자!!

 

 

 

 

 

 

 

 


변수의 종류 정리


 

 

 

 

 

 

 

 

 

 

 

 

 


인스턴스 멤버 변수는?

 


 

 

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

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


<참고: 타입별 기본값>


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


인스턴스 멤버 변수 특징

 


 

 

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

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

 

 

 

 

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


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


 

 

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

 

 

 

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

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

 

 

 

 

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

The local variable localVariable may not have been initialized

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


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

 


 

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

 

 

 

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

static 키워드가 선언된 변수

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


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


 

 

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

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

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

 

 

2) 클래스는 1개만 생성, 클래스 멤버 변수도 클래스 소속이므로 1개만 생성

 

 

 

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 대신 클래스 명을 쓰면 된다

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

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

 


 

 

 

 

 

 

 

 

 


 

 

 

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

아직 부족한 게 많으니

틀린 곳이 있다면

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

 

 

 

 

 

 


 

반응형

관련글 더보기