-
접근 제어 지시자, 정보은닉, 캡슐화JAVA 2022. 6. 13. 10:30
접근 제어 지시자(access modifier)는 클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정한다.
private : 같은 클래스 내부에서만 접근이 가능하다. (외부 클래스, 상속관계클래스에서도 접근 불가)
아무것도 없음(default) : 같은 패키지 내부에서만 접근가능하다. (상속관계여도 패키지 다르면 접근 불가)
protected : 같은 패키지나 상속관계의 클래스에서 접근 가능하고, 그 외 외부에선 접근할 수 없음
public : 클래스 외부 어디서나 접근 할 수 있다.
위같은 키워드들이 있고, private 으로 선언된 멤버변수에 대해 접근하려고, get(), set() 키워드가 있다.
예시를 들어보자. BirthDay클래스를 만들어보자.
package ch10; public class BirthDay { private int day; private int month; private int year; private boolean isValid; public int getDay() { return day; } public void setDay(int day) { this.day = day; } public int getMonth() { return month; } public void setMonth(int month) { if (month < 1 || month > 12) { isValid = false; } else { isValid = true; this.month = month; } } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public void showDate() { if (isValid) { System.out.println(year+"년"+month+"월"+day+"일 입니다."); } else { System.out.println("유효하지 않은 날짜입니다."); } } }
이렇게, day month year변수를 선언하고 private 접근제어지시자를 이용했다. 그리곤, private을 썼기 때문에 get , set 을 각각 써준다. 두개의 메소드를 여기서 제공해줘야 test클래스에서 사용가능하다.
get은 return값이 있어야하고, set은 받은 day를 this를 이용해 객체를 만들어 쓸 때 속성으로 이용할 수 있게 한다.
그리고, isValid란 변수를 만들고 boolean자료형으로 만들어서 기본값이 false이므로 showDate()함수에서 true 면 날짜를 출력해주고, false면 유효하지 않습니다를 출력해주게 만들었다. 여기서 isValid가 private으로 제어되지만, public메서드가 제공되면 접근은 가능하므로, showDate()에서 사용할 수 있다.
그리곤 BirthDayTest클래스를 만들어서
public class BirthDayTest { public static void main(String[] args) { // TODO Auto-generated method stub BirthDay date = new BirthDay(); date.setYear(2019); date.setMonth(12); date.setDay(30); date.showDate(); } }
date 인스턴스를 만들어주고, setYear, setMonth, setDay로 각각 날짜를 정해주면 된다.
근데 만약, private를 안쓰면 date.month = 100 이렇게 값을 마음대로 바꿔버릴 수 있게 된다.
마지막으로, 캡슐화란 private 지시자를 이용해 정보를 감추고 거기서 꼭 필요한 정보와 기능만 외부에 오픈하는 것을 의미한다.
대부분의 멤버 변수와 메소드를 감추고 외부에 통합된 인터페이스만은 제공해서 일관된 기능을 구현하게 한다.
예를 들면, 변수나 여러 함수들을 private 지시자로 선언하고, 사용할 하나의 함수만 public 지시자로 선언을 해서, 그 안에 함수들을 사용해준다. 그러면 외부에서 쓸 수 있는 함수는 public으로 선언한 것 하나만 사용할 수 있게 된다.
'JAVA' 카테고리의 다른 글
static변수와 메서드 +싱글톤패턴 (0) 2022.06.14 this (0) 2022.06.13 참조 자료형 변수 (0) 2022.05.23 함수와 메서드(인스턴스, 생성자) (0) 2022.05.18 객체와 객체지향이란? (0) 2022.05.16