일단 해보는 코딩/Java

[Java] 인스턴스 변수와 클래스 변수

eun_zoey2 2022. 8. 7. 15:55
728x90

★복습

더보기

클래스 생성 방법

class 클래스 명 { 변수 혹은 메서드 }

 

객체(인스턴스) 생성 방법

클래스_명 참조변수 = new 클래스_명 ( );

 

객체 내 필드 접근 방법(도트 연산자)

참조 변수. 필드명

 

1. 인스턴스 변수 : 객체마다 갖는 고유한 변수

        - 인스턴스를 생성할 때 만들어지며, 각각의 인스턴스마다 자신의 값을 갖고 있음

        - 각 인스턴스마다 다른 값을 가져야 할 때 생성

        - 인스턴스 생성 시 (new 클래스_명();) 메모리에 생성

Ex) Hello 스포츠 센터 회원에 대한 정보를 관리할 클래스 생성 , 회원들마다 고유한 값을 갖고 있기 때문에 인스턴스 변수가 필요

 

1.1 인스턴스 변수 생성 방법

 

 

2. 클래스 변수 : 모든 객체가 동일한 값을 갖는 변수

        - 모든 인스턴스가 같은 저장공간을 공유

        - 클래스가 처음 메모리에 로딩될 때 생성

        - 인스턴스 없이 사용 가능

 

2.1 클래스 변수 생성 방법

* 변수 선언 시 자료형 앞에 static 키워드를 붙인다 ~!

 

 

예제 1)

 

package Home21;

public class SportsMain {
	public static void main(String[] args) {
		Member member1 = new Member();
		Member member2 = new Member();
		Member member3 = new Member();
		Member member4 = new Member();
		
		//member1.centerName="Love";
		member1.name = "김철수";
		member1.age = 32;
		member1.gender = "남자";
		
		//member2.centerName="Love";
		member2.name = "김민호";
		member2.age = 28;
		member2.gender = "남자";
		
		//member3.centerName="Love";
		member3.name = "이영희";
		member3.age = 24;
		member3.gender = "여자";
		
		//member4.centerName="Love";
		member4.name = "고석천";
		member4.age = 32;
		member4.gender = "남자";

		Member.centerName="broken Love";
		System.out.println("member1 -----");
		member1.info();
		System.out.println("member2 -----");
		member2.info();
		System.out.println("member3 -----");
		member3.info();
		System.out.println("member4 -----");
		member4.info();
	}
}
class Member {
	static String centerName="Love";	//클래스 변수
	String name;	// 인스턴스 변수
	int age;	// 인스턴스 변수
	String gender;	// 인스턴스 변수
	void info() {	// 각각의 정보를 출력할 ...
		System.out.println("centerName : " + centerName);
		System.out.println("name : " + name);
		System.out.println("age : " + age);
		System.out.println("gender : " + gender);
		
	}
	
}

클래스 변수와 인스턴스 변수의 차이 알아보기 

더보기
package Home21;

public class Class_practice_3 {
	public static void main(String[] args) {
		System.out.println(Car.wheel);
		// System.out.println(Car.speed); -> 오류발생
		
		Car myCar1 = new Car();
		System.out.println(myCar1.speed);
		
		Car myCar2 = new Car();
		
		System.out.println("<변경전>");
		System.out.println("myCar1.wheel" + myCar1.wheel);
		System.out.println("myCar2.wheel" + myCar2.wheel);
		System.out.println("myCar1.speed" + myCar1.speed);
		System.out.println("myCar2.speed" +myCar2.speed);
		
		myCar1.speed=100;
		myCar2.wheel=5;
		
		System.out.println("<변경후>");
		System.out.println("myCar1.wheel" + myCar1.wheel);
		System.out.println("myCar2.wheel" + myCar2.wheel);
		System.out.println("myCar1.speed" + myCar1.speed);
		System.out.println("myCar2.speed" +myCar2.speed);
		}
	}

class Car{
	static int wheel=4;	
	// 클래스변수 : 모든 객체가 공통적으로 갖고 있는 주소 값 (동요함)
	int speed;	
	//인스턴스변수 : 객체마다 고유한 값을 가지기 때문에 값을 새로 주어도 변경되지 않음
	
}