컴퓨터공학 💻 도서관📚
Part2. 2-10 접근 제어 지시자 본문
접근 제어 지시자 (accesss modifier) : 클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를
지정하는 키워드
private : 같은 클래스 내부에서만 접근 가능 (외부 클래스, 상속 관계의 클래스에서도 접근 불가)
아무것도 없음 (default) : 같은 패키지 내부에서만 접근 가능 (상속 관계라도 패키지가 다르면 접근 불가)
protected : 같은 패키지나 상속관계의 클래스에서 접근 가능하고 그 외 외부에서는 접근 할 수 없음
public : 클래스의 외부 어디서나 접근 할 수 있음
논리적으로 패키지의 역할은 소소의 묶음이다
사용하려는 객체가 다른 패키지에 속해 있는 경우는 import 키워드를 사용한다
get() / set() 메서드 : private 으로 선언된 멤버 변수(속성, 필드)에 대해 접근, 수정할 수 있는 메서드를 public으로 제공함
(get() 메서드만 제공 되는 경우 read-only 필드)
(이클립스 기능 증 Sources -> Generate Getters and Setters 을 사용하면 get, set 메서드를 알아서 만들어준다)
멤버변수는 선언이 되면 기본값을 갖는데 int 형은 0 을, boolean(불리언) 형은 false 를 기본값으로 가진다
(1) 멤버변수를 public으로 설정하는 것과 (2) 멤버변수를 private로 설정하고 get, set 메서드로 접근하는 것의 차이는
무엇인가?
멤버변수를 public으로 설정하면 date.month = 100; 이와 같이 멤버변수에 바로 접근할 수 있어서
멤버변수에 잘못된 값이 입력되도 제어를 할 수가 없다.
하지만 멤버변수를 private로 설정하면 set 메서드 쪽에서 private boolean isValid; 변수를 활용해
잘못된 값이 입력되어도 제어를 해서 정보를 보호할 수 있다
package part2_ch08;
public class Birthday {
private int day;
private int month;
private int year;
private boolean isValid;
private boolean checkLeap;
public int getDay() {
return day;
}
public void setDay(int day) {
if (month == 2){
checkLeapYear(year);
if (checkLeap == true) {
if (day < 30) this.day = day;
else { isValid = false; }
}
if (checkLeap == false ){
if (day < 29) this.day = day;
else { isValid = false; }
}
}
else if (month == 4 || month == 6 || month == 9 || month == 11){
if (day < 31) this.day = day;
else { isValid = false; }
}
else {
if (day < 32) this.day = day;
else { isValid = false; }
}
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
if (month < 1 || month > 12) { // set 메서드에서 이와 같이 제어가 가능하다
isValid = false;
} else {
this.month = month;
}
}
public int getYear() {
return year;
}
public void setYear(int year) {
if (year > 1581){
this.year = year;
isValid = true;
}
else { isValid = false; }
}
public void checkLeapYear(int year){
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
checkLeap = true;
}
}
public void showDate() {
if (isValid) {
System.out.println(year + "년 " + month + "월 " + day + "일 입니다.");
}
else {
System.out.println("유효하지 않은 날짜 입니다");
}
}
}
Year 에서 조건이 맞으면 true 로 고정하고
그 다음 Month와 Day 에서는 조건이 맞으면 true 선언 안 하고, 값만 대입하고
조건과 다르면 false 를 선언한다
이렇게 해야 Year에서는 false로 선언했는데 Month 와 Day 에서 true로 바뀌는 오류가 없다
Year 가 false 여도 Month 나 Day 에서 true 선언하는 코드가 없기 때문에 true로 안 바뀐다
Year : true , false 둘 다 있음
Month : false 만 있음
Day : false 만 있음
package ch10;
public class BirthDayTest {
public static void main(String[] args) {
BirthDay date = new BirthDay();
date.setYear(2019);
date.setMonth(77);
date.setDay(100);
date.showDate();
}
}
'✅🌲강의 복습 노트 > 패캠 JavaSpring 강의,코드 복습' 카테고리의 다른 글
Part2. 2-11 캡슐화 (0) | 2024.12.26 |
---|---|
Part2. 2-9 참조 자료형 변수 (1) | 2024.12.17 |
Part2. 2-8 객체 구현 복습 (0) | 2024.12.16 |
Part2. 2-7 생성자 오버로딩 (with. 파인만 기법 + 문제출제) (0) | 2024.03.04 |
Part2. 2-6 생성자 (with. 파인만 기법 + 문제출제) (0) | 2024.02.28 |