접근 제한자
- 접근 제한자를 사용하여 클래스, 메서드, 변수 등의 접근 범위를 제어할 수 있다.
- 접근 제한자는 클래스의 캡슐화를 촉진하고 데이터를 안전하게 보호한다.
public
- 가장 넓은 범위의 접근 제한자이다.
- 'public'으로 선언된 클래스, 메서드, 변수 등은 모든 패키지에서 접근 가능하다.
- 다른 패키지에서 해당 클래스에 접근하여 인스턴스를 생성하거나 해당 메서드 및 변수 사용이 가능하다.
public class People {
public String name;
public void myName() {
System.out.println(name);
}
}
- 위의 class(클래스), name(변수명), myName()(메서드)는 모두 다른 클래스에서 접근이 가능하다.
protected
- 같은 패키지와 하위 클래스에서만 접근이 가능한 접근 제한자
- 해당 클래스와 같은 패키지에서는 자유롭게 접근 가능
- 다른 패키지에서는 해당 클래스의 하위 클래스에서만 접근이 가능하다.
public class People {
protected String name;
protected void myName() {
System.out.println(name);
}
}
public class Student extends Person {
public void introduce() {
System.out.println("이름: " + this.name);
this.sayHello();
}
}
- people 클래스의 name 변수와 myName() 메서드는 protected로 선언되었다.
- Student 클래스는 extends를 통하여 Person 클래스를 상속 받아 인스턴스에서 Person클래스의 protected 멤버에 접근이 가능하다.
default
- 접근 제한자를 아무것도 명시하지 않는다면 default 접근 제한자를 가지게 된다.
- default 접근 제한자는 같은 패키지에서만 접근 가능하다.
게터와 세터
- Private로 선언된 필드는 해당 클래스 내부에서만 접근이 가능하다.
- 외부에서 접근하려면 게터와 세터 메소드를 사용한다.
- 메소드를 통해 간접적으로 접근하게 하는 것 = 캡슐화
- 클래스의 내부 구조를 외부로부터 감추며, 오직 메소드를 통해 접근 가능하게 한다.
게터(Getter)
- Private로 선언된 필드의 값을 반환하는 메소드
- 외부에서 해당 필드의 값을 가져와야 할 때 게터를 호출하여 값을 반환
세터(Setter)
- Private로 선언된 필드의 값을 설정하는 메소드
- 외부에서 해당 필드의 값을 변경해야 하는 경우, 세터를 호출하여 값을 설정
- 값의 유효성 검증을 한다.(잘못된 값이 필드에 들어가는 것을 방지)
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age < 0) {
throw new IllegalArgumentException("나이는 0보다 작을 수 없습니다.");
}
this.age = age;
}
}
- name과 age는 private으로 선언
- getName()과 getAge()메소드를 통해 값을 반환
- setName()과 setAge()메소드를 통해 값을 설정