Test092 클래스와 인스턴스 / 클래스 변수(static 변수) 와 클래스 메소드(static 메소드)
※ 클래스 변수 또는 클래스 메소드는 클래스 정보가 로딩되는 순간 메모리 할당이 이루어지며 클래스 이름 또는 객체(인스턴스)를 통해 접근할 수 있다.
즉, 『new』연산자를 통해 메모리를 할당받지 않아도 사용이 가능하다는 것이다.
Test092.java
public class Test092
{
static int a = 10; //-- static 변수(클래스 변수)
// ※ 인스턴스 변수는
// 동일한 클래스의 메소드에서는 바로 접근하는 것이 가능하지만
// 클래스 메소드에서는 접근할 수 없다.
int b = 20; //-- instance 변수(인스턴스 변수)
void write() //-- instance 메소드(인스턴스 메소드)
{
System.out.println("클래스 변수 a : " + a);
System.out.println("인스턴스 변수 b : " + b);
}
static void print() //-- static 메소드(클래스 메소드)
{
System.out.println("클래스 변수 a : " + a);
//System.out.println("인스턴스 변수 b : " + b); //-- 에러 발생
}
public static void main(String[] args)
{
System.out.println("main() → 클래스 변수 a : " + Test092.a);
//-- 클래스 변수에 접근하기 위해서는
// 『클래스명.변수명』의 형태로 접근이 가능하다.
//--==>> main() → 클래스변수 a : 10
System.out.println("main() → 클래스 변수 a : " + a);
//-- 같은 클래스 내부에 존재하기 때문에
// 클래스 이름 생략가능
//--==>> main() → 클래스변수 a : 10
Test092.print();
print();
//--==>> 클래스 변수 a : 10
// 클래스 변수 a : 10
//-- 클래스 메소드에서 클래스 메소드의 호출은 가능하며,
// 『클래스명.메소드명』의 형태로 접근하여 호출하는 것이 가능하다.
// 또한, 지금은 같은 클래스 내부에 존재하기 때문에
// 클래스의 이름을 생략하는 것이 가능하다.
//System.out.println("main() → 인스턴스 변수 b : " + Test092.b);
//System.out.println("main() → 인스턴스 변수 b : " + b);
// write();
// Test092.write();
// Test092 클래스 기반 인스턴스 생성
Test092 ob1 = new Test092();
// 생성된 인스턴스를 통한 변수 접근
System.out.println("main() → 인스턴스 변수 b : " + ob1.b);
//--==>> main() → 인스턴스 변수 b : 20
// 생성된 인스턴스를 통한 메소드 접근
ob1.write();
//--==>> 클래스 변수 a : 10
// 인스턴스 변수 b : 20
// 생성된 인스턴스를 통한 클래스 변수 접근
System.out.println("main() → 클래스변수 a : " + ob1.a);
//--==>> main() → 클래스변수 a : 10
// 생성된 인스턴스를 통한 클래스 메소드 접근(호출)
ob1.print();
//--==>> 클래스 변수 a : 10
// ※ 클래스 변수나 클래스 메소드는
// 『생성된인스턴스명.변수』
// 『생성된인스턴트명.메소드명()』
// 의 형태로도 접근이 가능하지만
// 『클래스명.변수명』
// 『클래스명.메소드명()』
// 의 형태로도 접근(호출)하는 것이 일반적이다.
// Test092 클래스 기반의 두 번째 인스턴스 생성
Test092 ob2 = new Test092();
ob2.a = 1000; //-- 클래스 변수 초기화
ob2.b = 2000; //-- 인스턴스 변수 초기화
System.out.println("┌───확인───────────");
ob2.write();
ob2.print();
//--==>> 클래스 변수 a : 1000
// 인스턴스 변수 b : 2000
// 클래스 변수 a : 1000
System.out.println("┌──ob1 확인───────────");
ob1.write();
ob1.print();
//--==>> 클래스 변수 a : 1000
// 인스턴스 변수 b : 20
// 클래스 변수 a : 1000
}
}
cmd
main() → 클래스 변수 a : 10
main() → 클래스 변수 a : 10
클래스 변수 a : 10
클래스 변수 a : 10
main() → 인스턴스 변수 b : 20
클래스 변수 a : 10
인스턴스 변수 b : 20
main() → 클래스변수 a : 10
클래스 변수 a : 10
┌───확인───────────
클래스 변수 a : 1000
인스턴스 변수 b : 2000
클래스 변수 a : 1000
┌──ob1 확인───────────
클래스 변수 a : 1000
인스턴스 변수 b : 20
클래스 변수 a : 1000
계속하려면 아무 키나 누르십시오 . . .
'Study Note > Java' 카테고리의 다른 글
JAVA_ Test094_ 클래스와 인스턴스 / 클래스와 인스턴스 활용 / 가위, 바위, 보 게임 프로그램 (0) | 2018.04.30 |
---|---|
JAVA_ Test093_ Record 클래스, Sungjuk 클래스, Test093클래스를 이용한 성적 계산 프로그램 작성 (2) | 2018.04.30 |
JAVA_ Test091_ 클래스 설계 / 배열 활용 / 년, 월, 일을 입력받아 요일을 출력하는 프로그램 (0) | 2018.04.30 |
JAVA_ Test090_ 클래스와 인스턴스 / 정보은닉(Information Hiding)과 접근제어지시자 / this (0) | 2018.04.30 |
JAVA_ Test089_ 배열 / 난수처리 / 임의의 난수 큰 수, 작은 수 선택출력 프로그램 (0) | 2018.04.30 |
댓글