제어자(modifier)
영어로 따지면 형용사다.
클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미 부여
접근 제어자
- public, protected, (default), private
- default는 아무것도 아님.
그 외
- static, fina, abstract, synchronized, volatile, strictfp ….
하나의 대상에 여러 제어자를 같이 사용 가능하다.(접근 제어자는 하나만)
public class ModifierTest {
public static final int WIDTH = 200;
}
static - 클래스의, 공통적인
final - 마지막의, 변경될 수 없는
final class FinalTest { //조상이 될 수 없는 클래스
final int MAX_SIZE = 10; //값을 변경할 수 없는 멤버변수(상수)
final void getMaxSize() { //오버라이딩할 수 없는 메서드(변경불가)
final int LV = MAX_SIZE; //값을 변경할 수 없는 지역변수(상수)
return MAX_SIZE;
}
}
abstract - 추상의, 미완성의
추상화에서 배울 것이다.
abstract class AbstractTest { //추상 클래스(추상 메서드를 포함한 클래스)
abstract void move(); //추상 메서드(구현부가 없는 메서드)
}
AbstractTest a = new AbstractTest(); //에러. 추상 클래스의 인스턴스 생성불가
추상 클래스는 미완성 설계도다.
즉 이걸로 객체를 만들 수 없다.
❓ 그럼 어떻게 만드냐
→ 추상클래스를 상속받아서 완전한 클래스를 만든 후에 객체를 생성해야 한다.
접근 제어자(access modifier)
- private
- 같은 클래스 내에서만 접근이 가능하다.
- (default)
- 같은 패키지 내에서만 접근이 가능하다.
- protected
- 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다.
- public
- 접근 제한이 전혀 없다.
접근 범위(넓 > 좁)
public > protected > (default) > private
클래스에는 public, (default)
멤버(멤버 변수, 메서드)에는 4개 다 사용가능
캡슐화
❓ 접근 제어자를 사용하는 이유
- 외부로부터 데이터를 보호하기 위해서
- 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서
public class Time {
public int hour;
}
이렇게 멤버 변수를 public으로 선언하게 되면
`Time t = new Time();`
`t.hour = 23;`
이렇게 외부에서 데이터를 변경할 수 있기 때문에 아래처럼 사용하는것이다.
public class Time {
private int hour;
public void setHour(int hour) {
this.hour = hour;
}
}
'📝 끄적끄적 > 🖥️ 자바의 정석' 카테고리의 다른 글
[자바의 정석] - 다형성 (0) | 2023.09.25 |
---|---|
[자바의 정석] - 추상 클래스와 추상메서드 (0) | 2023.09.25 |
[자바의 정석] 참조변수의 형변환, instanceof 연산자 (0) | 2023.09.24 |
[자바의 정석] 상속, 참조변수 super, 생성자 super() (0) | 2023.09.23 |
[자바의 정석] 생성자, 변수/멤버 변수의 초기화 (0) | 2023.09.22 |
[자바의 정석] static 메서드와 인스턴스 메서드, 오버로딩 (0) | 2023.09.21 |