선언위치에 따른 변수(type) 종류 😊

리무 rimu ·2022년 10월 23일
0

Java

목록 보기
5/35
post-thumbnail

변수는 선언위치에 따라서 종류가 3가지로 나뉘어짐

class Variables {		  					← 클래스영역, 클래스 시작(선언문만 가능), 변수선언, 선언 순서 상관없음
	int iv; // 인스턴스 변수(iv)
    static int cv; // 클래스 변수(static 변수, 공유변수) -cv
    
    void method() {							← 메서드영역, 메서드 시작(선언 및 정의), 범위 scope
    int Iv = 0; // 지역변수 
    } ← 메서드 끝, 메서드 종료시 자동제거
 } ← 클래스 끝

영역

1.클래스영역
인스턴스변수 (iv): 인스턴스가 생성되었을 때 생성, 객체 생성을 해야 사용가능
클래스 변수 cv(static+iv): 클래스가 메모리에 올라갈 때 생성(자동 생성), 설계도가 필요할 때,객체생성 안해도 됨, 아무데나 사용 가능

2.메서드영역
지역변수 lv(local valiable) : 선언위치는 클래스 영역 이외의 영역(메서드, 생성자, 초기화 블럭 내부), 변수 선언문이 수행되었을 때 생성됨

프로그래밍관점에서 보면 객체는 인스턴수변수(iv)를 묶어놓은 것

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

카드의 속성 (Card 객체, 개별 값) 카드 객체마다 다르게 유지되어야 하는 값
무늬
숫자
▶ 개별

높이

▶ 공통

객체중에 개별적인 속성(인스턴스 변수 iv 사용)
공통적인 속성은 클래스 변수(공통 속성 클래스 변수 cv 사용)

class Card {
	string kind; // 무늬
    int number; // 숫자 ▶값이 개별이니 인스턴스변수 사용
    
    static int width = 100; // 폭
    static int height = 250; // 높이 ▶ 값이 공통이니 static를 붙여 클래스변수 사용
}
Card c = new Card(); // 객체 생성
c.kind = "HEART";
c.number = 5;
Card.width = 200;
Card.height = 300; // 객체 사용 

클래스 변수(cv)의 경우 c.width, c.height라고 참조변수로 적어도 되지만 그렇게 적는거보다 앞에 Card.width, Card.height 이렇게 클래스이름을 붙여야 함

class Ex6_3 {
	public static void main(String args[]) { // 클래스 변수 cv는 객체 생성없이 사용가능
    	System.out.println("Card.width = " + Card.width);
        System.out.println("Card.height = " + Card.height);
        
        Card c1 = new Card(); // 객체 만듬
        c1.kind = "Heart";
        c1.number = 7;
        
        Card c2 = new Card(); // 객체 만듬
        c2.kind= "Spade";
        c2.number = 4;
        
        System.out.println("c1은 " + c1.kind + "," + c1.number + "이며, 크기는 (" + c1.width + "," + c1.height + ")");
        System.out.println("c2는 " + c2.kind + "," + c2.number + "이며, 크기는 (" + c2.width + "," + c2.height + ")");
        System.out.println("c1의 width와 height를 각각 50, 80으로 변경합니다.");
        Card.width = 50;
        Card.height = 80; //클래스 변수 cv , 공유하는 cv값으로 출력됨
  	}
}

조금씩 이해가 되기 시작... 내일되면 또 까먹지 않을까 걱정이다 😳

참조
자바의 정석 기초편 codechobo.com

profile
JAVA / SQL / Spring 을 공부하고 있습니다 🐥

0개의 댓글