본문 바로가기

수업 복습하기/Java

Day 11 - 캡슐화(Encapsulation)

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