Hello

Java 제어자(modifier), static, final, abstract

by 볼빵빵오춘기

제어자(modifier)

  • 클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미 부여한다.
    • 접근 제어자 : public, protected, (default), private ⇒ 4개중 1만 붙일 수 있다.
    • 그 외 : static, final, abstract, native, transient, synchronized, volaile, strictfp
  • 하나의 대상에 여러 제어자를 같이 사용가능(접근 제어자는 하나만)

 

static

  • 메모리에 고정적으로 할당된다.
  • 객체를 따로 생성하지 않고 사용가능하게 만든다.
  • 프로그램이 시작되면 메모리의 static 영역에 적재되고, 프로그램이 종료될 때 해제된다.

static은 위의 의미를 가지므로 static이 붙는 대상(멤버변수, 메서드)이 어디냐에 따라 의미가 어떻게 달라지나 보면 아래와 같다.  

 

멤버변수

  • 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다. 
  • 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능하다. 
  • 클래스가 메모리에 로드될 때 생성된다.

 

메서드

  • 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다. 
  • static메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없다.

 

예제 코드

더보기
class staticTest{
	static int width = 200; // 클래스 변수(static 변수)
	static int height = 200; // 클래스 변수(static 변수)

	static { // 클래스 초기화 블럭
		// static변수의 복잡한 초기화 수행
	}
	
	static int max(int a, int b){ // 클래스 메서드(static 메서드)
		return a > b ? a:b;
	}

}

 

final 

final은 변경불가 의미를 가진다. final이 붙는 대상(클래스,메서드,멤버변수,지역변수)은 어떤 의미를 가지는지 아래와 같다. 

 

클래스

변경될 수 없는 클래스. 확장될 수 없는 클래스가 된다. 

그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다. 

 

메서드

변경될 수 없는 메서드. final로 지정된 메서드는 오버라이딩을 통해 재정의될 수 없다.

 

멤버변수, 지역변수

변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 된다. 

 

 

🧐 가볍게 알고 있기! 대표적인 final 클래스로는 String(보안문제 때문에, ex-pw ), Math( static멤버들의 집합이라서)가 있다.

 

예제 코드

더보기
final class FinalTest{ // 조상이 될 수 없는 클래스
	final int Max_size = 10; // 값을 변경할 수 없는 멤버변수(상수)

	final void getMasSize(){ // 오버라이딩할 수 없는 메서드(변경불가)
		final int LV = Max_size; // 값을 변경할 수 없는 지역변수(상수)
		return Max_size;
	}

}

 

 

abstract

abstract가 붙으면 추상적인, 미완성의 의미를 가진다.

abstract이 붙는 대상(클래스, 메서드)은 어떤 의미를 가지는지 아래와 같다. 

 

클래스

클래스 내에 추상 메서드가 선언되어 있음을 의미한다.

 

메서드

선언부만 작성하고 구현부는 작성하지 않은 추상 메서드

 

예제 코드

더보기
abstract class AbstractTest{ // 추상클래스(추상 메서드를 포함한 클래스)
	abstract void move(); // 추상 메서드(구현부가 없는 메서드)
}
⇒ 객체 사용 불가
⇒ 객체를 언제 만들 수 있나 추상클래스를 상속받아서 완전한 클래스를 만든 후에 객체 생성가능

 

 

 

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기