제어자(modifier)
클래스와 클래스의 멤버(멤버 변수, 메서드) 에 부가적인 의미 부여
▶ 접근제어자 : public, protected, (default), private
▶ 그 외 : static, final, abstract, native, transient, synchronized
main() 메서드를 가지지 않는 대부분의 클래스는 외부 클래스에서 이용할 목적으로 설계된 라이브러리 클래스이다.
라이브러리 클래스를 설계할 때에는 외부 클래스에서 접근할 수 있는 멤버와 접근할 수 없는 멤버로 구분해서 필드, 생성자, 메서드를 설계한다.
객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나 객체의 특정 데이터를 보호하기 위해 해당 필드에 접근하지 못하도록 막아야 한다. 또한 특정 메서드를 호출할 수 없도록 제한 할 수도 있다.
자바는 이러한 기능을 구현하지 위해 접근 제한자( Access Modifier)를 제공하고 있다.

접근제한 | 적용대상 | 접근할 수 없는 클래스 |
public | 클래스,필드, 생성자, 메서드 | 없음 |
protected | 필드, 생성자, 메서드 | 자식 클래스가 아닌 다른 패키지에 소속된 클래스 |
default | 클래스, 필드, 생성자, 메서드 | 다른 패키지에 소속된 클래스 |
private | 필드, 생성자, 메서드 | 모든 외부 클래스 |

접근범위
- public > protected > (default) > private
클래스의 접근 제한
클래스를 선언할 때 고려해야 할 사항은 같은 패키지내에서만 사용할 것인지, 아니면 다른 패키지에서도 사용할 수 있도록 할 것인지를 결정해야한다. 클래스에 적용할 수 있는 접근제한은 public, default 두가지 이다.

1. default 접근제한
클래스를 선언할 때 public을 생략했다면 클래스는 default 접근 제한을 가진다. 클래스가 default 접근제한을 가지게 된다면 같은 패키지에서는 아무런 제한 없이 사용할 수 있지만 다른 패키지에서는 사용할 수 없도록 제한된다.
2. public 접근제한
클래스를 선언할 때 public 접근제한자를 붙였다면 클래스는 public 접근제한을 가진다. 클래스가 public 접근제한을 가지게 되면 같은 패키지뿐만 아니라 다른 패키지에서도 아무런 제한없이 사용할 수 있다.
생성자의 접근 제한

접근제어자를 사용하는 이유
- 외부로부터 데이터를 보호하기 위함
public class Time {
public int hour;
public int minute;
public int second;
}
Time t = new Time();
t.hour = 25; //멤버변수에 직접 접근
Time 클래스의 인스턴스변수들을 보면 public 타입으로 선언되어 있다. t.hour = 25; 대입연산자를 사용하여 멤버변수에 직접 접근할 수 있다. 외부접근 막기 위해 코드를 변경해보면 아래와 같다.
public class Time {
private int hour;
private int minute;
private int second;
public int getHour() {return hour;}
public void setHour(int hour) {
if( hour < 0 || hour > 23) return;
this.hour = hour;
}
접근제어자를 private으로 하여 외부에서 직접 접근하지 못하도록 한다. 메서드는 public을 사용하여 외부에서 메서드를 통해서 인스턴스변수에 접근하도록 한다. 즉 메서드를 통해 간접접근을 허용시킨다.
static
java_6_정적멤버와 static
정적멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메서드를 말한다. 각각 정적필드, 정적 메서드라고 부른다. 정적멤버는 객체(인스턴스)에 소속된 멤버가 아
float.tistory.com
final
https://float.tistory.com/111?category=1008448
java_6_final
final 필드선언 final 타입 필드 [= 초기값]; final 필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정 할 수 없다. 제어자 대상 의미 final 클래스 변경될 수 없는 클래
float.tistory.com
'객체지향' 카테고리의 다른 글
참조변수의 형변환 (0) | 2021.11.08 |
---|---|
다형성 (0) | 2021.11.08 |
[상속] 참조변수 super, 생성자 super() (0) | 2021.11.05 |
[상속] 오버라이딩 (0) | 2021.11.05 |
[상속] 단일상속 , Object클래스 (0) | 2021.11.05 |
제어자(modifier)
클래스와 클래스의 멤버(멤버 변수, 메서드) 에 부가적인 의미 부여
▶ 접근제어자 : public, protected, (default), private
▶ 그 외 : static, final, abstract, native, transient, synchronized
main() 메서드를 가지지 않는 대부분의 클래스는 외부 클래스에서 이용할 목적으로 설계된 라이브러리 클래스이다.
라이브러리 클래스를 설계할 때에는 외부 클래스에서 접근할 수 있는 멤버와 접근할 수 없는 멤버로 구분해서 필드, 생성자, 메서드를 설계한다.
객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나 객체의 특정 데이터를 보호하기 위해 해당 필드에 접근하지 못하도록 막아야 한다. 또한 특정 메서드를 호출할 수 없도록 제한 할 수도 있다.
자바는 이러한 기능을 구현하지 위해 접근 제한자( Access Modifier)를 제공하고 있다.

접근제한 | 적용대상 | 접근할 수 없는 클래스 |
public | 클래스,필드, 생성자, 메서드 | 없음 |
protected | 필드, 생성자, 메서드 | 자식 클래스가 아닌 다른 패키지에 소속된 클래스 |
default | 클래스, 필드, 생성자, 메서드 | 다른 패키지에 소속된 클래스 |
private | 필드, 생성자, 메서드 | 모든 외부 클래스 |

접근범위
- public > protected > (default) > private
클래스의 접근 제한
클래스를 선언할 때 고려해야 할 사항은 같은 패키지내에서만 사용할 것인지, 아니면 다른 패키지에서도 사용할 수 있도록 할 것인지를 결정해야한다. 클래스에 적용할 수 있는 접근제한은 public, default 두가지 이다.

1. default 접근제한
클래스를 선언할 때 public을 생략했다면 클래스는 default 접근 제한을 가진다. 클래스가 default 접근제한을 가지게 된다면 같은 패키지에서는 아무런 제한 없이 사용할 수 있지만 다른 패키지에서는 사용할 수 없도록 제한된다.
2. public 접근제한
클래스를 선언할 때 public 접근제한자를 붙였다면 클래스는 public 접근제한을 가진다. 클래스가 public 접근제한을 가지게 되면 같은 패키지뿐만 아니라 다른 패키지에서도 아무런 제한없이 사용할 수 있다.
생성자의 접근 제한

접근제어자를 사용하는 이유
- 외부로부터 데이터를 보호하기 위함
public class Time {
public int hour;
public int minute;
public int second;
}
Time t = new Time();
t.hour = 25; //멤버변수에 직접 접근
Time 클래스의 인스턴스변수들을 보면 public 타입으로 선언되어 있다. t.hour = 25; 대입연산자를 사용하여 멤버변수에 직접 접근할 수 있다. 외부접근 막기 위해 코드를 변경해보면 아래와 같다.
public class Time {
private int hour;
private int minute;
private int second;
public int getHour() {return hour;}
public void setHour(int hour) {
if( hour < 0 || hour > 23) return;
this.hour = hour;
}
접근제어자를 private으로 하여 외부에서 직접 접근하지 못하도록 한다. 메서드는 public을 사용하여 외부에서 메서드를 통해서 인스턴스변수에 접근하도록 한다. 즉 메서드를 통해 간접접근을 허용시킨다.
static
java_6_정적멤버와 static
정적멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메서드를 말한다. 각각 정적필드, 정적 메서드라고 부른다. 정적멤버는 객체(인스턴스)에 소속된 멤버가 아
float.tistory.com
final
https://float.tistory.com/111?category=1008448
java_6_final
final 필드선언 final 타입 필드 [= 초기값]; final 필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정 할 수 없다. 제어자 대상 의미 final 클래스 변경될 수 없는 클래
float.tistory.com
'객체지향' 카테고리의 다른 글
참조변수의 형변환 (0) | 2021.11.08 |
---|---|
다형성 (0) | 2021.11.08 |
[상속] 참조변수 super, 생성자 super() (0) | 2021.11.05 |
[상속] 오버라이딩 (0) | 2021.11.05 |
[상속] 단일상속 , Object클래스 (0) | 2021.11.05 |