Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

codingfarm

변수 본문

Programming Language/JAVA

변수

scarecrow1992 2020. 11. 2. 22:57

itmining.tistory.com/20

클래스 변수와 인스턴스 변수

 

public class test { 
  int iv; // 인스턴스 변수 
  static int cv; // 클래스 변수 
  void method() { int lv; // 지역 변수 } 
}

인스턴스 변수

 인스턴스 변수는 인스턴스가 생성될 때 생성됩니다. 그렇기 때문에 인스턴스 변수의 값을 읽어오거나 저장하려면 인스턴스를 먼저 생성해야합니다. 인스턴스 별로 다른 값을 가질 수 있으므로, 각각의 인스턴스마다 고유의 값을 가져야할 때는 인스턴스 변수로 선언합니다.

 

클래스 변수

  클래스 변수는 인스턴스 변수에 static만 붙여주면 됩니다. 인스턴스 변수는 각각 고유한 값을 가지지만 클래스 변수는 모든 인스턴스가 공통된 값을 공유하게 됩니다. 한 클래스의 모든 인스턴스들이 공통적인 값을 가져야할 때 클래스 변수로 선언합니다. 클래스가 로딩될 때 생성되어(그러므로 메모리에 딱 한번만 올라갑니다.) 종료 될 때 까지 유지되는 클래스 변수는 public 을 붙이면 같은 프로그램 내에서 어디서든 접근할 수 있는 전역 변수가 됩니다. 또한 인스턴스 변수의 접근법과 다르게 인스턴스를 생성하지 않고 클래스이름.클래스변수명 을 통해서 접근할 수 있습니다.

 


 

변수의 초기화

변수의 초기화 : 변수를 선언하고 처음으로 값을 저장하는것

가능하면 선언과 동시에 적절한 값으로 초기화 해야한다.

배열과 클래스의 멤버변수는 초기화 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어진다.

 

자료형 기본값
boolean false
char '\u0000'
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d 또는 0.0
참조형 변수 null

 

멤버변수(클래스변수와 인스턴스변수)와 배열의 초기화는 선택적이지만, 지역변수는 사용하기전에 반드시 초기화를 해주어야 한다.

 

멤버변수의 초기화는 명시적 초기화, 생성자, 초기화 블럭 크게 3가지 방법으로 나뉘어진다.

 

 

1. 명시적 초기화(explicit initialization)

  • 변수를 선언과 동시에 초기화 하는것을 명시적 초기화라 한다.
  • 아래처럼 간단한 방법으로도 가능하다.
class Car{
	int door = 4;
	Engine e = new Engine();
	//...
}

 

2. 초기화 블록(initialization block)

  • 복잡한 초기화 작업이 필요할 때 사용한다.
클래스 초기화 블럭     - 클래스변수의 복잡한 초기화에 사용된다.
인스턴스 초기화 블럭  - 인스턴스 변수의 복잡한 초기화에 사용된다.
  • 초기화 블럭의 작성법은 아래와 같다.
class InitBlock{
	static {/*클래스 초기화 블럭*/}
	
	{/*인스턴스 초기화 블럭*/}
}
  • 클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한번만 수행되며, 인스턴스 초기화 블럭은 생성자와 같이 인스턴스를 생성할 때 마다 수행된다.
    • 그러므로 프로그램 실행 도중 초기화 되어야 할 값이 바뀐다면 클래스 초기화가 아닌 인스턴스 초기화나 생성자를 사용하는것이 유용하다.
  • 생성자보다 인스턴스 초기화 블럭이 먼저 수행된다.
  • 클래스의 생성자들마다 공통적으로 해주어야할 작업이있을때 주로 쓰인다.
Car(){
	System.out.println("Car 인스턴스가 생성되었습니다.");
	color = "White";
	geartype = "Auto";
}

Car(String color, String gearType){
	System.out.println("Car 인스턴스가 생성되었습니다.");
	this.color = color;
	this.geartype = gearType;
}

위의 경우에는 Car와 Car(String, String) 생성자가 둘다 똑같은 문자열을 출력한다.

똑같은 코드를 중복해서 적을 필요 없이 아래처럼 인스턴스 초기화블럭을 사용하면 중복작업을 배제할 수 있다.

{ System.out.println("Car 인스턴스가 생성되었습니다."); }

Car(){
	color = "White";
	geartype = "Auto";
}

Car(String color, String gearType){
	this.color = color;
	this.geartype = gearType;
}

 

 

 

 

'Programming Language > JAVA' 카테고리의 다른 글

오버라이딩(overriding)  (0) 2021.01.07
상속(inheritance)  (0) 2021.01.07
객체지향 프로그래밍  (0) 2020.11.01
배열(Array)  (0) 2020.11.01
JVM의 메모리구조  (0) 2020.10.11
Comments