본문 바로가기
개발/JAVA

[JAVA] 제한자 static / final / abstract

by 로또 2023. 3. 29.
제한자
1. 접근제한자
public > protected > 생략 > private
2. 기타제한자- static (클래스, 지역변수 불가)- final- abstact

Static

1. 변수

- 전역 변수 앞에만 사용 가능 

- 객체 생성 없이 외부에서 class이름.변수이름 호출 가능

- static 변수는 같은 class들이 공유하는 공유 변수

 

예시)

System.out

System.in

 

2. 메소드

- 객체생성 없이 class이름.mehtod이름( ); 으로 호출 가능

- static method는 일반(static이 없는) method 호출 안 됨.

- static method는 static method만 호출 가능.

- static method안에서 this 키워드 사용 안 됨.

⇨ 같은 class 내에 static method 호출할 때 => method이름( [값, ... ] );

 

예시)

int no = Integer.parseInt(”A”);
String s = Integer.toString(4);
double no = Math.random();

public class Integer{
    public static int parseInt(String s) { return i; }
    public static String toString(int i) { return s; }
}

public class Math{
    public static double random() { return d; }
}

// Integer.메소드, Math.메소드 형식으로 쓸 수 있었던 것은 static이 붙어있기 때문
// 어디서나 불러서 쓰니까 public

 

3. 클래스 - 앞에 올 수 없음 

- Inner Class에는 사용 가능

 

4. static 블럭

- class 내부에 선언되어 main method보다 먼저 실행 됨.

- method, 생성자 등의 영역 안에서는 선언 될 수 없음.

- 주로 사전 초기화 작업, DB 연결, 환경설정 및 세팅, 데이터로딩에 사용

- 최초에 딱 한 번만 실행됨

static {
	System.out.println("메인보다 먼저 실행");
}

Final

1. 변수

- 값 변경 불가

- 지역 변수, 전역 변수 둘 다 가능

- 초기값 필수 (자동 초기화 안 됨)

 

2. 메소드

- 재정의(Overriding) 불가능

 

3. 클래스

- 상속 불가능 (생성은 가능)

 

Abstract

미완성된 코드, 아직은 추상적이라는 의미 -> 누군가 가져가서 구체화한 뒤 사용하는 용도

1. 변수 - 앞에 올 수 없음

 

2. 메소드

- 기능이 없음

public abstact void aa(); // 끝
// sub class에서 재정의 하기 위해 존재

3. 클래스

- 생성할 수 없음 (상속만 가능)

- abstract method가 있는 부모를 상속 받으면 자식 클래스는 반드시 abstract method를 재정의해야 함.

그렇지 않으면 자식 클래스도 abstract 선언 해야 함.

public abstract class Employee{}

new Employee(); // 불가능
Employee emp [] = new Employee[5]; // 객체가 아니라 배열방을 생성한 것이므로 가능

댓글