Java/Java 기본

제어자

kimjy 2023. 7. 23. 23:11

이유가 어찌되었던 한국에서 가장 많이 쓰이고 있는 언어인 자바가 계속 궁금했었고, 좋은 기회로 사이드프로젝트를 진행하게되어서 자바로 구현해보고자 마음먹었습니다. 이를 위해서 자바 기초 및 스프링을 공부했는데, 제어자가 항상 헷갈려서 정리해놓고자 합니다.

아마 다음 포스팅에는 Optional에 대해 작성하지 않을까 싶습니다.

 

자바에는 클래스, 변수 혹은 메서드의 선언부에 함께 사용되는 여러 제어자가 있는데, 여러 제어자가 있기에 따로 정리하고자 합니다.

 

접근제어자: public, protected, default, private

그 외: static, final, abstract, native, transient, synchronized, volatile, strictfp

 

static:

- 클래스 변수 혹은 클래스 메서드를 생성할 때 사용

- 클래스가 메모리에 로드될 때 생성

- 인스턴스끼리 공유

 

final:

- 변수에 사용되면 값을 변경할 수 없는 상수

- 메서드에 사용되면 오버라이딩이 불가능

-클래스에 사용되면 확장할 수 없는 자손클래스를 정의하지 못함

-인스턴스 변수의 경우에는 생성자에서 초기화가 가능

 

abstract:

- 클래스에 사용되면 추상 메서드가 선언되었음을 의미 -> 추상클래스 생성에 사용됨

- 메서드에 사용되면 추상 메서드임을 의미 -> 선언부만 작성하고 구현부는 작성하지 않음

abstract public void myMethod(int a, int b);

 

private: 

- 같은 클래스 내에서만 접근이 가능

 

default:

- 같은 패키지 내에서만 접근이 가능

 

protected:

- 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근이 가능

 

public:

- 접근 제한이 없음

 

주의사항

1. 메서드에 static과 absract를 같이 사용하면 안됨.

 - static 메서드는 몸통이 있는 메서드에서만 사용이 가능하기 때문(인스턴스 없는 경우에도 사용이 가능한데, abstract가 붙어있다면..?)

2. 클래스에 abstract와 final을 동시에 사용 불가

3. abstract 메서드의 접근 제어자가 private일 수 없음

- 자손 클래스에서 메서드를 구현해야 하는데, private으로 구현하면 자손 클래스에서 접근이 불가능하기 때문!

4. 메서드에 private과 final을 같이 쓸 필요는 없음.

- private인 메서드는 오버라이딩이 되지 않기 때문