Java 접근 제한자, Getter, Setter

이은엽·2023년 5월 9일
0

접근 제한자

- 접근 제한자를 사용하여 클래스, 메서드, 변수 등의 접근 범위를 제어할 수 있다.
- 접근 제한자는 클래스의 캡슐화를 촉진하고 데이터를 안전하게 보호한다.

public

- 가장 넓은 범위의 접근 제한자이다.
- 'public'으로 선언된 클래스, 메서드, 변수 등은 모든 패키지에서 접근 가능하다.
- 다른 패키지에서 해당 클래스에 접근하여 인스턴스를 생성하거나 해당 메서드 및 변수 사용이 가능하다.
    public class People {
    public String name; // public으로 선언된 변수

    public void myName() { // public으로 선언된 메서드
        System.out.println(name);
    	}
	}
- 위의 class(클래스), name(변수명), myName()(메서드)는 모두 다른 클래스에서 접근이 가능하다.

protected

- 같은 패키지와 하위 클래스에서만 접근이 가능한 접근 제한자
- 해당 클래스와 같은 패키지에서는 자유롭게 접근 가능
- 다른 패키지에서는 해당 클래스의 하위 클래스에서만 접근이 가능하다.
    public class People {
    protected String name; // protected로 선언된 변수

    protected void myName() { // protected로 선언된 메서드
        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()메소드를 통해 값을 설정

0개의 댓글