Java - static(정적)

2020. 8. 23. 18:26Java/Java

반응형

java에서 변수나 메서드를 선언할 때 static이 붙는 경우가 있다.

 

static은 정적이라는 뜻으로 정적메서드, 정적변수를 선언하면서 사용된다.

 

정적메서드, 정적변수로 선언을 하게 된다면  모든 객체가 해당 변수, 메서드를 공유 가능하다.

 

단, 정적 변수, 메서드는 일반 변수, 메서드와 다른 메모리 공간을 사용하기에 정적메서드에서 일반적인 방법으로 일반 변수 및 메서드를 사용 불가하다. 

 

사용하기 위해서는 해당 객체를 호출하고 해당객체.변수명을 통해서 사용 가능하다.

 


1. 정적 멤버(클래스 멤버)는 static 키워드가 붙은 메소드 및 필드(전역변수)를 의미한다.
2. static은 여러 인스턴스에서 동일한 데이터나 로직을 공유해야 할 때 사용한다.
3. 정적 멤버는 클래스명으로 바로 사 가능하다.(클래스명.변수명, 클래스명.메소드명();)
4. 정적 메소드에서는 정적 멤버만 사용이 가능하다.(인스턴스 멤버 필요시 인스턴스 생성 후 호출)
    또한 this 키워드와 메소드 오버라이딩 사용이 불가능하다.


예시 코드

class Car {
	
	String color;//색깔
	String model;//모델명
	String owner;//소유자
	//1.static 멤버변수->모든 객체가 공유(O),자주 사용
	static int serialNumber;//차의 총생산량
	
	public Car(String color, String model, String owner) {
		
		this.color = color;//c1.color="Red";
		this.model = model;//c1.model="SM5";
		this.owner = owner;//c1.owner="테스트";
		 serialNumber++;
	}
	//2.차의 생산량=>정적 메서드를 사용=>static 메서드명=>클래스명.정적메서드명(~)
	//주의할점)=>정적메서드 내부에서는 일반 멤버변수의 값을 불러오는 구문을 사용X
	//----------->정적메서드 내부에서는 일반메서드를 사용(this를 사용하지 못하기때문에)
	public static int getNumber() {
		return serialNumber;
	}
	/*
	public static String getColor() {
		return color;
	}
	*/
	//추가 3.초기화 블럭 =>형식) static { 프로그램을 시작할때 맨처음에 사용될 내용을 기술}
	static {  //static 영역 또는 static 블럭=>클래스 내부에서 사용
		System.out.println("제일먼저 main()보다 먼저 실행해야할 구문이 필요하면 사용");
		System.out.println("DB접속이 가능하도록 설정");
		System.out.println("1.static 멤버변수 2.main() 호출 3.정적메서드 4.클래스 메모리로드");
	}
}
public class CarFactory {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Car c1=new Car("Red","SM5","테스트");
        Car c2=new Car("Blue","Sonata","임시");
        Car c3=new Car("Blue","Matiz","임시2");
        Car c4=new Car("Blue","Matiz","임시3");
        //객체명.정적멤버변수->클래스명.정적멤버변수
        System.out.println("지금까지의 차의생산량은?"+c1.serialNumber);
        System.out.println("지금까지의 차의생산량은?"+Car.serialNumber);
        System.out.println("지금까지의 차의생산량은?"+c3.serialNumber);
        System.out.println("지금까지의 차의생산량은?"+Car.getNumber());//클래스명.정적메서드명
	}
}
반응형

'Java > Java' 카테고리의 다른 글

Java - 추상메서드, 인터페이스  (0) 2020.08.23
Java - final  (0) 2020.08.23
Java - 접근지정자  (0) 2020.08.23
Java - 상속(2) - super()  (0) 2020.08.23
Java - 상속(1)  (0) 2020.08.23