본문 바로가기
수업(국비지원)/Java

[Java] chap6 : 클래스와 객체 - 변수의 종류, 지역변수, 클래스 변수 사용

by byeolsub 2023. 4. 15.
  • 변수의 종류
 선언 위치에 따른 변수의 종류
                  선언위치         선언방법                할당되는메모리영역
1. 클래스 변수 :  클래스 내부   static 자료형 변수명;         클래스 영역
                              static int cv;            클래스 정보 로드시 
         특징 : 클래스의 모든 객체의 공통변수로 사용됨.  
               객체화와 상관이 없다.
               클래스명.변수명 사용됨.  
               기본값으로 초기화 됨.            
                  
  2. 인스턴스 변수   클래스 내부   자료형 변수명;           힙영역
                                    int iv;              객체화시
          특징 : 객체별로 메모리 할당됨. 객체별로 다른 값을 저장 할 수 있음.
                반드시 객체화가 되어야 변수임.
                참조변수명.변수명 사용됨
                기본값으로 초기화 됨.
                                   
  3. 지역변수      메서드 내부    자료형 변수명;           스택영역
                                   int lv;              선언문 실행시
          특징 : 선언된 이후부터 메서드(블럭) 내부에서만 사용가능한 변수
                변수명 사용됨. lv=100;
                매개변수도 지역변수임. 
                반드시 초기화 해야 사용할 수 있음

 

 📌

package chap6;

class Card {
	String kind; //인스턴스변수  c1.kind
	int number;  //인스턴스변수  c1.number
	static int width = 250; //클래스변수  Card.width
	static int height =100; //클래스변수  Card.height
}
public class CardEx1 {
	public static void main(String[] args) {
		System.out.println("카드의 크기:" + Card.width + "," + Card.height );
//		System.out.println("카드의 종류:" + Card.kind + "," + Card.number );
		Card c1 = new Card();
		System.out.println("카드의 종류:" + c1.kind + "," + c1.number );
		c1.kind = "Spade";
		c1.number = 1;
		Card c2 = new Card();
		c2.kind = "Heart";
		c2.number = 10;
		System.out.println("c1카드:" + c1.kind + "," + c1.number +
				           ",("+Card.width+","+Card.height+")" );
		System.out.println("c2카드:" + c2.kind + "," + c2.number+
                           ",("+c2.width+","+c2.height+")" );
		c1.width = 100;
		c1.height = 50;
		System.out.println("c1카드:" + c1.kind + "," + c1.number +
		           ",("+c1.width+","+c1.height+")" );
        System.out.println("c2카드:" + c2.kind + "," + c2.number+
                ",("+c2.width+","+c2.height+")" );
	}
}

  • 지역변수
 지역변수 : 메서드 내부에서 선언됨. 선언된 블럭 내부에서만 사용 가능함.
         매개변수는 지역변수임.
         반드시 초기화 필요함

 

 📌

package chap6;

public class LocalValEx1 {
	static int cv;
	public static void main(String[] args) {
      //클래스변수,인스턴스변수는 초기화 필요없음. 기본값으로 자동 초기화
		System.out.println(cv); //0
		int num = 200;  //지역변수
		System.out.println(num);
		int lv=0;
		//System.out.println(lv); //초기화 필요
		if(num==200) lv=10;
		else if(num > 200) lv=20;
		System.out.println(lv);
		String grade="F";
		int score = 80;
		switch(score/10) {
		case 10:
		case 9 : grade="A";break;
		case 8 : grade="B";break;
		case 7 : grade="C";break;
		case 6 : grade="D";break;
//		default : grade="F";
		}
		System.out.println(score + "점의 학점:" + grade); //switch 블럭 수정
	}
}

  • 클래스 변수 사용

📌 

package chap6;
/*
 * 클래스 변수 사용
 * static 변수를 이용하여 자동차 serial 번호 설정하기
 */
class Car {
	String color; //인스턴스 변수
	int number; //인스턴스 변수
	int sno; 
	static int cnt; // 클래스 변수
//	int cnt;
	static int width = 250; //클래스 변수
	static int height = 150; //클래스 변수
  //toString() : 객체의 문자열화에 관여하는 메서드
	//객체를 문자열화 해주는 메서드 : 참조변수명을 출력하면 자동 호출되는 메서드
	public String toString() {
		return "자동차고유번호:" + sno + ","+color + ":" + number
				+ "(" + width +","+ height + ")=> 생산번호:" + cnt;
	}
}
public class CarEx1 {
	public static void main(String[] args) {
		Car c1 = new Car();
		c1.color = "white";
		c1.number = 1234;
		c1.sno = ++Car.cnt;
//		c1.sno = ++c1.cnt;
		System.out.println("c1자동차" + c1); //
		Car c2 = new Car();
		c2.color = "red";
		c2.number = 2345;
		c2.sno = ++Car.cnt;
//		c2.sno = ++c2.cnt;
		System.out.println("c1자동차" + c1.toString());
		System.out.println("c2자동차" + c2);		
	}
}