선언위치에 따른 변수의 종류

MIN·2023년 9월 15일

Java

목록 보기
6/36
post-thumbnail
이 글은 자바의 정석 기초편을 공부한 내용을 토대로 작성한 글입니다.
혹시 잘못된 내용이 있을 시 댓글로 알려주시면 감사하겠습니다 ^U^

지난 게시글에서는 변수를 타입별로 정리해보았다. (ex. 정수형, 실수형 등)


선언위치에 따라서도 총 3가지로 선언될 수 있는데 하나씩 살펴보자.

클래스 영역에서 선언되는 (= 멤버변수 = 객체의 속성정의)
클래스 변수인스턴스 변수
( 변수 앞에 static이 붙으면 클래스 변수, 나머지는 인스턴스 변수)
그리고 클래스 이외의 영역에서 선언되는 지역변수

public class MethodEX {	// 클래스 영역

	int num;			// 인스턴스 변수
    static double val;	// 클래스 변수 (=static 변수)
    
    void method() {		// 메서드 영역
    	boolean result = true;	// 지역변수
    }
    
}

🍭 인스턴스 변수 (instance variable)

클래스 영역에서 선언되며 앞서 적은 게시글의 대부분은 이 인스턴스 변수가 사용되었다. 인스턴스를 생성할 때마다 새로 만들어지며 별도의 저장공간을 가지므로 서로 다른 값을 가질 수 있다.

예를 들어 Pen이라는 객체가 여러개 생성되고 인스턴스 변수로 int color;가 선언되었다면, 이 생성된 Pen은 각 객체마다 color를 다르게 설정할 수 있다.
이 이유는 앞서 말했듯 새로 객체가 생성될 때마다 인스턴스 변수 역시 같이 새로 생성되어 별도의 저장공간을 가지기 때문이다.

public class Pen {
	String color;
}

public class RealPen {
	public static void main(String[] args) {
		Pen p1 = new Pen();
    	Pen p2 = new Pen();
    
    	p1.color = "빨간색";
    	p2.color = "노란색";
    }
}

🍭 클래스 변수 (class variable)

클래스 변수를 선언하는 방법은 위의 인스턴스 변수 앞에 static만 붙이면 된다. 인스턴스 변수는 각 인스턴스마다 저장공간이 달라 서로 다른 값을 가질 수 있지만
클래스 변수는 한 클래스의 모든 인스턴스들이 생성될 때마다 같은 값을 가져야 할 때 선언한다.

즉, 클래스 변수는 모두 같은 하나의 저장공간을 공유한다.

예를 들어 같은 회사의 같은 시리즈의 펜이라면 펜의 길이처럼 규격이 모두 같아야 할 것이다.

class Pen {
	static int size = 13;
}

public class EX1 {
	public static void main(String[] args) {
		Pen p1 = new Pen();
		Pen p2 = new Pen();
		System.out.println(p1.size);	// 13출력
		
		p1.size = 15;	
		p2.size = 20;
		
		System.out.println(p1.size);	// 20출력
		System.out.println(p2.size);	// 20출력
		
	}

}

위 예시의 첫 번째 Print 처럼 객체를 생성한 뒤 바로 사용이 가능하다.
처음 대입된 값이 그대로 나옴을 확인할 수 있다.
그 뒤에 p1에 15의 값을 넣고, p2에 20값을 차례로 넣어주었다. 하지만 출력을 했을 때 모두 똑같이 마지막에 넣은 값 20이 출력되었다.

이처럼 static 변수는 같은 저장공간을 가지기 때문에 값을 바꾸어주면 해당 static 변수를 사용하는 모든 값이 같이 바뀌게 된다.

🍭 지역변수 (local variable)

메서드 내에서 선언하는 변수를 지역변수라 하며 해당 메서드 내에서만 사용이 가능하다. 메서드가 종료되는 즉시 사용이 불가하며 소멸된다.

for (int i=0; i<5; i++) {

	System.out.println (i + " * 2 =" + (i*2))
    
}	// for문 종료

위 예제에서 선언된 int i변수는 for문 내에서 선언되었다. 따라서 변수 i는 for문이 끝나는 즉시 사라지게되며 사용할 수 없다.




이렇게 선언위치에 따른 변수 3가지를 알아보았다. 끝!
profile
기초부터 시작하는 감쟈 ※ 소개글 확인해주세요!! ※

0개의 댓글