제어자 modifier
: 클래스와 클래스의 멤버에 부가적인 의미 부여 (=형용사)
- 접근제어자: public, protected, private, (default)
- 그외: static, final, abstract, native, transient ...
- 하나의 대상에 여러 제어자를 같이 사용 가능 (접근제어자는 하나만)
public class Modifier {
public static final int width = 200;
public static void main(String[] args) {
System.out.println(width);
}
}
static: 클래스의, 공통적인
- static 멤버변수
- 모든 인스턴스에 공통적으로 사용된다
- 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능하다
- 클래스가 메모리에 로드될 때 생성된다
- static 메서드
- 인스턴스를 생성하지 않고도 호출이 가능하다.
- static 메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없다.
final: 마지막의, 변경될 수 없는
- final 클래스
- 변경될 수 없는 클래스, 확장될 수 없는 클래스
- final 메서드
- 변경될 수 없는 메서드 → 오버라이딩을 통해 재정의 될 수 없다.
- final 멤버변수, 지역변수
- 값을 변경할 수 없는 상수
abstract: 추상의, 미완성의
- abstract 클래스
- 클래스 내에 추상 메서드가 선언되어 있음을 의미한다.
- abstract 메서드
- 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 의미한다.
abstract class Abst {
abstract void movie(); // 구현부가 없음
}
Abst a = new Abst(); // 에러 발생 - 추상 클래스의 인스턴스 생성 불가
→ 상속을 통해 추상 클래스를 구현해서 객체 생성 가능하다.
접근 제어자
접근 범위: public > protected > default > private
- private: 같은 클래스 내에서만 접근 가능
- (default): 같은 패키지 내에서만 접근 가능
- protected: 같은 패키지 내에서, 다른 패키지의 자손 클래스에서 접근 가능
- public: 접근 제한 없음
캡슐화
접근 제어자를 사용하는 이유?
- 외부로부터 데이터를 보호하기 위해서
- 외부에는 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서
접근 제어자 private으로 외부에서 직접 접근하지 못하도록 해야 한다.
- 클래스 내부에서만 사용되면 public으로 선언할 필요가 없다. private으로 선언한다
- → 수정하게 될 때 테스트를 해야 하는데 테스트 범위만 넓어질 뿐
public class Time {
private int hour;
public int getHour() {
return hour;
}
public void setHour(int hour) {
if(isValidHour(hour)) return; // 값을 보호함
this.hour = hour;
}
private boolean isValidHour(int hour) {
return hour < 0 || hour > 23;
}
}
Time t = new Time();
t.hour = 25; // 직접 접근 하는 예 -> private으로 선언하면 에러 발생
t.setHour(25); // 간접 접근
728x90
반응형
'객체지향 OOP' 카테고리의 다른 글
[자바의정석 기초 객체지향 개념] 추상클래스 (0) | 2022.05.30 |
---|---|
[자바의정석 기초 객체지향 개념] 다형성 (0) | 2022.05.30 |
[자바의정석 기초 객체지향 개념] package, import (0) | 2022.05.30 |
[자바의정석 기초 객체지향 개념] 참조변수 super, 생성자 super() (0) | 2022.05.30 |
[자바의정석 기초 객체지향 개념] 오버로딩 VS 오버라이딩 (0) | 2022.05.30 |
댓글