728x90
728x90
= 캡슐화(Encapsulation)
캡슐화를 하기위해서 클래스 멤버변수의접근제한자를 private로 해야함제일 중요하게 알아야하는 것은 setter메서드와 getter메서드!
은닉된 멤버변수에 접근하기 위해서 공개된(public) 메서드를 통해서 접근할 수 있기 때문에,
변수값을 변경하는데 사용된되는 것이 setter 메서드 / 변수 값을 얻어오는데 사용하는 것은 getter메서드!
또한 데이터 유효성을 검증할 수 있는 루틴을 넣을 수도 있고.
접근 권한을 체크할 수 있는 로직을 포함시키면 인가되지 않은 사용자에게도 중요한 데이터나 로직을 감출 수 있다.
캡슐화를 문제로 해서 풀어내기 조금 복잡한데
단축키를 외워서 아주 좋게 문제를 풀 수 있었다.
= 단축키
기본생성자 : ctrl + space + enter
생성자를 한번에 : alt + shift + s -> Generate COnstructor using Fields.
getter와 setter의 자동완성 : alt + shift + s -> Generate Getters and Setters
< MyDate >
package encap.good;
public class MyDate {
//은닉이 있는 경우
private int year;
private int month;
private int day;
private String ssn;//주민번호라고 가정
/*
* 은닉된 변수에 값을 저장할 때. 클래스 설계자가 미리 작성해놓은
* setter메서드를 사용한다.
*
* setter메서드 선언
* 1. 값을 저장하기 위한 메서드
* 2. 접근제어자 public으로, 이름은 set+멤버변수으로 지정
*
*/
public void setYear(int year) {
if(year<1900||year>2021) {
System.out.println("잘못된 값 입력입니다");
}else {
this.year=year;
}
}
/*
*getter메서드의 선언
*1. 값을 조회하기 위한 메서드
*2. 접근제어자 public으로 선언하고, 이름은 get + member변수명으로 지정
*/
public int getYear() {
return year;
}
/*
* month,day,ssn에 getter, setter를 생성
* month는 - 1~12월 까지만 저장
* day - 31일까지만 저장
* ssn - 13자리까지만 저장. (문자열길이알아보는 명령어 .length()사용)
*/
public void setMonth(int month) {
if(month<1||month>12) {
System.out.println("잘못된 값 입력입니다");
}else {
this.month=month;
}
}
public int getMonth() {
return month;
}
public void setDay(int day) {
if(day<1||day>31) {
System.out.println("잘못된 값 입력입니다");
}else {
this.day=day;
}
}
public int getDay() {
return day;
}
public void setSsn(String ssn) {
if(ssn.length()!=13) {
System.out.println("-를 제외한 13자리 수를 입력하세요");
}else {
this.ssn=ssn;
}
}
public String getSsn() {
return ssn;
}
}
< MainClass >
package encap.good;
public class MainClass {
public static void main(String[] args) {
MyDate me = new MyDate();
//me.year=2021;
//me.setYear(2022);
//위와 같은 식은 전혀 사용할일 없고, 아래와 같이 메서드 형식으로 사용한다.
me.setYear(2021);
System.out.println("년도:"+me.getYear());
me.setMonth(10);
System.out.println("월:"+me.getMonth());
me.setDay(31);
System.out.println("일:"+me.getDay());
//이부분 안댐
me.setSsn("1234567891012");
System.out.println("주민번호:"+me.getSsn());
}
}
잘 안된다고 써놓은 부분 다시 확인하기
728x90
'수업 복습하기 > Java' 카테고리의 다른 글
Day 12 - 다형성 (casting, instanceof) (2) (0) | 2021.09.02 |
---|---|
Day 12 - 다형성(Polymorphism) (1) (0) | 2021.09.02 |
Day 11 - 접근 제한자(Access Modifier) (0) | 2021.08.31 |
Day 11 - super (생성자, 메서드) (0) | 2021.08.30 |
Day 11 - this() & this. (0) | 2021.08.30 |