본문 바로가기
🌈 백엔드/객체 지향

JAVA_객체지향_접근제어 지시자 & 캡슐화

by 개발자 알마 2023. 6. 3.
반응형

 

[1] 제어자 > 접근제어 지시자


(1) 접근제어 지시자 accesss modifier

  • 클래스 외부에서 멤버변수, 메서드, 생성자를 사용할수 있는 권한을 가지고 있는지 지정하는 키워드 
  • 한번에 4개중에 1개만 사용할수 있다 

 

public 모든 접근 허가
protected 같은 패키지 + 하위 클래스 접근 허가
default 같은 패키지 접근허가 
접근제어자가 지정되어있지 않다면 생략되어있는 형태이다 
private 같은 클래스 접근허가 
메모리에 할당

 

(2) 접근제어 지시자 활용방법

  • 권한제어가 필요한 항목(폼 형태 , 헤더, 바디, 풋터 , 개인정보) 과 공개가 가능한 함수 구현한다 
public class makeform {

	StringBuffer buffer = new StringBuffer();
	
    //출력할 폼 형태를 만든다 
	private String line = "===========================================\n";
	private String title = "  이름\t   주소 \t\t  전화번호  \n";
	
    // 헤더 : 폼은 변경이 불가능하게 권한을 제한한다 
    private void makeHeader() {
		buffer.append(line);
		buffer.append(title);
		buffer.append(line);
	}
	
    // 바디 : 폼 안에 입력할 개인정보도 접근 불가능하게 권한을 제한한다 
	private void makeBody()
	{
		buffer.append("이름A \t");
		buffer.append("주소A \t");
		buffer.append("010-1111-1111\n");
		
		buffer.append("이름B \t");
		buffer.append("주소B \t");
		buffer.append("010-2222-2222\n");
	}
	
    // 풋터 : 폼은 변경이 불가능하게 권한을 제한한다 
	private void makeFooter() {
		
		buffer.append(line);
	}
	
    // 출력하라는 함수는 권한 제어할 필요는 없으므로 전체공개한다 
	public String showForm() {
		makeHeader();
		makeBody();
		makeFooter();
        
		return buffer.toString();
	}
}

 

본 main 함수에서  인스턴스하여 객체를 생성하고 , 인스턴스에 함수를 호출하여 변수를 출력한다 

public class Service {

	public static void main(String[] args) {
		
        //인스턴스
		makeform newForm = new makeform();
        
        //인스턴스의 함수를 호출한 변수 선언 
		String builder = newForm.showForm();
		
		System.out.println(builder);
	}

}

 

 

[2] 제어자 > 그 외 지시자

 


(1) static 

  • static 멤버변수
  • static 메서드
  • static 초기화 블럭

 

(2) final

  • final 클래스 : 상속관계가 불가하다 (확장x)
  • final 메서드 : @overriding 불가하다 
  • final 멤버변수
  • final 지역변수

 

(3) abstract 

  • abstract 추상클래스
  • abstract 추상메서드

 

 

 

 

[3] 캡슐화

 


(1) 접근제어자 목적

  • 외부로부터 클래스 내부에 선언된 데이터 보호 하기 위해서 
  • 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서
  • 예) 데이터가 유효한 값을 유지하게 보호한다
  • 예)비밀번호 데이터를 외부에서 변경하지 못하도록 외부 접근 제한을 한다

 

(2) 캡슐화 encapsulation

  • 꼭 필요한 정보와 기능만 외부에 오픈한다
  • 외부에서 접근할 필요가 없는 멤버들을 private로 지정하여 접근제한을 한다 
  • 멤버변수와 메서드를 숨기고 외부에는 통합된 인터페이스만 제공하여 오류방지와 일관된 기능을 제공한다
  • 각각의 메서드, 멤버변수를 접근하여 발생하는 오류를 최소화한다 
  • 외부에서 접근 가능한 최소한의 정보를 오픈함하여 , 객체 오류 방지하여 클라이언트 객체가 효율적으로 활용할수 있도록 돕는다 
  • 점수가 public 이라면 얼마든지 접근하여 점수를 바꿀수 있다. 점수는 private , 조회는 public 이런식으로 객체를 나눠 협력한다 

 

 

(3) get() set() 메서드 

  • get 겟터 메서드 , set 셋터 메서드 
  • private 멤버변수를 접근할수 없도록 숨기고 대신 접근 및 수정이 가능한 get멤버변수 , set멤버변수를 만든다 
  • get() : 멤버변수의 값을 반환한다
  • set() : 매개변수에 지정된 값이 조건에 맞다면 멤버변수의 값을 변경한다

 

package 패키지;

public class score {
	
    //숨겨야하는 멤버변수 
	private static int serialNum = 1000;
	private int employeeId;
	private String employeeName;
	private String department
	
    //캡슐화 된 멤버변수 (읽기만가능)
	public static int getSerialNum() {
		return serialNum;
	}
    
    //캡슐화 된 멤버변수 (읽기, 수정 가능)
	public int getEmployeeId() {
		return employeeId;
	}
	public void setEmployeeId(int employeeId) {
		this.employeeId = employeeId;
	}
    
    //캡슐화 된 멤버변수 (읽기, 수정 가능)
	public String getEmployeeName() {
		return employeeName;
	}
	public void setEmployeeName(String employeeName) {
		this.employeeName = employeeName;
	}
    
    //캡슐화 된 멤버변수 (읽기, 수정 가능)
	public String getDepartment() {
		return department;
	}
	public void setDepartment(String department) {
		this.department = department;
	}
}
반응형

댓글