본문 바로가기

국비과정/JAVA

20230616 _[11일차]_03. 여러생성자 만들기 연습 & static 변수

[ 여러개의 생성자 만들기 ]

 

package Car;
// Car 클래스 안에 여러 생성자 Car 만들기연습

public class Car {
	// 필드 = 인스턴스 변수, 클래스 변수
	static String company = "현대자동차";	// 클래스 변수 = 클래스명.변수명
	String model;							// 인스턴스 변수 = 인스턴스변수명.변수명
	String color;							
	int maxSpeed;
	
	Car(){
		System.out.println("자동차를 만듭니다.");
	}
	
	Car(String model) {
		this();
		this.model = model;
	}
	
	Car(String model, String color){
//		this.model = model;
		this(model);
		this.color = color;
	}
	
	Car(String model, String color, int maxSpeed){
//		this.model = model;
//		this.color = color;
		this(model, color);	// model, color 순서중요
		this.maxSpeed = maxSpeed;
	}
	
	
	public static void main(String[] args) {
		// static붙은 변수 호출하기
		// 클래스명.static붙은 변수명;
		Car.company = "현대자동차입니다.";	// 아래에서 이 변수를 공유해서 씀.*
		
		Car car1 = new Car();
		System.out.println(Car.company);	// 자동차를 만듭니다. 현대자동차입니다.*
		System.out.println(car1.model);		// null
		
		Car.company = "기아입니다.";
		
		Car car2 = new Car("자가용");
		System.out.println(Car.company);	// 자동차를 만듭니다. 기아입니다.*
		System.out.println(car2.model);		// 자가용
				
		Car car3 = new Car("자가용", "빨강");
		System.out.println(car3.company);	// 자동차를 만듭니다. 기아입니다.**
		System.out.println(car3.model);		// 자가용
		System.out.println(car3.color);		// 빨강
		
		Car car4 = new Car("택시", "검정", 200);
		System.out.println(car4.company);	// 자동차를 만듭니다. 기아입니다.**
		System.out.println(car4.model);		// 택시
		System.out.println(car4.color);		// 검정
		System.out.println(car4.maxSpeed);	// 200
		
	}
}

* static 변수는 그 객체를 공유해서 씀 (static String company = "현대자동차"; )
인스턴스화 하며 새로운 car2라는 객체를 생성했으니 거기에서 값을 가져오는데
static 변수값은 인스턴스 car2가 아닌 class Car 자체에만 존재함. => 따라서 class Car 에서 값을 가져옴.

 

** Car.company 가 맞는 표현이지만, car3.company 로 기재해도 값은 불러와짐.


[ static 키워드 ]

static은 정적 이라는 의미가 있습니다.

 

자바에서는 정적 개념과 동적 개념이 있습니다

쉽게 이야기 하면 정적은 클래스가 로드되는 시점이고

동적은 로드된 클래스가 실행되는 이후를 이야기합니다.

 

이 중 객체는 동적 데이터입니다.

프로그램이 실행된 이후에 발생되는 형태입니다.


[ static 변수 ] _ static 유무의 차이

package Car;

class Counter{
	int count;		// 초기값은 0으로 저장됨
	public Counter() {
		count++;
	}
}


public class Static01 {
	public static void main(String[] args) {
		Counter c1 = new Counter();	// 호출때마다 count++
		Counter c2 = new Counter();
		Counter c3 = new Counter();
		System.out.println(c3.count);	// 1
		
	}

}

package Car;

class Counter{
	static int count;		// 초기값은 0으로 저장됨
	public Counter() {
		count++;
	}
	
}



public class Static01 {
	public static void main(String[] args) {
		Counter c1 = new Counter();	// 호출때마다 count++
		Counter c2 = new Counter();
		Counter c3 = new Counter();
		System.out.println(c3.count);	// 3
		
	}

}

* 인스턴스 변수 : 각각의 객체(힙 영역)마다 그 안에서 고유한 값 가짐.
                             인스턴스 변수에 static 붙여주면 그 자체로 고유한 값이 됨
                            > 인스턴스에(객체에) 포함되지 않음.

static붙은 변수는 그 객체 자체를 공유해서 씀 (공유변수)
final 까지 붙으면 값도 수정불가.


[ 정처기 기출문제 ] _ static관련

 

(1번)

https://chobopark.tistory.com/217

 

[2021년 3회] 정보처리기사 실기 기출문제!! (feat.복원)

안녕하세요. 2021년 3회 정보처리기사 실기 기출문제를 정리해보았습니다. 기출문제이면서 보완설명을 덧붙여 정리하였으니 도움이 되었으면 좋겠습니다. (녹색은 답 / 파랑색은 해설입니다.) 정

chobopark.tistory.com


(17번)

https://chobopark.tistory.com/210

 

[2021년 2회] 정보처리기사 실기 기출문제!!

안녕하세요. 2021년 2회 정보처리기사 실기 기출문제를 정리해보았습니다. 기출문제이면서 보완설명을 덧붙여 정리하였으니 도움이 되었으면 좋겠습니다. (녹색은 답 / 파랑색은 해설입니다.) 정

chobopark.tistory.com


(1번)

package car;

class Static{
	
	public int a = 20;
	static int b = 0;
	
}

public class Test02 {
	public static void main(String[] args) {

		int a;
		a = 10;
		Static.b = a;	// 10
		
		Static st = new Static();  
		
		System.out.println(Static.b++);	// ** 10  >> 클래스 Static 자체에서 static int b를 불러옴. ** 후행증감 주의
		System.out.println(st.b);	// ** 11      >> System.out.println(Static.b); 가 맞는 표현인데 st.b도 결과값이 똑같이 나오도록 설정되어 있음**
		System.out.println(a);		// 10
		System.out.println(st.a);	// 20    --> 인스턴스화 했을때 생성된 객체에서 a를 불러옴

	}
}

 

* Static st = new Static();   --> 인스턴스화 했을때 생성된 객체에는 (static 변수 빼고) public int a 만 저장됨!