본문 바로가기
Java & 스프링/Java

[Java] 클래스 변수와 인스턴스 변수의 비교

by hjhello423 2019. 4. 19.

이전 포스팅에서 클래스 변수와 인스턴스의 정의에 대해 알아보았다.

2019/04/19 - [자바/기본] - 인스턴스 변수와 클래스 변수

 

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

자바에의 클래스에서 사용할 수 있는 변수의 종류는 총 3가지가 있다. 이 3가지에 대해서 알아보자. 변수의 종류는 선언된 위치에 따라 정해진다. 따라서 3가지의 변수 종류를 구분하기 위해서는 해당 변수가 선언..

steady-hello.tistory.com

 

 

이제 소스를 통해 각각을 비교해 보자

package test;

public class MainClass {

	public static void main(String[] args) {

		System.out.println("카드의 높이 : " + CreadCard.height);
		System.out.println("카드의 넓이 : " + CreadCard.width);
		System.out.println();

		CreadCard card1 = new CreadCard();
		CreadCard card2 = new CreadCard();

		card1.num = "1111-AAAA";
		card1.owner = "kim";

		card2.num = "2222-BBBB";
		card2.owner = "choi";

		System.out.println("1번 카드의 정보 - " + card1.toString());
		System.out.println("2번 카드의 정보 - " + card2.toString());


		System.out.println("\n1번카드의 정보를 변경한다.");

		card1.num = "3333-CCCC";
		card1.owner = "lee";
		card1.height = 8;
		card1.width = 20;

		System.out.println("1번 카드의 정보 - " + card1.toString());
		System.out.println("2번 카드의 정보 - " + card2.toString());
	}
}

class CreadCard {
	String num;
	String owner;
	static int height = 5;
	static int width = 10;

	public String toString() {
		String res = "카드 높이:" + this.height + " 카드 넓이:" + this.width
				+ " 소유자:" + this.owner + " 카드번호:" + this.num;

		return res;
	}
}

 

위의 소스는 신용카드를 객체로 만든 소스이다.

카드는 모두 공통 값인 높이와 넓이 값을 가지고 으며(height, width)

카드가 발급될 때마다 지정되는 사용자와 카드 번호를 가진다 (owner, num)

 

위 소스의 실행 결과는 아래와 같다.

카드의 높이 : 5 
카드의 넓이 : 10 

1번 카드의 정보 - 카드 높이:5 카드 넓이:10 소유자:kim 카드번호:1111-AAAA 
2번 카드의 정보 - 카드 높이:5 카드 넓이:10 소유자:choi 카드번호:2222-BBBB 

1번 카드의 정보를 변경한다. 
1번 카드의 정보 - 카드 높이:8 카드 넓이:20 소유자:lee 카드번호:3333-CCCC 
2번 카드의 정보 - 카드 높이:8 카드 넓이:20 소유자:choi 카드번호:2222-BBBB

card1과 card2를 생성한 후 각각의 정보를 출력한다.

그리고 1번 카드의 정보를 변경한 후 다시 1,2 카드의 정보를 출력하는 예제이다.

 

card1의 값을 변경할 때 owner와 num 변수는 인스턴스 변수이기 때문에 card1 인스턴스의 데이터에만 영향을 미친것을 볼 수 있다.

 

주의해서 볼 부분은 클래스 변수인 height와 width값이다.

static으로 선언되어 card1의 값을 변경하였는데도 card2의 데이터에도 영향을 주는 모습을 볼 수 있다.

 

또 다른 점은 CreaditCard의 객체를 생성하기 전에(new 키워드 선언 전에) '클래스이름. 변수이름'의 형태로 값에 접근이 가능하다는 점이다.

 

반응형

'Java & 스프링 > Java' 카테고리의 다른 글

[Java] 오버로딩, 오버라이딩  (0) 2019.04.23
[Java] JVM이란?  (0) 2019.04.20
[Java] 인스턴스 변수와 클래스 변수  (0) 2019.04.19
자바의 기본형(변수 타입)  (0) 2019.04.18
Java의 특징과 JVM, JDK, JRE  (0) 2019.04.18

댓글