본문 바로가기

STUDY/Java

[JAVA] this, static 변수

 
 

01 this 예약어

1. this란?

- 생성된 인스턴스 스스로를 가리키는 예약어

 

1-1. 자신의 메모리를 가리키는 this

this 예약어 예제 1
ThisExample.java

 

[결과 화면]

* bDay (참조변수)를 출력한 값과 같음 <클래스 이름@메모리 주소>

 

 


 

 

1-2 생성자에서 다른 생성자를 호출하는 this

this 예약어 예제 2
CallAnotherConst.java
 

* this로 다른 생성자를 호출할 때 주의사항

- this를 사용하여 생성자를 호출하는 코드 이전에 다른 코드를 넣을 수 없다

 

[결과 화면]

 

 


 

 

1-3. 자신의 주소를 반환하는 this

- this를 사용하여 생성된 클래스 자신의 주소 값을 반환할 수 있음

this 예약어 예제 3
CallAnotherConst.java
 

* this를 사용하여 자신의 주소 값을 반환 가능

 

[결과 화면]

 
 

 

 

 


 

 

 

 

 

02 객체 간 협력

객체 지향 프로그램에서는 객체를 정의하고 객체 간 협력으로 구현

ex) 학생이 버스나 지하철을 타고 학교에 간다.

 

객체 지향 프로그램 예제
Student.java, Bus.java, Subway.java, TakeTrans.java

ex) Student.java

 

① 4행: 멤버 변수(속성) = 학생 이름 ,학년, 돈

② 13행~25행: 메서드 = 버스타기, 지하철타기, 학생정보출력

ex) Bus.java

 

① 4행: 멤버 변수(속성) = 버스 번호, 승객 수, 버스가 받은 요금 총액

② 8행~19행: 메서드 = 승객이 탄다(승객 수 증가), 승객이 요금을 지불한다(버스가 받은 수입 증가), 버스정보출력

 

ex) Subway.class

① 4행: 멤버 변수(속성) = 지하철 노선, 승객 수, 지하철이 받은 요금 총액

② 8행~19행: 메서드 = 승객이 탄다(승객 수 증가), 승객이 요금을 지불한다(지하철이 받은 수입 증가), 지하철정보출력

 

ex) TakeTrans.java

[결과 화면]

 
 

 

 

 


 

 

 

 

 

03 static 변수

1. static 변수(정적 변수)란?

- 클래스에서 공통으로 사용하는 변수

- 클래스 내부에 선언하지만 프로그램이 실행되어 메모리에 올라갔을 때 딱 한 번 메모리 공간이 할당되고 그 값은 모든 인스턴스가 공유

- static 자료형 변수이름;

- 클래스에 기반한 변수라고 해서 Class variable 클래스 변수 라고도 함

 

 

학번 부여 예제
Student.java, StudentTest1.java

ex) Student.java

 

① 4행: serialNum은 기준 값으로 static으로 설정 > 학생이 생성될 때마다 1씩 증가하여 학번을 부여

 

ex) StudentTest1.java

 

① 7행: 학생 인스턴스를 생성할 때마다 serialNum 변수의 값은 증가 > static으로 선언한 serialNum 변수는 모든 인스턴스가 공유하기 때문

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

 

 

2. 클래스 메서드 (static 메서드)

- 클래스 메서드 내부에서 지역 변수와 클래스 변수는 사용할 수 있지만, 인스턴스 변수는 사용할 수 없음

 

 

 


 

 

 

 

04 변수

변수 유형
선언 위치
사용 범위
메모리
생성과 소멸
지역 변수
(로컬 변수)
함수 내부에 선언
함수 내부에서만
사용 가능
Stack 스택
함수가 호출될 때 생성되고 함수가 끝나면 소멸
멤버 변수
(인스턴스 변수)
클래스 멤버 변수로 선언
클래스 내부에서 사용하고
private이 아니면
참조 변수로 다른 클래스에서 사용 가능
Heap 힙
인스턴스가 생성될 때 힙에 생성되고, 가비지 컬렉터가 메모리를 수거할 때 소멸
static 변수
(클래스 변수)
static 예약어를 사용하여 클래스 내부에 선언
클래스 내부에서 사용하고
private이 아니면 클래스 이름으로 다른 클래스에서 사용 가능
데이터 영역
프로그램이 처음 시작할 때 상수와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할 때 소멸

* 변수는 특성에 맞게 선언해서 사용하는 것이 중요

 

 

 

 

 


 

 

 

 

 

출처: Do it! 자바 프로그래밍 입문, 이지스퍼블리싱