접근제어자 Private&Public 그리고 Getter&Setter

논노·2021년 8월 4일
0

JavaBasics

목록 보기
1/1

접근제어자(Access Modifier)

자바에는 객체에 대한 권한을 제어하고 정보를 은닉하는(data hiding) '접근 제어자'라는 것이 있다.
접근제어자는 클래스 외부에서 해당 클래스 내의 정보에 접근하지 못하도록 제한하는 역할을 한다.

자바의 접근제어자는 총 이렇게 4가지로 이루어져 있다.

  1. private
  2. default
  3. protected
  4. public

그중 내가 오늘 배운 것은private와 public이다. 더 많은 접근제어자는 천천히 공부하며 알아볼 예정이니 이 포스트에서 다루지 않을 것이다.


public class Person {
    String name;
    private int age;
}

위를 보면 Person이라는 class에서
name 변수를 public으로 선언하였고
바로 아래의 age 변수는 private으로 선언하였다.

public

위의 name처럼 인스턴스의 변수 앞에 아무 것도 선언하지 않으면 기본적으로 public 변수로 선언된다. public으로 선언된 인스턴스 변수는 외부 클래스에서 직접적으로 접근할 수 있다.

private

인스턴스의 변수 맨 앞에 접근제어자 private를 써주면 그 변수는 해당 클래스 내에서만 접근이 가능해진다.
외부 클래스에서는 해당 클래스의 private 변수에 접근하는 권한을 잃는다.

public class main {
	Person p1 = new Person();
	p1.name = '논노' // 정상적으로 할당됨
	p1.age = 17 // 에러가 난다
}

위처럼 외부 클래스 main에서 Person 클래스 인스턴스 변수를 할당해주려고 할 때, public 변수인 name에는 p1.name 으로 바로 접근이 가능하지만 private 변수인 age 에는 접근이 불가하다.

그렇다면 우야꼬...

외부 클래스의 private 변수에는 아예 접근할 수 없는 걸까?
조금 복잡하지만 가능은 하다.

  1. 해당 클래스에 private인 변수에 접근하는 public 메서드(getter, setter)를 만들고
  2. 그 public 메서드를 외부에서 호출해주면 된다.

Getter, Setter

public class Person {
    private int age;

    public void setAge(int newAge) {
        if (newAge > 0) {
            age = newAge;
        }
    }

    public int getAge() {
        return age;
    }
}

private인 age 변수를 세팅해주는 setAge() 메소드를 작성했고 실수로 이상한 값(음수)를 받지 않기 위해 if문도 메소드 내에 작성해주었다.

getAge() 메소드로는 age를 그대로 리턴해주어 값을 가져올 수 있게 했다.

이렇게 두 메소드를 작성해두고 외부 클래스에서 setAge()getAge()를 호출하면 private 변수에 접근할 수 있다.
이렇게 private 한 인스턴스에 접근할 수 있게 하는 메소드'setter' 메소드와 'getter' 메소드라고 부른다.

아래 코드를 참고하여 어떤 식으로 getter와 setter를 사용하는지 확인해보자.


public class main {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.setAge(17); // age에 28이라는 값이 할당된다.
        p1.setAge(-10); // 음수값은 무시된다.
        System.out.println(p1.getAge()); // 17이 리턴되어 출력. 
    }
}

위에 말했다시피, 자바의 접근제어자는 총 4가지로 이루어져 있다.
아래는 자바의 접근제어자를 권한이 센 순서대로 나열한 것이다. 본 포스팅에서는 1번 private와 4번 public에 대해서만 다루었다.

  1. private
  2. default
  3. protected
  4. public
profile
말랑말랑 공부하기

0개의 댓글