남궁성님의 자바의 정석 강의를 기반으로 작성했습니다.
- 선언 위치
* 클래스 영역 : 인스턴스 변수, 클래스 변수
* 메서드 영역 : 지역 변수
- 클래스 변수 : 공통적인 사항
- 인스턴스 변수 : 개별적인 사항
예. 카드에서 공통적인 사항은 카드의 폭, 높이, 두께 등, 개별적인 사항은 카드의 문양, 숫자 등이 있습니다. 이를 코드화하면 아래와 같습니다.
Class Card {
// 개별 속성 : 인스턴스 변수
String kind; // 카드의 무늬
int number; // 카드의 숫자
// 공통 속성 : 클래스 변수
static int width; // 폭
static int height; // 높이
}
* 위 코드를 사용하는 방법
Card c = new Card(); // 객체를 생성
c.kind = "Heart"; // IV 객체 사용
c.number = 7; // IV 객체 사용
c.width = 200; // CV 객체 사용
c.height = 300; // CV 객체 사용
위 코드에서 실행상의 문제는 없지만, 클래스 변수(CV)는 반드시 클래스 이름을 사용함으로써 객체를 사용해야 합니다. 클래스 변수는 모든 객체가 공유할 수 있는 전역적인(Static) 변수이기 때문이죠. 따라서, 위 코드를 정석으로 수정을 한다면 아래의 코드 블럭과 같습니다.
Card c = new Card();
c.kind = "Heart";
c.number = 7;
//CV 객체는 반드시 클래스 이름으로 객체를 사용해야 한다
Card.width = 200;
Card.height = 300;
아래 코드는 예제 코드입니다.
public class CvIv {
public static void main(String args[]) {
System.out.println("클래스 변수 입니다. 객체 생성없이 사용이 가능합니다.");
System.out.println("Card.width = " + Card.width); // 클래스 변수는 객체 생성없이 사용이 가능하다.
System.out.println("Card.height = " + Card.height);
System.out.println("------------------------");
System.out.println("인스턴스 변수 입니다. 객체를 반드시 생성해서 클래스의 멤버에 접근이 가능합니다.");
Card c1 = new Card();
c1.kind = "Heart";
c1.number = 7;
Card c2 = new Card();
c2.kind = "Spade";
c2.number = 4;
System.out.println("------------------------");
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으로 변경합니다.");
c1.width = 50;
c1.height = 80;
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("c2의 width와 height를 변경한 적 없지만 공통적으로 변경되어 있는 것을 알 수 있습니다.");
}
}
class Card {
String kind; // 인스턴스 변수
int number; // 인스턴스 변수
static int width = 100; // 클래스 변수
static int height = 250; // 클래스 변수
}
'Programming > Java' 카테고리의 다른 글
[JAVA] return문, return, 리턴문, 호출스택 (0) | 2021.10.09 |
---|---|
[JAVA] 자바의 메서드(Method) (0) | 2021.10.08 |
[JAVA] 자바의 클래스 (0) | 2021.10.08 |
[JAVA] 자바의 객체지향 (0) | 2021.10.08 |
[JAVA] 자바의 정석 (0) | 2021.10.05 |