본문 바로가기
JAVA

[JAVA] static과 non-static 차이점

by 자바비터 2022. 3. 9.

▶ static 멤버란?

객체마다 생기는 것이 아닌 클래스당 하나만 생성할 수 있으며, 클래스 멤버라고도 부른다.

객체를 생성하지 않고 사용 가능하다.

  

  

▶ static 멤버의 특성

공유적 특성 - static 멤버들은 클래스 당 하나만 생성

시간적 특성 - static 멤버들은 클래스가 로딩될 때 공간 할당

공유의 특성 - static 멤버들은 동일한 클래스의 모든 객체에 의해 공유

  

  

▶ 기본이 되는 non-static 멤버의 특성

공간적 특성 : 멤버들은 객체마다 독립적으로 별도 존재, 인스턴스 멤버라고도 부름

시간적 특성 : 필드와 메소드는 객체 생성 후 비로소 사용 가능

비공유 특성 : 멤버들은 다른 객체에 의해 공유되지 않고 배타적

  

 

static 멤버 예제
public class Calc {
	//클래스 내 메소드가 모두 static 멤버이므로 객체 생성 없이도 바로 사용 가능하다.
	//abs메소드는 삼항연산자를 활용해 a>0 ? a : -a
	//a가 0보다 크면 +, 0보다 작으면 -a로 만들어 절대값을 구한다.
	public static int abs(int a) {
		return a > 0 ? a:-a;
	}
	//max나 min 메소드도 삼항 연산자를 활용한다.
	//큰 수 구하기
	public static int max(int a, int b) {
		return (a > b) ? a : b;
	}
	//작은 수 구하기
	public static int min(int a, int b) {
		return (a > b) ? b : a;
	}
}

   

       

public class Ex08 {

	public static void main(String[] args) {
		// static 메소드 이므로 객체 생성 없이 calc 클래스명을 그대로 사용할 수 있다.
		System.out.println(Calc.abs(-5));
		System.out.println(Calc.max(10, 8));
		System.out.println(Calc.min(-3, -8));
	}
}

 

 

언제 어디서든 호출할 수 있는 전역함수 static, 즉 정적멤버는 객체 생성없이 사용이 가능하며

정적메소드는 정적필드만 사용가능 하고 정적메소드만 호출가능하다.

그리고 this 키워드 사용과 오버라이딩이 불가능 하다.

 

여러 인스턴스들이 동일한 메소드, 필드가 필요할 때 쉽게 호출하여 바로 접근할 수 있도록한다.

 

댓글